diff --git a/DEPS b/DEPS index 6798433..227e4fa 100644 --- a/DEPS +++ b/DEPS
@@ -167,11 +167,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'a4828a13c27a0bbd2a2b9169916a0b4d58853df4', + 'skia_revision': '7d7aaf46aeb450b983ff5ac8833d6ca3065671a8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': 'e20a46d98b931f30e20fcb1928a0522cd3dd2f57', + 'v8_revision': 'a6ff36bd0ab90ed1a1050b460a546dbf7a1bb351', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -179,11 +179,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'da1f90aa77b4fc5dcb6a5d17def690d3b01e9c1d', + 'angle_revision': 'e7b5c5e99289f3f0f9768308d05941a2e98f839b', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '1c462ebc904cee7d85a0881a12fa1d42f3b2a9ff', + 'swiftshader_revision': 'fb632b91110cabce297c34b8c01ec8c931a10933', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -302,7 +302,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'dawn_revision': 'b6acae6d353d3a4b9b9054a72239144ead122f8d', + 'dawn_revision': 'ba9e1ff86fa47141fc25a5d1569b13cb5ec916a9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -753,7 +753,7 @@ Var('chromium_git') + '/angle/angle.git' + '@' + Var('angle_revision'), 'src/third_party/dav1d/libdav1d': - Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + 'a91a03b0e143f77bd647b481aff034eb3315ee7b', + Var('chromium_git') + '/external/github.com/videolan/dav1d.git' + '@' + '62fcd0cb19d2fe46af7541d8185de86d45d58697', 'src/third_party/dawn': Var('dawn_git') + '/dawn.git' + '@' + Var('dawn_revision'), @@ -862,7 +862,7 @@ # Build tools for Chrome OS. Note: This depends on third_party/pyelftools. 'src/third_party/chromite': { - 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '9bc8545214f911371665a3cfa9f0cf93aac9f25d', + 'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '8cd95dd1d376f4cdb56a6b40e933cfbcd3eb4a8d', 'condition': 'checkout_linux', }, @@ -887,7 +887,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '033004652fafc4d03325d5ec5dd415ddf72462a1', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'e16ffffc28f3985c98cfc495840e93d9afa8884e', 'src/third_party/devtools-node-modules': Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'), @@ -1280,7 +1280,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '8dda56311c7ded002f01dcb15bfe5310888ff5b8', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '624e60f811113ab4f8d604dc65e7cfef773df5cb', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3',
diff --git a/android_webview/browser/aw_feature_list_creator.cc b/android_webview/browser/aw_feature_list_creator.cc index fdb0b75..69816fd7 100644 --- a/android_webview/browser/aw_feature_list_creator.cc +++ b/android_webview/browser/aw_feature_list_creator.cc
@@ -52,6 +52,7 @@ // experiment groups. metrics::prefs::kMetricsLowEntropySource, // Logged directly in the ChromeUserMetricsExtension proto. + metrics::prefs::kInstallDate, metrics::prefs::kMetricsSessionID, // Current and past country codes, to filter variations studies by country. variations::prefs::kVariationsCountry,
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.cc b/android_webview/browser/metrics/aw_metrics_service_client.cc index f4078a2..ef38aaf 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client.cc
@@ -17,6 +17,7 @@ #include "base/hash/hash.h" #include "base/i18n/rtl.h" #include "base/lazy_instance.h" +#include "base/metrics/histogram_functions.h" #include "base/strings/string16.h" #include "components/metrics/call_stack_profile_metrics_provider.h" #include "components/metrics/cpu_metrics_provider.h" @@ -121,6 +122,39 @@ return service; } +// Queries the system for the app's first install time and uses this in the +// kInstallDate pref. Must be called before created a MetricsStateManager. +// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has +// been persisted for one or two milestones. +void PopulateSystemInstallDateIfNecessary(PrefService* prefs) { + int64_t install_date = prefs->GetInt64(metrics::prefs::kInstallDate); + if (install_date > 0) { + // kInstallDate appears to be valid (common case). Finish early as an + // optimization to avoid a JNI call below. + base::UmaHistogramEnumeration("Android.WebView.Metrics.BackfillInstallDate", + BackfillInstallDate::kValidInstallDatePref); + return; + } + + JNIEnv* env = base::android::AttachCurrentThread(); + int64_t system_install_date = + Java_AwMetricsServiceClient_getAppInstallTime(env); + if (system_install_date < 0) { + // Could not figure out install date from the system. Let the + // MetricsStateManager set this pref to its best guess for a reasonable + // time. + base::UmaHistogramEnumeration( + "Android.WebView.Metrics.BackfillInstallDate", + BackfillInstallDate::kCouldNotGetPackageManagerInstallDate); + return; + } + + base::UmaHistogramEnumeration( + "Android.WebView.Metrics.BackfillInstallDate", + BackfillInstallDate::kPersistedPackageManagerInstallDate); + prefs->SetInt64(metrics::prefs::kInstallDate, system_install_date); +} + } // namespace // static @@ -139,6 +173,7 @@ pref_service_ = pref_service; + PopulateSystemInstallDateIfNecessary(pref_service_); metrics_state_manager_ = metrics::MetricsStateManager::Create( pref_service_, this, base::string16(), base::BindRepeating(&StoreClientInfo),
diff --git a/android_webview/browser/metrics/aw_metrics_service_client.h b/android_webview/browser/metrics/aw_metrics_service_client.h index 1c8b4e1..431ad3e 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client.h +++ b/android_webview/browser/metrics/aw_metrics_service_client.h
@@ -24,6 +24,17 @@ namespace android_webview { +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has +// been persisted for one or two milestones. Visible for testing. +enum class BackfillInstallDate { + kValidInstallDatePref = 0, + kCouldNotGetPackageManagerInstallDate = 1, + kPersistedPackageManagerInstallDate = 2, + kMaxValue = kPersistedPackageManagerInstallDate, +}; + // AwMetricsServiceClient is a singleton which manages WebView metrics // collection. //
diff --git a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc index cb937e9..94a4fa02 100644 --- a/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc +++ b/android_webview/browser/metrics/aw_metrics_service_client_unittest.cc
@@ -8,6 +8,7 @@ #include "base/macros.h" #include "base/memory/scoped_refptr.h" #include "base/run_loop.h" +#include "base/test/metrics/histogram_tester.h" #include "base/test/task_environment.h" #include "base/test/test_simple_task_runner.h" #include "components/metrics/metrics_pref_names.h" @@ -179,4 +180,41 @@ ASSERT_FALSE(client->IsRecordingActive()); } +// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has +// been persisted for one or two milestones. +TEST_F(AwMetricsServiceClientTest, TestPreferPersistedInstallDate) { + base::HistogramTester histogram_tester; + auto prefs = CreateTestPrefs(); + int64_t install_date = 12345; + prefs->SetInt64(metrics::prefs::kInstallDate, install_date); + auto client = CreateAndInitTestClient(prefs.get()); + ASSERT_EQ(install_date, prefs->GetInt64(metrics::prefs::kInstallDate)); + + // Verify the histogram. + histogram_tester.ExpectBucketCount( + "Android.WebView.Metrics.BackfillInstallDate", + BackfillInstallDate::kValidInstallDatePref, 1); + histogram_tester.ExpectTotalCount( + "Android.WebView.Metrics.BackfillInstallDate", 1); +} + +// TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has +// been persisted for one or two milestones. +TEST_F(AwMetricsServiceClientTest, TestGetInstallDateFromJavaIfMissing) { + base::HistogramTester histogram_tester; + auto prefs = CreateTestPrefs(); + auto client = CreateAndInitTestClient(prefs.get()); + // All we can safely assert is the install time is set, since checking the + // actual time is racy (ex. in the unlikely scenario if this test executes in + // the same millisecond as when the package was installed). + ASSERT_TRUE(prefs->HasPrefPath(metrics::prefs::kInstallDate)); + + // Verify the histogram. + histogram_tester.ExpectBucketCount( + "Android.WebView.Metrics.BackfillInstallDate", + BackfillInstallDate::kPersistedPackageManagerInstallDate, 1); + histogram_tester.ExpectTotalCount( + "Android.WebView.Metrics.BackfillInstallDate", 1); +} + } // namespace android_webview
diff --git a/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java index 02c9e85..4f2bb94 100644 --- a/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java +++ b/android_webview/java/src/org/chromium/android_webview/metrics/AwMetricsServiceClient.java
@@ -66,6 +66,28 @@ return shouldRecordPackageName(ctx) ? ctx.getPackageName() : null; } + /** + * Gets a long representing the install time of the embedder application. Units are in seconds, + * as this is the resolution used by the metrics service. Returns {@code -1} upon failure. + */ + // TODO(https://crbug.com/1012025): remove this when the kInstallDate pref has been persisted + // for one or two milestones. + @CalledByNative + private static long getAppInstallTime() { + try { + Context ctx = ContextUtils.getApplicationContext(); + long installTimeMs = ctx.getPackageManager() + .getPackageInfo(ctx.getPackageName(), 0 /* flags */) + .firstInstallTime; + long installTimeSec = installTimeMs / 1000; + return installTimeSec; + } catch (PackageManager.NameNotFoundException e) { + // This should never happen. + Log.e(TAG, "App could not find itself by package name!"); + return -1; + } + } + @NativeMethods interface Natives { void setHaveMetricsConsent(boolean userConsent, boolean appConsent);
diff --git a/ash/accelerators/accelerator_confirmation_dialog.cc b/ash/accelerators/accelerator_confirmation_dialog.cc index 55c570a..55c00b2e 100644 --- a/ash/accelerators/accelerator_confirmation_dialog.cc +++ b/ash/accelerators/accelerator_confirmation_dialog.cc
@@ -28,6 +28,9 @@ base::OnceClosure on_accept_callback) : window_title_(l10n_util::GetStringUTF16(window_title_text_id)), on_accept_callback_(std::move(on_accept_callback)) { + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON)); + SetLayoutManager(std::make_unique<views::FillLayout>()); SetBorder(views::CreateEmptyBorder( views::LayoutProvider::Get()->GetDialogInsetsForContentType( @@ -69,13 +72,6 @@ return window_title_; } -base::string16 AcceleratorConfirmationDialog::GetDialogButtonLabel( - ui::DialogButton button) const { - if (button == ui::DIALOG_BUTTON_OK) - return l10n_util::GetStringUTF16(IDS_ASH_CONTINUE_BUTTON); - return views::DialogDelegateView::GetDialogButtonLabel(button); -} - base::WeakPtr<AcceleratorConfirmationDialog> AcceleratorConfirmationDialog::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr();
diff --git a/ash/accelerators/accelerator_confirmation_dialog.h b/ash/accelerators/accelerator_confirmation_dialog.h index 02d06c5..cd9afbf 100644 --- a/ash/accelerators/accelerator_confirmation_dialog.h +++ b/ash/accelerators/accelerator_confirmation_dialog.h
@@ -26,7 +26,6 @@ bool Accept() override; ui::ModalType GetModalType() const override; base::string16 GetWindowTitle() const override; - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; base::WeakPtr<AcceleratorConfirmationDialog> GetWeakPtr();
diff --git a/ash/accelerators/accelerator_controller_impl.cc b/ash/accelerators/accelerator_controller_impl.cc index 470d56f..4a5953710 100644 --- a/ash/accelerators/accelerator_controller_impl.cc +++ b/ash/accelerators/accelerator_controller_impl.cc
@@ -596,7 +596,7 @@ Shell::Get()->screenshot_controller()->TakeScreenshotForAllRootWindows(); } -void HandleToggleSystemTrayBubbleInternal() { +void HandleToggleSystemTrayBubbleInternal(bool focus_message_center) { aura::Window* target_root = Shell::GetRootWindowForNewWindows(); UnifiedSystemTray* tray = RootWindowController::ForWindow(target_root) ->GetStatusAreaWidget() @@ -606,17 +606,20 @@ } else { tray->ShowBubble(false /* show_by_click */); tray->ActivateBubble(); + + if (focus_message_center) + tray->FocusFirstNotification(); } } void HandleToggleSystemTrayBubble() { base::RecordAction(UserMetricsAction("Accel_Toggle_System_Tray_Bubble")); - HandleToggleSystemTrayBubbleInternal(); + HandleToggleSystemTrayBubbleInternal(false /*focus_message_center*/); } void HandleToggleMessageCenterBubble() { base::RecordAction(UserMetricsAction("Accel_Toggle_Message_Center_Bubble")); - HandleToggleSystemTrayBubbleInternal(); + HandleToggleSystemTrayBubbleInternal(true /*focus_message_center*/); } void HandleShowTaskManager() {
diff --git a/ash/app_list/views/app_list_item_view.cc b/ash/app_list/views/app_list_item_view.cc index b1e65fd..36af280 100644 --- a/ash/app_list/views/app_list_item_view.cc +++ b/ash/app_list/views/app_list_item_view.cc
@@ -959,6 +959,11 @@ void AppListItemView::AdaptBoundsForSelectionHighlight(gfx::Rect* bounds) { bounds->Inset(0, 0, 0, GetAppListConfig().grid_icon_bottom_padding()); bounds->ClampToCenteredSize(GetAppListConfig().grid_focus_size()); + // Update the bounds to account for the focus ring width - by default, the + // focus ring is painted so the highlight bounds are centered within the + // focus ring stroke - this should be overridden so the outer stroke bounds + // match the grid focus size set in the app list config. + bounds->Inset(gfx::Insets(kFocusRingWidth / 2)); } } // namespace ash
diff --git a/ash/app_list/views/remove_query_confirmation_dialog.cc b/ash/app_list/views/remove_query_confirmation_dialog.cc index 54ee43e..f4133b2 100644 --- a/ash/app_list/views/remove_query_confirmation_dialog.cc +++ b/ash/app_list/views/remove_query_confirmation_dialog.cc
@@ -30,6 +30,12 @@ : confirm_callback_(std::move(confirm_callback)), event_flags_(event_flags), contents_view_(contents_view) { + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, + l10n_util::GetStringUTF16(IDS_REMOVE_SUGGESTION_BUTTON_LABEL)); + DialogDelegate::set_button_label(ui::DIALOG_BUTTON_CANCEL, + l10n_util::GetStringUTF16(IDS_APP_CANCEL)); + const views::LayoutProvider* provider = views::LayoutProvider::Get(); SetLayoutManager(std::make_unique<views::BoxLayout>( views::BoxLayout::Orientation::kVertical, @@ -72,13 +78,6 @@ return false; } -base::string16 RemoveQueryConfirmationDialog::GetDialogButtonLabel( - ui::DialogButton button) const { - return button == ui::DIALOG_BUTTON_CANCEL - ? l10n_util::GetStringUTF16(IDS_APP_CANCEL) - : l10n_util::GetStringUTF16(IDS_REMOVE_SUGGESTION_BUTTON_LABEL); -} - bool RemoveQueryConfirmationDialog::Accept() { if (confirm_callback_) std::move(confirm_callback_).Run(true, event_flags_);
diff --git a/ash/app_list/views/remove_query_confirmation_dialog.h b/ash/app_list/views/remove_query_confirmation_dialog.h index 1c7bebf..a6297ed 100644 --- a/ash/app_list/views/remove_query_confirmation_dialog.h +++ b/ash/app_list/views/remove_query_confirmation_dialog.h
@@ -43,7 +43,6 @@ bool ShouldShowCloseButton() const override; // views::DialogDelegate: - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; bool Accept() override; bool Cancel() override;
diff --git a/ash/public/cpp/app_list/app_list_features.cc b/ash/public/cpp/app_list/app_list_features.cc index 5ababce..56fe098 100644 --- a/ash/public/cpp/app_list/app_list_features.cc +++ b/ash/public/cpp/app_list/app_list_features.cc
@@ -47,6 +47,8 @@ base::FEATURE_ENABLED_BY_DEFAULT}; const base::Feature kEnableFuzzyAppSearch{"EnableFuzzyAppSearch", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kEnableAggregatedMlSearchRanking{ + "EnableAggregatedMlSearchRanking", base::FEATURE_DISABLED_BY_DEFAULT}; bool IsAnswerCardEnabled() { // Not using local static variable to allow tests to change this value. @@ -120,6 +122,10 @@ return base::FeatureList::IsEnabled(kEnableFuzzyAppSearch); } +bool IsAggregatedMlSearchRankingEnabled() { + return base::FeatureList::IsEnabled(kEnableAggregatedMlSearchRanking); +} + std::string AnswerServerUrl() { const std::string experiment_url = base::GetFieldTrialParamValueByFeature(kEnableAnswerCard, "ServerUrl");
diff --git a/ash/public/cpp/app_list/app_list_features.h b/ash/public/cpp/app_list/app_list_features.h index 48d06ef6..b5154752 100644 --- a/ash/public/cpp/app_list/app_list_features.h +++ b/ash/public/cpp/app_list/app_list_features.h
@@ -77,6 +77,10 @@ // that optionally gets scaled down). ASH_PUBLIC_EXPORT extern const base::Feature kScalableAppList; +// Enables using aggregated model in ranking non-app results for +// non empty queries. +ASH_PUBLIC_EXPORT extern const base::Feature kEnableAggregatedMlSearchRanking; + bool ASH_PUBLIC_EXPORT IsAnswerCardEnabled(); bool ASH_PUBLIC_EXPORT IsPlayStoreAppSearchEnabled(); bool ASH_PUBLIC_EXPORT IsAppDataSearchEnabled(); @@ -95,6 +99,7 @@ bool ASH_PUBLIC_EXPORT IsAggregatedMlAppRankingEnabled(); bool ASH_PUBLIC_EXPORT IsScalableAppListEnabled(); bool ASH_PUBLIC_EXPORT IsFuzzyAppSearchEnabled(); +bool ASH_PUBLIC_EXPORT IsAggregatedMlSearchRankingEnabled(); std::string ASH_PUBLIC_EXPORT AnswerServerUrl(); std::string ASH_PUBLIC_EXPORT AnswerServerQuerySuffix();
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc index 5e06d99..3e19435 100644 --- a/ash/root_window_controller.cc +++ b/ash/root_window_controller.cc
@@ -790,7 +790,7 @@ display::Screen* screen = display::Screen::GetScreen(); if (screen->GetDisplayNearestWindow(root_window).id() == screen->GetPrimaryDisplay().id()) { - split_view_controller_ = std::make_unique<SplitViewController>(); + split_view_controller_ = std::make_unique<SplitViewController>(root_window); } Shell* shell = Shell::Get(); shell->InitRootWindow(root_window);
diff --git a/ash/session/session_aborted_dialog.cc b/ash/session/session_aborted_dialog.cc index 1b0a2959..f99dfa5 100644 --- a/ash/session/session_aborted_dialog.cc +++ b/ash/session/session_aborted_dialog.cc
@@ -57,12 +57,6 @@ return ui::DIALOG_BUTTON_OK; } -base::string16 SessionAbortedDialog::GetDialogButtonLabel( - ui::DialogButton button) const { - return l10n_util::GetStringUTF16( - IDS_ASH_MULTIPROFILES_SESSION_ABORT_BUTTON_LABEL); -} - ui::ModalType SessionAbortedDialog::GetModalType() const { return ui::MODAL_TYPE_SYSTEM; } @@ -82,7 +76,13 @@ GetLayoutManager()->GetPreferredHeightForWidth(this, kDefaultWidth)); } -SessionAbortedDialog::SessionAbortedDialog() = default; +SessionAbortedDialog::SessionAbortedDialog() { + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, + l10n_util::GetStringUTF16( + IDS_ASH_MULTIPROFILES_SESSION_ABORT_BUTTON_LABEL)); +} + SessionAbortedDialog::~SessionAbortedDialog() = default; void SessionAbortedDialog::InitDialog(const std::string& user_email) {
diff --git a/ash/session/session_aborted_dialog.h b/ash/session/session_aborted_dialog.h index fe0714fc..01b1d3f 100644 --- a/ash/session/session_aborted_dialog.h +++ b/ash/session/session_aborted_dialog.h
@@ -21,7 +21,6 @@ // views::DialogDelegate overrides. bool Accept() override; int GetDialogButtons() const override; - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; // views::WidgetDelegate overrides. ui::ModalType GetModalType() const override;
diff --git a/ash/shelf/shelf_navigation_widget.cc b/ash/shelf/shelf_navigation_widget.cc index a021406..04a2626 100644 --- a/ash/shelf/shelf_navigation_widget.cc +++ b/ash/shelf/shelf_navigation_widget.cc
@@ -33,13 +33,6 @@ Shell::Get()->tablet_mode_controller()->InTabletMode(); } -// Returns the desired spacing between the back and home buttons. -int GetButtonSpacing() { - if (IsTabletMode() && ShelfConfig::Get()->is_in_app()) - return 0; - return ShelfConfig::Get()->button_spacing(); -} - // Returns the bounds for the first button shown in this view (the back // button in tablet mode, the home button otherwise). gfx::Rect GetFirstButtonBounds() { @@ -51,9 +44,10 @@ // always the home button and only in tablet mode, which implies a horizontal // shelf). gfx::Rect GetSecondButtonBounds() { - return gfx::Rect(ShelfConfig::Get()->control_size() + GetButtonSpacing(), 0, - ShelfConfig::Get()->control_size(), - ShelfConfig::Get()->control_size()); + return gfx::Rect( + ShelfConfig::Get()->control_size() + ShelfConfig::Get()->button_spacing(), + 0, ShelfConfig::Get()->control_size(), + ShelfConfig::Get()->control_size()); } } // namespace @@ -235,7 +229,8 @@ if (!shelf_->IsHorizontalAlignment()) return gfx::Size(control_size, control_size); return gfx::Size( - IsTabletMode() ? (2 * control_size + GetButtonSpacing()) : control_size, + IsTabletMode() ? (2 * control_size + ShelfConfig::Get()->button_spacing()) + : control_size, control_size); }
diff --git a/ash/system/accessibility/accessibility_feature_disable_dialog.cc b/ash/system/accessibility/accessibility_feature_disable_dialog.cc index 30e1fb2..0b937c1 100644 --- a/ash/system/accessibility/accessibility_feature_disable_dialog.cc +++ b/ash/system/accessibility/accessibility_feature_disable_dialog.cc
@@ -29,6 +29,9 @@ : window_title_(l10n_util::GetStringUTF16(window_title_text_id)), on_accept_callback_(std::move(on_accept_callback)), on_cancel_callback_(std::move(on_cancel_callback)) { + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_ASH_YES_BUTTON)); + SetLayoutManager(std::make_unique<views::FillLayout>()); SetBorder(views::CreateEmptyBorder( views::LayoutProvider::Get()->GetDialogInsetsForContentType( @@ -76,13 +79,6 @@ return window_title_; } -base::string16 AccessibilityFeatureDisableDialog::GetDialogButtonLabel( - ui::DialogButton button) const { - if (button == ui::DIALOG_BUTTON_OK) - return l10n_util::GetStringUTF16(IDS_ASH_YES_BUTTON); - return views::DialogDelegateView::GetDialogButtonLabel(button); -} - base::WeakPtr<AccessibilityFeatureDisableDialog> AccessibilityFeatureDisableDialog::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); @@ -92,4 +88,4 @@ return "AccessibilityFeatureDisableDialog"; } -} // namespace ash \ No newline at end of file +} // namespace ash
diff --git a/ash/system/accessibility/accessibility_feature_disable_dialog.h b/ash/system/accessibility/accessibility_feature_disable_dialog.h index c26ef13..dc1986da 100644 --- a/ash/system/accessibility/accessibility_feature_disable_dialog.h +++ b/ash/system/accessibility/accessibility_feature_disable_dialog.h
@@ -30,7 +30,6 @@ bool Accept() override; ui::ModalType GetModalType() const override; base::string16 GetWindowTitle() const override; - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; base::WeakPtr<AccessibilityFeatureDisableDialog> GetWeakPtr(); @@ -50,4 +49,4 @@ } // namespace ash -#endif // ASH_SYSTEM_ACCESSIBILITY_ACCESSIBILITY_FEATURE_DISABLE_DIALOG_H_ \ No newline at end of file +#endif // ASH_SYSTEM_ACCESSIBILITY_ACCESSIBILITY_FEATURE_DISABLE_DIALOG_H_
diff --git a/ash/system/message_center/unified_message_center_bubble.cc b/ash/system/message_center/unified_message_center_bubble.cc index ed39f9d..52e3091 100644 --- a/ash/system/message_center/unified_message_center_bubble.cc +++ b/ash/system/message_center/unified_message_center_bubble.cc
@@ -93,6 +93,10 @@ return tray_->FocusQuickSettings(reverse); } +void UnifiedMessageCenterBubble::FocusFirstNotification() { + message_center_view_->GetFocusManager()->AdvanceFocus(false /*reverse*/); +} + bool UnifiedMessageCenterBubble::IsMessageCenterVisible() { return message_center_view_->GetVisible(); }
diff --git a/ash/system/message_center/unified_message_center_bubble.h b/ash/system/message_center/unified_message_center_bubble.h index d9e44f9..e16b322 100644 --- a/ash/system/message_center/unified_message_center_bubble.h +++ b/ash/system/message_center/unified_message_center_bubble.h
@@ -38,6 +38,9 @@ // Relinquish focus and transfer it to the quick settings widget. bool FocusOut(bool reverse); + // Move focus to the first notification. + void FocusFirstNotification(); + // Returns true if notifications are shown. bool IsMessageCenterVisible();
diff --git a/ash/system/session/logout_confirmation_dialog.cc b/ash/system/session/logout_confirmation_dialog.cc index fdba529..236ba1b 100644 --- a/ash/system/session/logout_confirmation_dialog.cc +++ b/ash/system/session/logout_confirmation_dialog.cc
@@ -37,6 +37,10 @@ LogoutConfirmationController* controller, base::TimeTicks logout_time) : controller_(controller), logout_time_(logout_time) { + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, + l10n_util::GetStringUTF16(IDS_ASH_LOGOUT_CONFIRMATION_BUTTON)); + SetLayoutManager(std::make_unique<views::FillLayout>()); SetBorder(views::CreateEmptyBorder( views::LayoutProvider::Get()->GetDialogInsetsForContentType( @@ -81,13 +85,6 @@ return true; } -base::string16 LogoutConfirmationDialog::GetDialogButtonLabel( - ui::DialogButton button) const { - if (button == ui::DIALOG_BUTTON_OK) - return l10n_util::GetStringUTF16(IDS_ASH_LOGOUT_CONFIRMATION_BUTTON); - return views::DialogDelegateView::GetDialogButtonLabel(button); -} - ui::ModalType LogoutConfirmationDialog::GetModalType() const { return ui::MODAL_TYPE_SYSTEM; }
diff --git a/ash/system/session/logout_confirmation_dialog.h b/ash/system/session/logout_confirmation_dialog.h index c395f3f..864369bb 100644 --- a/ash/system/session/logout_confirmation_dialog.h +++ b/ash/system/session/logout_confirmation_dialog.h
@@ -34,7 +34,6 @@ // views::DialogDelegateView: bool Accept() override; - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; // views::WidgetDelegate: ui::ModalType GetModalType() const override;
diff --git a/ash/system/unified/unified_system_tray.cc b/ash/system/unified/unified_system_tray.cc index d5e658a..27380fd 100644 --- a/ash/system/unified/unified_system_tray.cc +++ b/ash/system/unified/unified_system_tray.cc
@@ -217,6 +217,14 @@ ui_delegate_->SetTrayBubbleHeight(height); } +void UnifiedSystemTray::FocusFirstNotification() { + if (!features::IsUnifiedMessageCenterRefactorEnabled()) + return; + + FocusMessageCenter(false /*reverse*/); + message_center_bubble()->FocusFirstNotification(); +} + bool UnifiedSystemTray::FocusMessageCenter(bool reverse) { if (!IsMessageCenterBubbleShown()) return false;
diff --git a/ash/system/unified/unified_system_tray.h b/ash/system/unified/unified_system_tray.h index 361d1cb3..6d49c7d7 100644 --- a/ash/system/unified/unified_system_tray.h +++ b/ash/system/unified/unified_system_tray.h
@@ -100,6 +100,9 @@ // bubble is shown. void SetTrayBubbleHeight(int height); + // Focus the first notification in the message center. + void FocusFirstNotification(); + bool FocusMessageCenter(bool reverse); bool FocusQuickSettings(bool reverse);
diff --git a/ash/system/unified/unified_system_tray_bubble.cc b/ash/system/unified/unified_system_tray_bubble.cc index e349ab5..0657470 100644 --- a/ash/system/unified/unified_system_tray_bubble.cc +++ b/ash/system/unified/unified_system_tray_bubble.cc
@@ -299,15 +299,9 @@ // Don't close the bubble if the message center is gaining or losing // activation. - if (features::IsUnifiedMessageCenterRefactorEnabled() && - tray_->IsMessageCenterBubbleShown()) { - views::Widget* message_center_widget = - tray_->message_center_bubble()->GetBubbleWidget(); - if (message_center_widget == - views::Widget::GetWidgetForNativeView(gained_active) || - (lost_active && - message_center_widget == - views::Widget::GetWidgetForNativeView(lost_active))) { + if (features::IsUnifiedMessageCenterRefactorEnabled()) { + if (GetContainerForWindow(gained_active) == + GetContainerForWindow(lost_active)) { return; } }
diff --git a/ash/wm/base_state.cc b/ash/wm/base_state.cc index b7306d4..ca6e731 100644 --- a/ash/wm/base_state.cc +++ b/ash/wm/base_state.cc
@@ -188,9 +188,9 @@ if (ShouldAllowSplitView()) { bounds_in_parent = SplitViewController::Get()->GetSnappedWindowBoundsInParent( - window, (state_type == WindowStateType::kLeftSnapped) - ? SplitViewController::LEFT - : SplitViewController::RIGHT); + (state_type == WindowStateType::kLeftSnapped) + ? SplitViewController::LEFT + : SplitViewController::RIGHT); } else { bounds_in_parent = (state_type == WindowStateType::kLeftSnapped) ? GetDefaultLeftSnappedWindowBoundsInParent(window)
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc index bdd7fc3..c93cf4f 100644 --- a/ash/wm/overview/overview_grid.cc +++ b/ash/wm/overview/overview_grid.cc
@@ -258,8 +258,8 @@ SplitViewController::LEFT) ? SplitViewController::RIGHT : SplitViewController::LEFT; - gfx::Rect bounds = split_view_controller->GetSnappedWindowBoundsInScreen( - root_window, opposite_position); + gfx::Rect bounds = + split_view_controller->GetSnappedWindowBoundsInScreen(opposite_position); if (!divider_changed) return bounds; @@ -316,10 +316,10 @@ switch (state) { case SplitViewController::State::kLeftSnapped: return split_view_controller->GetSnappedWindowBoundsInScreen( - window, SplitViewController::RIGHT); + SplitViewController::RIGHT); case SplitViewController::State::kRightSnapped: return split_view_controller->GetSnappedWindowBoundsInScreen( - window, SplitViewController::LEFT); + SplitViewController::LEFT); default: return screen_util:: GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer(window);
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc index d36e43d..87a5231f 100644 --- a/ash/wm/overview/overview_session_unittest.cc +++ b/ash/wm/overview/overview_session_unittest.cc
@@ -1251,8 +1251,10 @@ } // Tests that dragging a window from the top of a display creates a drop target -// on that display. -TEST_P(OverviewSessionTest, DropTargetOnCorrectDisplayForDraggingFromTop) { +// on that display. The workflow will be real after the tablet disambiguation +// work. Until then, this test can safely be disabled. +TEST_P(OverviewSessionTest, + DISABLED_DropTargetOnCorrectDisplayForDraggingFromTop) { UpdateDisplay("600x600,600x600"); EnterTabletMode(); // DisplayConfigurationObserver enables mirror mode when tablet mode is @@ -1329,7 +1331,7 @@ EXPECT_FALSE(GetDropTarget(1)); gfx::PointF drag_point = primary_screen_item->target_bounds().CenterPoint(); overview_session()->InitiateDrag(primary_screen_item, drag_point, - /*is_touch_dragging=*/false); + /*is_touch_dragging=*/true); EXPECT_FALSE(GetDropTarget(0)); EXPECT_FALSE(GetDropTarget(1)); drag_point.Offset(5.f, 0.f); @@ -1342,7 +1344,7 @@ EXPECT_FALSE(GetDropTarget(1)); drag_point = secondary_screen_item->target_bounds().CenterPoint(); overview_session()->InitiateDrag(secondary_screen_item, drag_point, - /*is_touch_dragging=*/false); + /*is_touch_dragging=*/true); EXPECT_FALSE(GetDropTarget(0)); EXPECT_FALSE(GetDropTarget(1)); drag_point.Offset(5.f, 0.f); @@ -3224,14 +3226,14 @@ return window; } - gfx::Rect GetSplitViewLeftWindowBounds(aura::Window* window) { + gfx::Rect GetSplitViewLeftWindowBounds() { return split_view_controller()->GetSnappedWindowBoundsInScreen( - window, SplitViewController::LEFT); + SplitViewController::LEFT); } - gfx::Rect GetSplitViewRightWindowBounds(aura::Window* window) { + gfx::Rect GetSplitViewRightWindowBounds() { return split_view_controller()->GetSnappedWindowBoundsInScreen( - window, SplitViewController::RIGHT); + SplitViewController::RIGHT); } gfx::Rect GetSplitViewDividerBounds(bool is_dragging) { @@ -3645,7 +3647,7 @@ EXPECT_EQ(SplitViewController::State::kNoSnap, split_view_controller()->state()); EXPECT_TRUE(split_view_controller()->left_window() == nullptr); - EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds()); + EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds()); // Verify that when dragged to the right, the window grid is located where the // left window of split view mode should be. @@ -3654,7 +3656,7 @@ EXPECT_EQ(SplitViewController::State::kNoSnap, split_view_controller()->state()); EXPECT_TRUE(split_view_controller()->right_window() == nullptr); - EXPECT_EQ(GetSplitViewLeftWindowBounds(window1.get()), GetGridBounds()); + EXPECT_EQ(GetSplitViewLeftWindowBounds(), GetGridBounds()); // Verify that when dragged to the center, the window grid is has the // dimensions of the work area. @@ -3679,11 +3681,11 @@ // Verify that when there is a snapped window, the window grid bounds remain // constant despite overview items being dragged left and right. overview_session()->Drag(overview_item, left); - EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds()); + EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds()); overview_session()->Drag(overview_item, right); - EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds()); + EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds()); overview_session()->Drag(overview_item, center); - EXPECT_EQ(GetSplitViewRightWindowBounds(window1.get()), GetGridBounds()); + EXPECT_EQ(GetSplitViewRightWindowBounds(), GetGridBounds()); } // Tests dragging a unsnappable window. @@ -4590,7 +4592,7 @@ EXPECT_TRUE(overview_controller()->InOverviewSession()); EXPECT_EQ(GetGridBounds(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); split_view_controller()->SwapWindows(); EXPECT_EQ(split_view_controller()->state(), @@ -4599,7 +4601,7 @@ SplitViewController::RIGHT); EXPECT_EQ(GetGridBounds(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::LEFT)); + SplitViewController::LEFT)); } // Verify the behavior when trying to exit overview with one snapped window @@ -4844,7 +4846,7 @@ EXPECT_TRUE(overview_controller()->InOverviewSession()); EXPECT_TRUE(split_view_controller()->InSplitViewMode()); EXPECT_NE(GetGridBounds(), overview_bounds); - EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds(window1.get())); + EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds()); window1.reset(); EXPECT_TRUE(overview_controller()->InOverviewSession()); EXPECT_FALSE(split_view_controller()->InSplitViewMode()); @@ -4899,7 +4901,7 @@ OverviewItem* overview_item1 = GetOverviewItemForWindow(window1.get()); DragWindowTo(overview_item1, gfx::PointF(0, 0)); EXPECT_NE(GetGridBounds(), overview_full_bounds); - EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds(window1.get())); + EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds()); const gfx::Rect overview_snapped_bounds = GetGridBounds(); // Resize that happens on the right edge of the left snapped window will @@ -4911,7 +4913,7 @@ EXPECT_TRUE(split_view_controller()->InSplitViewMode()); EXPECT_NE(GetGridBounds(), overview_full_bounds); EXPECT_NE(GetGridBounds(), overview_snapped_bounds); - EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds(window1.get())); + EXPECT_EQ(GetGridBounds(), GetSplitViewRightWindowBounds()); // Resize that happens on the left edge of the left snapped window will end // overview. The same for the resize that happens on the top or bottom edge of
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc index f4fb7fa7..84614d5 100644 --- a/ash/wm/splitview/split_view_controller.cc +++ b/ash/wm/splitview/split_view_controller.cc
@@ -13,6 +13,7 @@ #include "ash/public/cpp/presentation_time_recorder.h" #include "ash/public/cpp/window_properties.h" #include "ash/root_window_controller.h" +#include "ash/root_window_settings.h" #include "ash/scoped_animation_disabler.h" #include "ash/screen_util.h" #include "ash/session/session_controller_impl.h" @@ -279,7 +280,8 @@ return Shell::GetPrimaryRootWindowController()->split_view_controller(); } -SplitViewController::SplitViewController() { +SplitViewController::SplitViewController(aura::Window* root_window) + : root_window_(root_window) { Shell::Get()->accessibility_controller()->AddObserver(this); display::Screen::GetScreen()->AddObserver(this); Shell::Get()->tablet_mode_controller()->AddObserver(this); @@ -319,6 +321,7 @@ DCHECK(window && CanSnapInSplitview(window)); DCHECK_NE(snap_position, NONE); DCHECK(!is_resizing_); + DCHECK_EQ(root_window_, window->GetRootWindow()); // This check detects the case that you try to snap a window while watching // the divider snap animation. It also detects the case that you click a @@ -339,15 +342,14 @@ // If there is pre-set |divider_position_|, use it. It can happen during // tablet <-> clamshell transition or multi-user transition. - divider_position_ = (divider_position_ < 0) - ? GetDefaultDividerPosition(window) - : divider_position_; + divider_position_ = (divider_position_ < 0) ? GetDefaultDividerPosition() + : divider_position_; default_snap_position_ = snap_position; // There is no divider bar in clamshell splitview mode. if (split_view_type_ == SplitViewType::kTabletType) { split_view_divider_ = - std::make_unique<SplitViewDivider>(this, window->GetRootWindow()); + std::make_unique<SplitViewDivider>(this, root_window_); // The divider spawn animation adds a finishing touch to the |window| // animation that generally accommodates snapping by dragging, but if // |window| is currently minimized then it will undergo the unminimizing @@ -442,8 +444,7 @@ if (do_divider_spawn_animation) { DCHECK(window->layer()->GetAnimator()->GetTargetTransform().IsIdentity()); - const gfx::Rect bounds = - GetSnappedWindowBoundsInScreen(window, snap_position); + const gfx::Rect bounds = GetSnappedWindowBoundsInScreen(snap_position); // Get one of the two corners of |window| that meet the divider. gfx::Point p = IsPhysicalLeftOrTop(snap_position) ? bounds.bottom_right() : bounds.origin(); @@ -505,24 +506,22 @@ } gfx::Rect SplitViewController::GetSnappedWindowBoundsInParent( - aura::Window* window, SnapPosition snap_position) { - gfx::Rect bounds = GetSnappedWindowBoundsInScreen(window, snap_position); - ::wm::ConvertRectFromScreen(window->GetRootWindow(), &bounds); + gfx::Rect bounds = GetSnappedWindowBoundsInScreen(snap_position); + ::wm::ConvertRectFromScreen(root_window_, &bounds); return bounds; } gfx::Rect SplitViewController::GetSnappedWindowBoundsInScreen( - aura::Window* window, SnapPosition snap_position) { const gfx::Rect work_area_bounds_in_screen = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - window); + root_window_); if (snap_position == NONE) return work_area_bounds_in_screen; gfx::Rect left_or_top_rect, right_or_bottom_rect; - GetSnappedWindowBoundsInScreenInternal(window, &left_or_top_rect, + GetSnappedWindowBoundsInScreenInternal(&left_or_top_rect, &right_or_bottom_rect); // Adjust the bounds for |left_or_top_rect| and |right_or_bottom_rect| if the @@ -534,26 +533,25 @@ } gfx::Rect SplitViewController::GetSnappedWindowBoundsInScreenUnadjusted( - aura::Window* window, SnapPosition snap_position) { const gfx::Rect work_area_bounds_in_screen = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - window); + root_window_); if (snap_position == NONE) return work_area_bounds_in_screen; gfx::Rect left_or_top_rect, right_or_bottom_rect; - GetSnappedWindowBoundsInScreenInternal(window, &left_or_top_rect, + GetSnappedWindowBoundsInScreenInternal(&left_or_top_rect, &right_or_bottom_rect); return IsPhysicalLeftOrTop(snap_position) ? left_or_top_rect : right_or_bottom_rect; } -int SplitViewController::GetDefaultDividerPosition(aura::Window* window) const { +int SplitViewController::GetDefaultDividerPosition() const { const gfx::Rect work_area_bounds_in_screen = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - window); + root_window_); int default_divider_position = (IsCurrentScreenOrientationLandscape() ? work_area_bounds_in_screen.width() : work_area_bounds_in_screen.height()) / @@ -623,7 +621,7 @@ presentation_time_recorder_->RequestNext(); const gfx::Rect work_area_bounds = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - GetDefaultSnappedWindow()); + root_window_); gfx::Point modified_location_in_screen = GetBoundedPosition(location_in_screen, work_area_bounds); @@ -654,7 +652,7 @@ const gfx::Rect work_area_bounds = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - GetDefaultSnappedWindow()); + root_window_); gfx::Point modified_location_in_screen = GetBoundedPosition(location_in_screen, work_area_bounds); UpdateDividerPosition(modified_location_in_screen); @@ -790,6 +788,8 @@ const gfx::Rect& old_bounds, const gfx::Rect& new_bounds, ui::PropertyChangeReason reason) { + DCHECK_EQ(root_window_, window->GetRootWindow()); + if (split_view_type_ != SplitViewType::kClamshellType || reason == ui::PropertyChangeReason::FROM_ANIMATION || !InSplitViewMode()) { @@ -808,7 +808,7 @@ const gfx::Rect work_area = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - window); + root_window_); if (IsCurrentScreenOrientationLandscape()) { divider_position_ = window == GetPhysicalLeftOrTopWindow() ? new_bounds.width() @@ -883,6 +883,10 @@ void SplitViewController::OnPostWindowStateTypeChange( ash::WindowState* window_state, ash::WindowStateType old_type) { + DCHECK_EQ( + window_state->GetDisplay().id(), + display::Screen::GetScreen()->GetDisplayNearestWindow(root_window_).id()); + if (window_state->IsSnapped()) { OnWindowSnapped(window_state->window()); } else if (window_state->IsFullscreen() || window_state->IsMaximized()) { @@ -911,6 +915,9 @@ void SplitViewController::OnWindowActivated(ActivationReason reason, aura::Window* gained_active, aura::Window* lost_active) { + if (!gained_active || gained_active->GetRootWindow() != root_window_) + return; + if (features::IsVirtualDesksEnabled() && DesksController::Get()->AreDesksBeingModified()) { // Activating a desk from its mini view will activate its most-recently used @@ -929,7 +936,7 @@ // Only windows that are in the MRU list and are not already in split view can // be auto-snapped. - if (!gained_active || IsWindowInSplitView(gained_active) || + if (IsWindowInSplitView(gained_active) || !base::Contains( Shell::Get()->mru_window_tracker()->BuildMruWindowList(kActiveDesk), gained_active)) { @@ -1016,12 +1023,11 @@ EndSplitView(); return; } - aura::Window* root_window = GetDefaultSnappedWindow()->GetRootWindow(); // If overview is ended because of a window getting snapped, suppress the // overview exiting animation. if (state_ == State::kBothSnapped) - overview_session->SetWindowListNotAnimatedWhenExiting(root_window); + overview_session->SetWindowListNotAnimatedWhenExiting(root_window_); // If clamshell split view mode is active, end it and bail out. if (split_view_type_ == SplitViewType::kClamshellType) { @@ -1034,7 +1040,7 @@ if (state_ == State::kBothSnapped) return; OverviewGrid* current_grid = - overview_session->GetGridWithRootWindow(root_window); + overview_session->GetGridWithRootWindow(root_window_); if (!current_grid || current_grid->empty()) return; for (const auto& overview_item : current_grid->window_list()) { @@ -1048,7 +1054,7 @@ SnapWindow(window, (default_snap_position_ == LEFT) ? RIGHT : LEFT); // If ending overview causes a window to snap, also do not do exiting // overview animation. - overview_session->SetWindowListNotAnimatedWhenExiting(root_window); + overview_session->SetWindowListNotAnimatedWhenExiting(root_window_); return; } } @@ -1066,7 +1072,10 @@ void SplitViewController::OnDisplayMetricsChanged( const display::Display& display, uint32_t metrics) { - if (!display.IsInternal()) + // Avoid |ScreenAsh::GetDisplayNearestWindow|, which has a |DCHECK| that fails + // if the display is being deleted. Use |GetRootWindowSettings| directly, and + // if the display is being deleted, we will get |display::kInvalidDisplayId|. + if (GetRootWindowSettings(root_window_)->display_id != display.id()) return; // We need to update |is_previous_screen_orientation_primary_| even if split @@ -1078,12 +1087,6 @@ if (!InSplitViewMode()) return; - display::Display current_display = - display::Screen::GetScreen()->GetDisplayNearestWindow( - GetDefaultSnappedWindow()); - if (display.id() != current_display.id()) - return; - // If one of the snapped windows becomes unsnappable, end the split view mode // directly. if ((left_window_ && !CanSnapInSplitview(left_window_)) || @@ -1143,8 +1146,8 @@ // the three fixed positions. if (InSplitViewMode()) { divider_position_ = GetClosestFixedDividerPosition(); - split_view_divider_ = std::make_unique<SplitViewDivider>( - this, GetDefaultSnappedWindow()->GetRootWindow()); + split_view_divider_ = + std::make_unique<SplitViewDivider>(this, root_window_); UpdateSnappedWindowsAndDividerBounds(); NotifyDividerPositionChanged(); } @@ -1260,10 +1263,8 @@ // Create an invisible black scrim layer. black_scrim_layer_ = std::make_unique<ui::Layer>(ui::LAYER_SOLID_COLOR); black_scrim_layer_->SetColor(SK_ColorBLACK); - GetDefaultSnappedWindow()->GetRootWindow()->layer()->Add( - black_scrim_layer_.get()); - GetDefaultSnappedWindow()->GetRootWindow()->layer()->StackAtTop( - black_scrim_layer_.get()); + root_window_->layer()->Add(black_scrim_layer_.get()); + root_window_->layer()->StackAtTop(black_scrim_layer_.get()); } // Decide where the black scrim should show and update its bounds. @@ -1272,8 +1273,7 @@ black_scrim_layer_.reset(); return; } - black_scrim_layer_->SetBounds( - GetSnappedWindowBoundsInScreen(GetDefaultSnappedWindow(), position)); + black_scrim_layer_->SetBounds(GetSnappedWindowBoundsInScreen(position)); // Update its opacity. The opacity increases as it gets closer to the edge of // the screen. @@ -1282,7 +1282,7 @@ : location_in_screen.y(); gfx::Rect work_area_bounds = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - GetDefaultSnappedWindow()); + root_window_); if (!IsCurrentScreenOrientationLandscape()) work_area_bounds.Transpose(); float opacity = kBlackScrimOpacity; @@ -1320,7 +1320,7 @@ const gfx::Point& location_in_screen) { const gfx::Rect work_area_bounds = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - GetDefaultSnappedWindow()); + root_window_); if (!work_area_bounds.Contains(location_in_screen)) return NONE; @@ -1379,17 +1379,15 @@ } void SplitViewController::GetSnappedWindowBoundsInScreenInternal( - aura::Window* window, gfx::Rect* left_or_top_rect, gfx::Rect* right_or_bottom_rect) { const gfx::Rect work_area_bounds_in_screen = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - window); + root_window_); // |divide_position_| might not be properly initialized yet. - int divider_position = (divider_position_ < 0) - ? GetDefaultDividerPosition(window) - : divider_position_; + int divider_position = + (divider_position_ < 0) ? GetDefaultDividerPosition() : divider_position_; gfx::Rect divider_bounds; if (split_view_type_ == SplitViewType::kTabletType) { divider_bounds = SplitViewDivider::GetDividerBoundsInScreen( @@ -1508,7 +1506,7 @@ int SplitViewController::GetDividerEndPosition() { const gfx::Rect work_area_bounds = screen_util::GetDisplayWorkAreaBoundsInScreenForActiveDeskContainer( - GetDefaultSnappedWindow()); + root_window_); return IsCurrentScreenOrientationLandscape() ? work_area_bounds.width() : work_area_bounds.height(); } @@ -1655,8 +1653,8 @@ return end_location; const gfx::Rect bounds = (window == left_window_) - ? GetSnappedWindowBoundsInScreen(window, LEFT) - : GetSnappedWindowBoundsInScreen(window, RIGHT); + ? GetSnappedWindowBoundsInScreen(LEFT) + : GetSnappedWindowBoundsInScreen(RIGHT); switch (GetCurrentScreenOrientation()) { case OrientationLockType::kLandscapePrimary: end_location.set_x(window == left_window_ ? bounds.right() : bounds.x()); @@ -1691,8 +1689,8 @@ if (!window->layer()->GetTargetTransform().IsIdentity()) { // Calculate the starting transform based on the window's expected snapped // bounds and its transformed bounds before to be snapped. - const gfx::Rect snapped_bounds = GetSnappedWindowBoundsInScreen( - window, (window == left_window_) ? LEFT : RIGHT); + const gfx::Rect snapped_bounds = + GetSnappedWindowBoundsInScreen((window == left_window_) ? LEFT : RIGHT); const gfx::Transform starting_transform = gfx::TransformBetweenRects( gfx::RectF(snapped_bounds), gfx::RectF(item_bounds)); SetTransformWithAnimation(window, starting_transform, gfx::Transform()); @@ -1723,8 +1721,8 @@ IsCurrentScreenOrientationPrimary() ? right_window_ : left_window_; gfx::Rect left_or_top_rect, right_or_bottom_rect; - GetSnappedWindowBoundsInScreenInternal( - GetDefaultSnappedWindow(), &left_or_top_rect, &right_or_bottom_rect); + GetSnappedWindowBoundsInScreenInternal(&left_or_top_rect, + &right_or_bottom_rect); gfx::Transform left_or_top_transform; if (left_or_top_window) { @@ -1801,12 +1799,14 @@ void SplitViewController::RemoveWindowFromOverviewIfApplicable( aura::Window* window) { + DCHECK_EQ(root_window_, window->GetRootWindow()); + if (!Shell::Get()->overview_controller()->InOverviewSession()) return; OverviewSession* overview_session = GetOverviewSession(); OverviewGrid* current_grid = - overview_session->GetGridWithRootWindow(window->GetRootWindow()); + overview_session->GetGridWithRootWindow(root_window_); if (!current_grid) return; @@ -1873,6 +1873,8 @@ if (GetOverviewSession() && GetOverviewSession()->IsWindowInOverview(window)) return; + DCHECK_EQ(root_window_, window->GetRootWindow()); + const bool was_splitview_active = InSplitViewMode(); if (desired_snap_position == SplitViewController::NONE) { if (was_splitview_active) { @@ -1881,7 +1883,7 @@ // Calculate the expected snap position based on the last event // location. Note if there is already a window at |desired_snap_postion|, // SnapWindow() will put the previous snapped window in overview. - SnapWindow(window, GetSnapPosition(window, last_location_in_screen)); + SnapWindow(window, GetSnapPosition(last_location_in_screen)); wm::ActivateWindow(window); } else { // Restore the dragged window's transform first if it's not identity. It @@ -1893,8 +1895,7 @@ OverviewSession* overview_session = GetOverviewSession(); if (overview_session) { - overview_session->SetWindowListNotAnimatedWhenExiting( - window->GetRootWindow()); + overview_session->SetWindowListNotAnimatedWhenExiting(root_window_); // Set the overview exit type to kImmediateExit to avoid update bounds // animation of the windows in overview grid. overview_session->set_enter_exit_overview_type( @@ -1938,11 +1939,9 @@ } SplitViewController::SnapPosition SplitViewController::GetSnapPosition( - aura::Window* window, const gfx::Point& last_location_in_screen) { - const int divider_position = InSplitViewMode() - ? this->divider_position() - : GetDefaultDividerPosition(window); + const int divider_position = InSplitViewMode() ? this->divider_position() + : GetDefaultDividerPosition(); const int position = IsCurrentScreenOrientationLandscape() ? last_location_in_screen.x() : last_location_in_screen.y();
diff --git a/ash/wm/splitview/split_view_controller.h b/ash/wm/splitview/split_view_controller.h index fe6de29..dfc5046 100644 --- a/ash/wm/splitview/split_view_controller.h +++ b/ash/wm/splitview/split_view_controller.h
@@ -101,7 +101,7 @@ // shall be ForWindow, similar to |RootWindowController::ForWindow|. static SplitViewController* Get(); - SplitViewController(); + explicit SplitViewController(aura::Window* root_window); ~SplitViewController() override; // Returns true if split view mode is active. Please see SplitViewType above @@ -137,20 +137,15 @@ // are adjusted to its minimum size if the desired bounds are smaller than // its minumum bounds. Note: the snapped window bounds can't be pushed // outside of the workspace area. - // TODO(xdai): Investigate if we need to pass in |window| as splitview windows - // should always be parented to the primary root window. - gfx::Rect GetSnappedWindowBoundsInParent(aura::Window* window, - SnapPosition snap_position); - gfx::Rect GetSnappedWindowBoundsInScreen(aura::Window* window, - SnapPosition snap_position); + gfx::Rect GetSnappedWindowBoundsInParent(SnapPosition snap_position); + gfx::Rect GetSnappedWindowBoundsInScreen(SnapPosition snap_position); // Gets the desired snapped window bounds accoridng to the snap state // |snap_state| and the divider pistion |divider_position_|. - gfx::Rect GetSnappedWindowBoundsInScreenUnadjusted(aura::Window* window, - SnapPosition snap_postion); + gfx::Rect GetSnappedWindowBoundsInScreenUnadjusted(SnapPosition snap_postion); // Gets the default value of |divider_position_|. - int GetDefaultDividerPosition(aura::Window* window) const; + int GetDefaultDividerPosition() const; // Returns true during the divider snap animation. bool IsDividerAnimating() const; @@ -225,6 +220,7 @@ void OnAccessibilityStatusChanged() override; void OnAccessibilityControllerShutdown() override; + aura::Window* root_window() const { return root_window_; } aura::Window* left_window() { return left_window_; } aura::Window* right_window() { return right_window_; } int divider_position() const { return divider_position_; } @@ -276,8 +272,7 @@ // Get the window bounds for left_or_top and right_or_bottom snapped windows. // Note the bounds returned by this function doesn't take the snapped windows // minimum sizes into account. - void GetSnappedWindowBoundsInScreenInternal(aura::Window* window, - gfx::Rect* left_or_top_rect, + void GetSnappedWindowBoundsInScreenInternal(gfx::Rect* left_or_top_rect, gfx::Rect* right_or_bottom_rect); // Splits the |work_area_rect| by |divider_rect| and outputs the two halves. @@ -403,13 +398,16 @@ SnapPosition desired_snap_position, const gfx::Point& last_location_in_screen); - // Gets the snap position of |window| according to last mouse/gesture event - // location on |window|. Used when |desired_snap_position_| was NONE but - // SplitViewController needs to snap the |window| after dragging. + // Gets the snap position for a dragged window, according to the last + // mouse/gesture event location. Called by |EndWindowDragImpl| when + // desired_snap_position is |NONE| but because split view is already active, + // the dragged window needs to be snapped anyway. SplitViewController::SnapPosition GetSnapPosition( - aura::Window* window, const gfx::Point& last_location_in_screen); + // Root window the split view is in. + aura::Window* root_window_; + // The current left/right snapped window. aura::Window* left_window_ = nullptr; aura::Window* right_window_ = nullptr;
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc index e39cbcc..d95002df 100644 --- a/ash/wm/splitview/split_view_controller_unittest.cc +++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -294,7 +294,7 @@ EXPECT_EQ(split_view_controller()->InSplitViewMode(), true); EXPECT_EQ(window1->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::LEFT)); + SplitViewController::LEFT)); split_view_controller()->SnapWindow(window2.get(), SplitViewController::RIGHT); @@ -305,7 +305,7 @@ EXPECT_EQ(split_view_controller()->InSplitViewMode(), true); EXPECT_EQ(window2->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window2.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); EndSplitView(); EXPECT_EQ(split_view_controller()->state(), @@ -1552,7 +1552,7 @@ gfx::Rect snapped_window_bounds = split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::LEFT); + SplitViewController::LEFT); // The snapped window bounds can't be pushed outside of the display area. EXPECT_EQ(snapped_window_bounds.x(), display_bounds.x()); EXPECT_EQ(snapped_window_bounds.width(), @@ -1589,7 +1589,7 @@ snapped_window_bounds = split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::LEFT); + SplitViewController::LEFT); EXPECT_EQ(snapped_window_bounds.y(), display_bounds.y()); EXPECT_EQ(snapped_window_bounds.height(), window1->delegate()->GetMinimumSize().height()); @@ -1621,7 +1621,7 @@ snapped_window_bounds = split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::RIGHT); + SplitViewController::RIGHT); EXPECT_EQ(snapped_window_bounds.x(), display_bounds.x()); EXPECT_EQ(snapped_window_bounds.width(), window1->delegate()->GetMinimumSize().width()); @@ -1653,7 +1653,7 @@ snapped_window_bounds = split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::RIGHT); + SplitViewController::RIGHT); EXPECT_EQ(snapped_window_bounds.y(), display_bounds.y()); EXPECT_EQ(snapped_window_bounds.height(), window1->delegate()->GetMinimumSize().height()); @@ -2145,7 +2145,7 @@ // Now try to manually move the bubble out of the snapped window. bubble_window->SetBoundsInScreen( split_view_controller()->GetSnappedWindowBoundsInScreen( - window, SplitViewController::RIGHT), + SplitViewController::RIGHT), display::Screen::GetScreen()->GetDisplayNearestWindow(window)); // Test that the bubble can't be moved outside of its anchor widget. EXPECT_TRUE(window_bounds.Contains(bubble_window->GetBoundsInScreen())); @@ -2910,7 +2910,7 @@ // bounds as it's to be snapped to LEFT. EXPECT_EQ(window2->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window2.get(), SplitViewController::LEFT)); + SplitViewController::LEFT)); EXPECT_FALSE(window1->GetProperty(kCanAttachToAnotherWindowKey)); DragWindowTo(resizer.get(), gfx::Point(0, 300)); EXPECT_EQ(GetIndicatorState(resizer.get()), IndicatorState::kPreviewAreaLeft); @@ -2918,7 +2918,7 @@ // bounds as it's to be snapped to RIGHT. EXPECT_EQ(window2->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window2.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); EXPECT_FALSE(window1->GetProperty(kCanAttachToAnotherWindowKey)); CompleteDrag(std::move(resizer)); @@ -2966,7 +2966,7 @@ EXPECT_NE(window2->GetBoundsInScreen(), work_area_bounds); EXPECT_NE(window2->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window2.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); CompleteDrag(std::move(resizer)); EXPECT_FALSE(split_view_controller()->InSplitViewMode()); } @@ -3099,7 +3099,7 @@ EXPECT_EQ(GetIndicatorState(resizer.get()), IndicatorState::kNone); EXPECT_EQ(window2->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window2.get(), SplitViewController::LEFT)); + SplitViewController::LEFT)); // Not in overview. CheckOverviewEnterExitHistogram("DoNotEnterInSplitViewByDrag", {0, 0}, {0, 3}); @@ -3116,7 +3116,7 @@ // The source window's bounds should remain the same. EXPECT_EQ(window2->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window2.get(), SplitViewController::LEFT)); + SplitViewController::LEFT)); CompleteDrag(std::move(resizer)); EXPECT_EQ(split_view_controller()->state(), SplitViewController::State::kBothSnapped); @@ -3255,7 +3255,7 @@ // The source window still remains the same bounds. EXPECT_EQ(window1->GetBoundsInScreen(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::LEFT)); + SplitViewController::LEFT)); CheckOverviewEnterExitHistogram("DoNotExitInSplitView4", {0, 2}, {1, 0}); // 2.a. The dragged window can replace the only snapped window in the split @@ -3500,7 +3500,7 @@ gfx::Point(0, work_area_bounds.CenterPoint().y())); EXPECT_EQ(current_grid->bounds(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); EXPECT_EQ(0.f, target_opacity(drop_target_widget)); // Drag it to middle. @@ -3513,7 +3513,7 @@ work_area_bounds.CenterPoint().y())); EXPECT_EQ(current_grid->bounds(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::LEFT)); + SplitViewController::LEFT)); EXPECT_EQ(0.f, target_opacity(drop_target_widget)); CompleteDrag(std::move(resizer)); @@ -3545,7 +3545,7 @@ EXPECT_NE(drop_target_widget->GetNativeWindow()->bounds(), window1->bounds()); EXPECT_EQ(current_grid->bounds(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); // Drag |window1| to the right preview split area. DragWindowTo(resizer.get(), gfx::Point(work_area_bounds.right(), @@ -3553,7 +3553,7 @@ // Overview bounds stays the same. EXPECT_EQ(current_grid->bounds(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); EXPECT_EQ(0.f, target_opacity(drop_target_widget)); // Drag |window1| to the left preview split area. @@ -3561,7 +3561,7 @@ gfx::Point(0, work_area_bounds.CenterPoint().y())); EXPECT_EQ(current_grid->bounds(), split_view_controller()->GetSnappedWindowBoundsInScreen( - window1.get(), SplitViewController::RIGHT)); + SplitViewController::RIGHT)); EXPECT_EQ(0.f, target_opacity(drop_target_widget)); CompleteDrag(std::move(resizer)); @@ -4575,11 +4575,10 @@ // Shelf should be shown after drag and snapped window should be covered by // the auto-hide-shown shelf. EXPECT_EQ(SHELF_AUTO_HIDE_SHOWN, shelf->GetAutoHideState()); - EXPECT_EQ( - split_view_controller() - ->GetSnappedWindowBoundsInScreen(window(), SplitViewController::LEFT) - .height(), - display_bounds.height()); + EXPECT_EQ(split_view_controller() + ->GetSnappedWindowBoundsInScreen(SplitViewController::LEFT) + .height(), + display_bounds.height()); } // Tests the functionalities that fling the window when preview area is shown.
diff --git a/ash/wm/splitview/split_view_drag_indicators.cc b/ash/wm/splitview/split_view_drag_indicators.cc index 2c321fc..97e1e9f 100644 --- a/ash/wm/splitview/split_view_drag_indicators.cc +++ b/ash/wm/splitview/split_view_drag_indicators.cc
@@ -378,7 +378,6 @@ // Get the preview area bounds from the split view controller. preview_area_bounds = SplitViewController::Get()->GetSnappedWindowBoundsInScreen( - GetWidget()->GetNativeWindow(), preview_state == IndicatorState::kPreviewAreaLeft ? SplitViewController::LEFT : SplitViewController::RIGHT);
diff --git a/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc b/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc index ec42662..2baa145 100644 --- a/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc +++ b/ash/wm/tablet_mode/tablet_mode_browser_window_drag_delegate.cc
@@ -311,9 +311,9 @@ } else { // Put the source window on the other side of the split screen. expected_bounds = split_view_controller_->GetSnappedWindowBoundsInScreen( - source_window, snap_position == SplitViewController::LEFT - ? SplitViewController::RIGHT - : SplitViewController::LEFT); + snap_position == SplitViewController::LEFT + ? SplitViewController::RIGHT + : SplitViewController::LEFT); } } ::wm::ConvertRectFromScreen(source_window->parent(), &expected_bounds);
diff --git a/ash/wm/tablet_mode/tablet_mode_window_manager.cc b/ash/wm/tablet_mode/tablet_mode_window_manager.cc index bea2323..a345cd07 100644 --- a/ash/wm/tablet_mode/tablet_mode_window_manager.cc +++ b/ash/wm/tablet_mode/tablet_mode_window_manager.cc
@@ -132,8 +132,7 @@ return left_window ? work_area.height() - left_window_bounds.height() : right_window_bounds.height(); default: - return SplitViewController::Get()->GetDefaultDividerPosition( - left_window ? left_window : right_window); + return SplitViewController::Get()->GetDefaultDividerPosition(); } }
diff --git a/ash/wm/tablet_mode/tablet_mode_window_state.cc b/ash/wm/tablet_mode/tablet_mode_window_state.cc index 570ff101..0a74faa9 100644 --- a/ash/wm/tablet_mode/tablet_mode_window_state.cc +++ b/ash/wm/tablet_mode/tablet_mode_window_state.cc
@@ -86,12 +86,12 @@ if (state_object->GetStateType() == WindowStateType::kLeftSnapped) { return SplitViewController::Get()->GetSnappedWindowBoundsInParent( - state_object->window(), SplitViewController::LEFT); + SplitViewController::LEFT); } if (state_object->GetStateType() == WindowStateType::kRightSnapped) { return SplitViewController::Get()->GetSnappedWindowBoundsInParent( - state_object->window(), SplitViewController::RIGHT); + SplitViewController::RIGHT); } gfx::Rect bounds_in_parent;
diff --git a/ash/wm/workspace/backdrop_controller.cc b/ash/wm/workspace/backdrop_controller.cc index 83e3a75..f0a1b7c 100644 --- a/ash/wm/workspace/backdrop_controller.cc +++ b/ash/wm/workspace/backdrop_controller.cc
@@ -446,14 +446,12 @@ SplitViewController::State state = split_view_controller->state(); DCHECK(state == SplitViewController::State::kLeftSnapped || state == SplitViewController::State::kRightSnapped); - aura::Window* snapped_window = - split_view_controller->GetDefaultSnappedWindow(); SplitViewController::SnapPosition snap_position = (state == SplitViewController::State::kLeftSnapped) ? SplitViewController::LEFT : SplitViewController::RIGHT; return split_view_controller->GetSnappedWindowBoundsInScreenUnadjusted( - snapped_window, snap_position); + snap_position); } void BackdropController::Layout() {
diff --git a/base/files/file_path_watcher_unittest.cc b/base/files/file_path_watcher_unittest.cc index 35ee50294..91e116d 100644 --- a/base/files/file_path_watcher_unittest.cc +++ b/base/files/file_path_watcher_unittest.cc
@@ -399,7 +399,7 @@ std::unique_ptr<TestDelegate> delegate(new TestDelegate(collector())); ASSERT_TRUE(SetupWatch(file, &watcher, delegate.get(), false)); - ASSERT_TRUE(base::DeleteFile(dir, true)); + ASSERT_TRUE(base::DeleteFileRecursively(dir)); ASSERT_TRUE(WaitForEvents()); }
diff --git a/base/files/file_util.h b/base/files/file_util.h index 59fbf44..571f90f8 100644 --- a/base/files/file_util.h +++ b/base/files/file_util.h
@@ -63,13 +63,28 @@ // Returns true if successful, false otherwise. It is considered successful // to attempt to delete a file that does not exist. // -// In posix environment and if |path| is a symbolic link, this deletes only +// In POSIX environment and if |path| is a symbolic link, this deletes only // the symlink. (even if the symlink points to a non-existent file) // // WARNING: USING THIS WITH recursive==true IS EQUIVALENT // TO "rm -rf", SO USE WITH CAUTION. +// +// Note: The |recursive| parameter is in the process of being removed. Use +// DeleteFileRecursively() instead. See https://crbug.com/1009837 BASE_EXPORT bool DeleteFile(const FilePath& path, bool recursive); +// Deletes the given path, whether it's a file or a directory. +// If it's a directory, it's perfectly happy to delete all of the +// directory's contents, including subdirectories and their contents. +// Returns true if successful, false otherwise. It is considered successful +// to attempt to delete a file that does not exist. +// +// In POSIX environment and if |path| is a symbolic link, this deletes only +// the symlink. (even if the symlink points to a non-existent file) +// +// WARNING: USING THIS EQUIVALENT TO "rm -rf", SO USE WITH CAUTION. +BASE_EXPORT bool DeleteFileRecursively(const FilePath& path); + #if defined(OS_WIN) // Schedules to delete the given path, whether it's a file or a directory, until // the operating system is restarted.
diff --git a/base/files/file_util_posix.cc b/base/files/file_util_posix.cc index 72beeab..bedcc78 100644 --- a/base/files/file_util_posix.cc +++ b/base/files/file_util_posix.cc
@@ -320,37 +320,12 @@ return true; } -#endif // !defined(OS_NACL_NONSFI) - -#if !defined(OS_MACOSX) -// Appends |mode_char| to |mode| before the optional character set encoding; see -// https://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html for -// details. -std::string AppendModeCharacter(StringPiece mode, char mode_char) { - std::string result(mode.as_string()); - size_t comma_pos = result.find(','); - result.insert(comma_pos == std::string::npos ? result.length() : comma_pos, 1, - mode_char); - return result; -} -#endif - -} // namespace - -#if !defined(OS_NACL_NONSFI) -FilePath MakeAbsoluteFilePath(const FilePath& input) { - ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); - char full_path[PATH_MAX]; - if (realpath(input.value().c_str(), full_path) == nullptr) - return FilePath(); - return FilePath(full_path); -} // TODO(erikkay): The Windows version of this accepts paths like "foo/bar/*" // which works both with and without the recursive flag. I'm not sure we need // that functionality. If not, remove from file_util_win.cc, otherwise add it // here. -bool DeleteFile(const FilePath& path, bool recursive) { +bool DoDeleteFile(const FilePath& path, bool recursive) { ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); #if defined(OS_ANDROID) @@ -390,6 +365,39 @@ } return success; } +#endif // !defined(OS_NACL_NONSFI) + +#if !defined(OS_MACOSX) +// Appends |mode_char| to |mode| before the optional character set encoding; see +// https://www.gnu.org/software/libc/manual/html_node/Opening-Streams.html for +// details. +std::string AppendModeCharacter(StringPiece mode, char mode_char) { + std::string result(mode.as_string()); + size_t comma_pos = result.find(','); + result.insert(comma_pos == std::string::npos ? result.length() : comma_pos, 1, + mode_char); + return result; +} +#endif + +} // namespace + +#if !defined(OS_NACL_NONSFI) +FilePath MakeAbsoluteFilePath(const FilePath& input) { + ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); + char full_path[PATH_MAX]; + if (realpath(input.value().c_str(), full_path) == nullptr) + return FilePath(); + return FilePath(full_path); +} + +bool DeleteFile(const FilePath& path, bool recursive) { + return DoDeleteFile(path, recursive); +} + +bool DeleteFileRecursively(const FilePath& path) { + return DoDeleteFile(path, /*recursive=*/true); +} bool ReplaceFile(const FilePath& from_path, const FilePath& to_path, @@ -1173,7 +1181,7 @@ if (!CopyDirectory(from_path, to_path, true)) return false; - DeleteFile(from_path, true); + DeleteFileRecursively(from_path); return true; }
diff --git a/base/files/file_util_unittest.cc b/base/files/file_util_unittest.cc index fc6e5ed..d79ec1f 100644 --- a/base/files/file_util_unittest.cc +++ b/base/files/file_util_unittest.cc
@@ -1015,7 +1015,7 @@ EXPECT_EQ(1, c2.size()); // Delete the file. - EXPECT_TRUE(DeleteFile(subdir_path, true)); + EXPECT_TRUE(DeleteFileRecursively(subdir_path)); EXPECT_FALSE(PathExists(subdir_path)); } @@ -1395,7 +1395,7 @@ EXPECT_TRUE(DeleteFile(non_existent, false)); ASSERT_FALSE(PathExists(non_existent)); - EXPECT_TRUE(DeleteFile(non_existent, true)); + EXPECT_TRUE(DeleteFileRecursively(non_existent)); ASSERT_FALSE(PathExists(non_existent)); } @@ -1406,7 +1406,7 @@ EXPECT_TRUE(DeleteFile(non_existent, false)); ASSERT_FALSE(PathExists(non_existent)); - EXPECT_TRUE(DeleteFile(non_existent, true)); + EXPECT_TRUE(DeleteFileRecursively(non_existent)); ASSERT_FALSE(PathExists(non_existent)); } @@ -1426,7 +1426,7 @@ ASSERT_TRUE(PathExists(file_name)); // Make sure it's deleted - EXPECT_TRUE(DeleteFile(file_name, true)); + EXPECT_TRUE(DeleteFileRecursively(file_name)); EXPECT_FALSE(PathExists(file_name)); } @@ -1482,7 +1482,7 @@ EXPECT_TRUE(PathExists(subdir_path)); // Delete recursively and make sure all contents are deleted - EXPECT_TRUE(DeleteFile(directory_contents, true)); + EXPECT_TRUE(DeleteFileRecursively(directory_contents)); EXPECT_FALSE(PathExists(file_name)); EXPECT_FALSE(PathExists(subdir_path)); } @@ -1504,7 +1504,7 @@ EXPECT_TRUE(PathExists(subdir_path)); // Delete recursively and check nothing got deleted - EXPECT_TRUE(DeleteFile(directory_contents, true)); + EXPECT_TRUE(DeleteFileRecursively(directory_contents)); EXPECT_TRUE(PathExists(subdir_path)); } #endif @@ -1560,11 +1560,11 @@ ASSERT_TRUE(PathExists(subdir_path2)); // Delete recursively and check that the empty dir got deleted - EXPECT_TRUE(DeleteFile(subdir_path2, true)); + EXPECT_TRUE(DeleteFileRecursively(subdir_path2)); EXPECT_FALSE(PathExists(subdir_path2)); // Delete recursively and check that everything got deleted - EXPECT_TRUE(DeleteFile(test_subdir, true)); + EXPECT_TRUE(DeleteFileRecursively(test_subdir)); EXPECT_FALSE(PathExists(file_name)); EXPECT_FALSE(PathExists(subdir_path1)); EXPECT_FALSE(PathExists(test_subdir)); @@ -1609,7 +1609,7 @@ // Delete recursively and check that at least the second file got deleted. // This ensures that un-deletable files don't impact those that can be. - DeleteFile(test_subdir, true); + DeleteFileRecursively(test_subdir); EXPECT_FALSE(PathExists(file_name2)); #if defined(OS_LINUX) @@ -2750,7 +2750,7 @@ EXPECT_TRUE(PathExists(test_path)); EXPECT_FALSE(CreateDirectory(test_path)); - EXPECT_TRUE(DeleteFile(test_root, true)); + EXPECT_TRUE(DeleteFileRecursively(test_root)); EXPECT_FALSE(PathExists(test_root)); EXPECT_FALSE(PathExists(test_path)); @@ -2797,7 +2797,7 @@ EXPECT_FALSE(DirectoryExists(test_path)); EXPECT_TRUE(DeleteFile(test_path, false)); - EXPECT_TRUE(DeleteFile(test_root, true)); + EXPECT_TRUE(DeleteFileRecursively(test_root)); } TEST_F(FileUtilTest, FileEnumeratorTest) { @@ -2954,13 +2954,13 @@ // Create a fresh, empty copy of this directory. if (PathExists(data_dir)) { - ASSERT_TRUE(DeleteFile(data_dir, true)); + ASSERT_TRUE(DeleteFileRecursively(data_dir)); } ASSERT_TRUE(CreateDirectory(data_dir)); // Create a fresh, empty copy of this directory. if (PathExists(data_dir)) { - ASSERT_TRUE(DeleteFile(data_dir, true)); + ASSERT_TRUE(DeleteFileRecursively(data_dir)); } ASSERT_TRUE(CreateDirectory(data_dir)); FilePath foobar(data_dir.Append(FILE_PATH_LITERAL("foobar.txt"))); @@ -3470,7 +3470,7 @@ // Create a fresh, empty copy of this directory. if (PathExists(data_dir)) { - ASSERT_TRUE(DeleteFile(data_dir, true)); + ASSERT_TRUE(DeleteFileRecursively(data_dir)); } ASSERT_TRUE(CreateDirectory(data_dir));
diff --git a/base/files/file_util_win.cc b/base/files/file_util_win.cc index 94cff1e..4d47144 100644 --- a/base/files/file_util_win.cc +++ b/base/files/file_util_win.cc
@@ -348,18 +348,7 @@ : ReturnLastErrorOrSuccessOnNotFound(); } -} // namespace - -FilePath MakeAbsoluteFilePath(const FilePath& input) { - ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); - char16 file_path[MAX_PATH]; - if (!_wfullpath(as_writable_wcstr(file_path), as_wcstr(input.value()), - MAX_PATH)) - return FilePath(); - return FilePath(file_path); -} - -bool DeleteFile(const FilePath& path, bool recursive) { +bool DeleteFileAndRecordMetrics(const FilePath& path, bool recursive) { static constexpr char kRecursive[] = "DeleteFile.Recursive"; static constexpr char kNonRecursive[] = "DeleteFile.NonRecursive"; const StringPiece operation(recursive ? kRecursive : kNonRecursive); @@ -379,6 +368,25 @@ return false; } +} // namespace + +FilePath MakeAbsoluteFilePath(const FilePath& input) { + ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); + char16 file_path[MAX_PATH]; + if (!_wfullpath(as_writable_wcstr(file_path), as_wcstr(input.value()), + MAX_PATH)) + return FilePath(); + return FilePath(file_path); +} + +bool DeleteFile(const FilePath& path, bool recursive) { + return DeleteFileAndRecordMetrics(path, recursive); +} + +bool DeleteFileRecursively(const FilePath& path) { + return DeleteFileAndRecordMetrics(path, /*recursive=*/true); +} + bool DeleteFileAfterReboot(const FilePath& path) { ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); @@ -1025,7 +1033,7 @@ const FilePath& to_path) { ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); if (CopyDirectory(from_path, to_path, true)) { - if (DeleteFile(from_path, true)) + if (DeleteFileRecursively(from_path)) return true; // Like Move, this function is not transactional, so we just
diff --git a/base/files/scoped_temp_dir.cc b/base/files/scoped_temp_dir.cc index 01ec0f0..359b442 100644 --- a/base/files/scoped_temp_dir.cc +++ b/base/files/scoped_temp_dir.cc
@@ -29,7 +29,7 @@ // This "scoped_dir" prefix is only used on Windows and serves as a template // for the unique name. - if (!base::CreateNewTempDirectory(kScopedDirPrefix, &path_)) + if (!CreateNewTempDirectory(kScopedDirPrefix, &path_)) return false; return true; @@ -40,11 +40,11 @@ return false; // If |base_path| does not exist, create it. - if (!base::CreateDirectory(base_path)) + if (!CreateDirectory(base_path)) return false; // Create a new, uniquely named directory under |base_path|. - if (!base::CreateTemporaryDirInDir(base_path, kScopedDirPrefix, &path_)) + if (!CreateTemporaryDirInDir(base_path, kScopedDirPrefix, &path_)) return false; return true; @@ -54,7 +54,7 @@ if (!path_.empty()) return false; - if (!DirectoryExists(path) && !base::CreateDirectory(path)) + if (!DirectoryExists(path) && !CreateDirectory(path)) return false; path_ = path; @@ -65,7 +65,7 @@ if (path_.empty()) return false; - bool ret = base::DeleteFile(path_, true); + bool ret = DeleteFileRecursively(path_); if (ret) { // We only clear the path if deleted the directory. path_.clear();
diff --git a/base/files/scoped_temp_dir_unittest.cc b/base/files/scoped_temp_dir_unittest.cc index 024b438..122d138b 100644 --- a/base/files/scoped_temp_dir_unittest.cc +++ b/base/files/scoped_temp_dir_unittest.cc
@@ -14,8 +14,7 @@ TEST(ScopedTempDir, FullPath) { FilePath test_path; - base::CreateNewTempDirectory(FILE_PATH_LITERAL("scoped_temp_dir"), - &test_path); + CreateNewTempDirectory(FILE_PATH_LITERAL("scoped_temp_dir"), &test_path); // Against an existing dir, it should get destroyed when leaving scope. EXPECT_TRUE(DirectoryExists(test_path)); @@ -56,7 +55,7 @@ test_path = dir.GetPath(); EXPECT_TRUE(DirectoryExists(test_path)); FilePath tmp_dir; - EXPECT_TRUE(base::GetTempDir(&tmp_dir)); + EXPECT_TRUE(GetTempDir(&tmp_dir)); EXPECT_TRUE(test_path.value().find(tmp_dir.value()) != std::string::npos); } EXPECT_FALSE(DirectoryExists(test_path)); @@ -65,8 +64,8 @@ TEST(ScopedTempDir, UniqueTempDirUnderPath) { // Create a path which will contain a unique temp path. FilePath base_path; - ASSERT_TRUE(base::CreateNewTempDirectory(FILE_PATH_LITERAL("base_dir"), - &base_path)); + ASSERT_TRUE( + CreateNewTempDirectory(FILE_PATH_LITERAL("base_dir"), &base_path)); FilePath test_path; { @@ -78,7 +77,7 @@ EXPECT_TRUE(test_path.value().find(base_path.value()) != std::string::npos); } EXPECT_FALSE(DirectoryExists(test_path)); - base::DeleteFile(base_path, true); + DeleteFileRecursively(base_path); } TEST(ScopedTempDir, MultipleInvocations) { @@ -99,10 +98,10 @@ TEST(ScopedTempDir, LockedTempDir) { ScopedTempDir dir; EXPECT_TRUE(dir.CreateUniqueTempDir()); - base::File file(dir.GetPath().Append(FILE_PATH_LITERAL("temp")), - base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE); + File file(dir.GetPath().Append(FILE_PATH_LITERAL("temp")), + File::FLAG_CREATE_ALWAYS | File::FLAG_WRITE); EXPECT_TRUE(file.IsValid()); - EXPECT_EQ(base::File::FILE_OK, file.error_details()); + EXPECT_EQ(File::FILE_OK, file.error_details()); EXPECT_FALSE(dir.Delete()); // We should not be able to delete. EXPECT_FALSE(dir.GetPath().empty()); // We should still have a valid path. file.Close();
diff --git a/base/logging.cc b/base/logging.cc index 04aabb6..282b26f 100644 --- a/base/logging.cc +++ b/base/logging.cc
@@ -858,9 +858,13 @@ fx_logger_t* logger = fx_log_get_logger(); if (logger) { - // Temporarily pop the trailing newline, since fx_logger will add one. + // Temporarily remove the trailing newline from |str_newline|'s C-string + // representation, since fx_logger will add a newline of its own. str_newline.pop_back(); - fx_logger_log(logger, severity, nullptr, str_newline.c_str()); + std::string message = + base::StringPrintf("%s(%d) %s", file_basename_, line_, + str_newline.c_str() + message_start_); + fx_logger_log(logger, severity, nullptr, message.data()); str_newline.push_back('\n'); } #endif // OS_FUCHSIA @@ -962,6 +966,9 @@ if (last_slash_pos != base::StringPiece::npos) filename.remove_prefix(last_slash_pos + 1); + // Stores the base name as the null-terminated suffix substring of |filename|. + file_basename_ = filename.data(); + // TODO(darin): It might be nice if the columns were fixed width. stream_ << '[';
diff --git a/base/logging.h b/base/logging.h index cdb9d7c..0713dbd 100644 --- a/base/logging.h +++ b/base/logging.h
@@ -921,6 +921,7 @@ // The file and line information passed in to the constructor. const char* file_; const int line_; + const char* file_basename_; // This is useful since the LogMessage class uses a lot of Win32 calls // that will lose the value of GLE and the code that called the log function
diff --git a/base/test/generate_fontconfig_caches.cc b/base/test/generate_fontconfig_caches.cc index f0774f8c..365cb3b 100644 --- a/base/test/generate_fontconfig_caches.cc +++ b/base/test/generate_fontconfig_caches.cc
@@ -52,7 +52,7 @@ // Delete directory before generating fontconfig caches. This will notify // future fontconfig_caches changes. - CHECK(base::DeleteFile(fontconfig_caches, /*recursive=*/true)); + CHECK(base::DeleteFileRecursively(fontconfig_caches)); base::SetUpFontconfig(); FcInit();
diff --git a/base/test/launcher/test_launcher.cc b/base/test/launcher/test_launcher.cc index 3fc65dca..9691186 100644 --- a/base/test/launcher/test_launcher.cc +++ b/base/test/launcher/test_launcher.cc
@@ -435,7 +435,7 @@ ZX_CHECK(status == ZX_OK, status); // Cleanup the data directory. - CHECK(DeleteFile(nested_data_path, true)); + CHECK(DeleteFileRecursively(nested_data_path)); #elif defined(OS_POSIX) if (exit_code != 0) { // On POSIX, in case the test does not exit cleanly, either due to a crash @@ -643,7 +643,7 @@ FilePath temp_dir) { DCHECK(thread_checker_.CalledOnValidThread()); // delete previous temporary directory - if (!temp_dir.empty() && !DeleteFile(temp_dir, true)) { + if (!temp_dir.empty() && !DeleteFileRecursively(temp_dir)) { // This needs to be non-fatal at least for Windows. LOG(WARNING) << "Failed to delete " << temp_dir.AsUTF8Unsafe(); }
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index 76e55fe5..03d02988 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc
@@ -1158,7 +1158,8 @@ scoped_refptr<Layer> grand_child_; }; -SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSurfaceDamage); +// TODO(crbug.com/1014263): Disable because this test is flaky. +// SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSurfaceDamage); class LayerTreeHostTestLayerListSurfaceDamage : public LayerTreeHostTest { protected:
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index b44570f..b9949a7 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -713,7 +713,6 @@ "java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java", "java/src/org/chromium/chrome/browser/fullscreen/FullscreenOptions.java", "java/src/org/chromium/chrome/browser/fullscreen/TabGestureStateListener.java", - "java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java", "java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClient.java", "java/src/org/chromium/chrome/browser/gcore/ChromeGoogleApiClientImpl.java", "java/src/org/chromium/chrome/browser/gcore/ConnectedTask.java",
diff --git a/chrome/android/chrome_junit_test_java_sources.gni b/chrome/android/chrome_junit_test_java_sources.gni index f39631a..c7a276d0 100644 --- a/chrome/android/chrome_junit_test_java_sources.gni +++ b/chrome/android/chrome_junit_test_java_sources.gni
@@ -83,7 +83,6 @@ "junit/src/org/chromium/chrome/browser/firstrun/FirstRunIntegrationUnitTest.java", "junit/src/org/chromium/chrome/browser/firstrun/ToSAckedReceiverTest.java", "junit/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegateTest.java", - "junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java", "junit/src/org/chromium/chrome/browser/gcore/GoogleApiClientHelperTest.java", "junit/src/org/chromium/chrome/browser/history/HistoryDeletionBridgeTest.java", "junit/src/org/chromium/chrome/browser/image_fetcher/CachedImageFetcherTest.java",
diff --git a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java index 3e1e4988..96d7eaa 100644 --- a/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java +++ b/chrome/android/features/start_surface/internal/java/src/org/chromium/chrome/features/start_surface/StartSurfaceLocationBarDelegate.java
@@ -22,10 +22,7 @@ // Implements TasksSurface.FakeSearchBoxDelegate. @Override public void requestUrlFocus(@Nullable String pastedText) { - mLocationBar.setUrlBarFocus(true, pastedText, - pastedText == null - ? LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP - : LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS); + mLocationBar.setUrlBarFocus(true); } // Implements StartSurfaceMediator.Delegate.
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java index 8b570669..d52ebc6d4 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceMediator.java
@@ -5,15 +5,12 @@ package org.chromium.chrome.browser.tasks; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_CLICK_LISTENER; -import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_TEXT_WATCHER; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_TAB_CAROUSEL; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_VOICE_RECOGNITION_BUTTON_VISIBLE; import android.content.Context; import android.support.annotation.Nullable; -import android.text.Editable; -import android.text.TextWatcher; import android.view.View; import org.chromium.ui.modelutil.PropertyModel; @@ -39,28 +36,13 @@ mFakeSearchBoxDelegate.requestUrlFocus(null); } }); - mModel.set(FAKE_SEARCH_BOX_TEXT_WATCHER, new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) {} - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) {} - - @Override - public void afterTextChanged(Editable s) { - if (s.length() == 0) return; - mFakeSearchBoxDelegate.requestUrlFocus(s.toString()); - - // This won't cause infinite loop since we checked s.length() == 0 above. - s.clear(); - } - }); // Set the initial state. mModel.set(IS_FAKE_SEARCH_BOX_VISIBLE, true); mModel.set(IS_VOICE_RECOGNITION_BUTTON_VISIBLE, false); // TODO(crbug.com/982018): Enable voice recognition button in the fake search box. + // TODO(crbug.com/982018): Enable long press and paste search in the fake search box. // TODO(crbug.com/982018): Change the fake search box in dark mode. } }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java index fee0254..6cc4c9e 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksSurfaceProperties.java
@@ -6,7 +6,6 @@ import static org.chromium.chrome.browser.tasks.MostVisitedListProperties.IS_VISIBLE; -import android.text.TextWatcher; import android.view.View; import org.chromium.ui.modelutil.PropertyKey; @@ -29,14 +28,10 @@ .WritableObjectPropertyKey<View.OnClickListener> FAKE_SEARCH_BOX_CLICK_LISTENER = new PropertyModel.WritableObjectPropertyKey<View.OnClickListener>(); public static final PropertyModel - .WritableObjectPropertyKey<TextWatcher> FAKE_SEARCH_BOX_TEXT_WATCHER = - new PropertyModel.WritableObjectPropertyKey<TextWatcher>(); - public static final PropertyModel .WritableObjectPropertyKey<View.OnClickListener> MORE_TABS_CLICK_LISTENER = new PropertyModel.WritableObjectPropertyKey<View.OnClickListener>(); public static final PropertyModel.WritableBooleanPropertyKey MV_TILES_VISIBLE = IS_VISIBLE; - public static final PropertyKey[] ALL_KEYS = - new PropertyKey[] {IS_FAKE_SEARCH_BOX_VISIBLE, IS_INCOGNITO, IS_TAB_CAROUSEL, - IS_VOICE_RECOGNITION_BUTTON_VISIBLE, FAKE_SEARCH_BOX_CLICK_LISTENER, - FAKE_SEARCH_BOX_TEXT_WATCHER, MORE_TABS_CLICK_LISTENER, MV_TILES_VISIBLE}; + public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {IS_FAKE_SEARCH_BOX_VISIBLE, + IS_INCOGNITO, IS_TAB_CAROUSEL, IS_VOICE_RECOGNITION_BUTTON_VISIBLE, + FAKE_SEARCH_BOX_CLICK_LISTENER, MORE_TABS_CLICK_LISTENER, MV_TILES_VISIBLE}; }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java index a37e66e6..24a083d 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksView.java
@@ -7,7 +7,6 @@ import android.content.Context; import android.content.res.Resources; import android.support.v4.view.MarginLayoutParamsCompat; -import android.text.TextWatcher; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; @@ -77,14 +76,6 @@ } /** - * Set the given watcher for the fake search box. - * @param textWatcher The given {@link TextWatcher}. - */ - void setFakeSearchBoxTextWatcher(TextWatcher textWatcher) { - mSearchBoxText.addTextChangedListener(textWatcher); - } - - /** * Set the visibility of the fake search box. * @param isVisible Whether it's visible. */
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java index 2f63d7f..8c2becd 100644 --- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java +++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/TasksViewBinder.java
@@ -5,7 +5,6 @@ package org.chromium.chrome.browser.tasks; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_CLICK_LISTENER; -import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.FAKE_SEARCH_BOX_TEXT_WATCHER; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_FAKE_SEARCH_BOX_VISIBLE; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_INCOGNITO; import static org.chromium.chrome.browser.tasks.TasksSurfaceProperties.IS_TAB_CAROUSEL; @@ -23,8 +22,6 @@ public static void bind(PropertyModel model, TasksView view, PropertyKey propertyKey) { if (propertyKey == FAKE_SEARCH_BOX_CLICK_LISTENER) { view.setFakeSearchBoxClickListener(model.get(FAKE_SEARCH_BOX_CLICK_LISTENER)); - } else if (propertyKey == FAKE_SEARCH_BOX_TEXT_WATCHER) { - view.setFakeSearchBoxTextWatcher(model.get(FAKE_SEARCH_BOX_TEXT_WATCHER)); } else if (propertyKey == IS_FAKE_SEARCH_BOX_VISIBLE) { view.setFakeSearchBoxVisibility(model.get(IS_FAKE_SEARCH_BOX_VISIBLE)); } else if (propertyKey == IS_INCOGNITO) {
diff --git a/chrome/android/java/res/values/styles.xml b/chrome/android/java/res/values/styles.xml index d0e2ac6..156410a 100644 --- a/chrome/android/java/res/values/styles.xml +++ b/chrome/android/java/res/values/styles.xml
@@ -642,6 +642,7 @@ <item name="tabPaddingEnd">5dp</item> <item name="tabMode">fixed</item> <item name="tabGravity">fill</item> + <item name="tabMaxWidth">0dp</item> <item name="tabTextColor">@color/default_text_color_secondary</item> <item name="tabSelectedTextColor">@color/tab_layout_selected_tab_color</item> <item name="android:background">@color/modern_primary_color</item>
diff --git a/chrome/android/java/res_download/layout/download_home_tabs.xml b/chrome/android/java/res_download/layout/download_home_tabs.xml index 91e0ec9..f838599 100644 --- a/chrome/android/java/res_download/layout/download_home_tabs.xml +++ b/chrome/android/java/res_download/layout/download_home_tabs.xml
@@ -5,7 +5,6 @@ --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical">
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java index 94de4ec..2fbd4a5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java
@@ -181,6 +181,7 @@ import org.chromium.ui.display.DisplayAndroid; import org.chromium.ui.display.DisplayUtil; import org.chromium.ui.modaldialog.ModalDialogManager; +import org.chromium.ui.util.TokenHolder; import org.chromium.ui.widget.Toast; import org.chromium.webapk.lib.client.WebApkNavigationClient; import org.chromium.webapk.lib.client.WebApkValidator; @@ -1486,14 +1487,37 @@ this, mBottomSheet.findViewById(R.id.bottom_sheet_snackbar_container)); mBottomSheet.addObserver(new EmptyBottomSheetObserver() { + /** A token for suppressing app modal dialogs. */ + private int mAppModalToken = TokenHolder.INVALID_TOKEN; + /** A token for suppressing tab modal dialogs. */ + private int mTabModalToken = TokenHolder.INVALID_TOKEN; + @Override public void onSheetOpened(int reason) { addViewObscuringAllTabs(mBottomSheet); + + assert mAppModalToken == TokenHolder.INVALID_TOKEN; + assert mTabModalToken == TokenHolder.INVALID_TOKEN; + if (getModalDialogManager() != null) { + mAppModalToken = getModalDialogManager().suspendType( + ModalDialogManager.ModalDialogType.APP); + mTabModalToken = getModalDialogManager().suspendType( + ModalDialogManager.ModalDialogType.TAB); + } } @Override public void onSheetClosed(int reason) { removeViewObscuringAllTabs(mBottomSheet); + + if (getModalDialogManager() != null) { + getModalDialogManager().resumeType( + ModalDialogManager.ModalDialogType.APP, mAppModalToken); + getModalDialogManager().resumeType( + ModalDialogManager.ModalDialogType.TAB, mTabModalToken); + } + mAppModalToken = TokenHolder.INVALID_TOKEN; + mTabModalToken = TokenHolder.INVALID_TOKEN; } @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java index da03f96..c22630e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -106,7 +106,6 @@ import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.ntp.NewTabPageUma; import org.chromium.chrome.browser.omaha.OmahaBase; -import org.chromium.chrome.browser.omnibox.LocationBar; import org.chromium.chrome.browser.partnercustomizations.HomepageManager; import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; import org.chromium.chrome.browser.preferences.ChromePreferenceManager; @@ -1533,9 +1532,7 @@ assert false : "Unknown TabOpenType: " + tabOpenType; break; } - getToolbarManager().setUrlBarFocusOnceNativeInitialized(focus, - focus ? LocationBar.OmniboxFocusReason.LAUNCH_NEW_INCOGNITO_TAB - : LocationBar.OmniboxFocusReason.UNFOCUS); + getToolbarManager().setUrlBarFocusOnceNativeInitialized(focus); } @Override @@ -1831,8 +1828,7 @@ boolean isUrlBarVisible = !mOverviewModeController.overviewVisible() && (!isTablet() || getCurrentTabModel().getCount() != 0); if (isUrlBarVisible) { - getToolbarManager().setUrlBarFocus( - true, LocationBar.OmniboxFocusReason.MENU_OR_KEYBOARD_ACTION); + getToolbarManager().setUrlBarFocus(true); } } else if (id == R.id.downloads_menu_id) { DownloadUtils.showDownloadManager(this, currentTab, DownloadOpenSource.MENU);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java index 79da58a..44568dc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/layouts/LayoutManager.java
@@ -34,7 +34,6 @@ import org.chromium.chrome.browser.compositor.scene_layer.ToolbarSceneLayer; import org.chromium.chrome.browser.contextualsearch.ContextualSearchManagementDelegate; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; -import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.native_page.NativePageFactory; import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.tab.SadTab; @@ -59,6 +58,7 @@ import org.chromium.ui.base.SPenSupport; import org.chromium.ui.resources.ResourceManager; import org.chromium.ui.resources.dynamics.DynamicResourceLoader; +import org.chromium.ui.util.TokenHolder; import java.util.List; @@ -111,8 +111,8 @@ // Internal State private final SparseArray<LayoutTab> mTabCache = new SparseArray<>(); - private int mControlsShowingToken = FullscreenManager.INVALID_TOKEN; - private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN; + private int mControlsShowingToken = TokenHolder.INVALID_TOKEN; + private int mControlsHidingToken = TokenHolder.INVALID_TOKEN; private boolean mUpdateRequested; private final ContextualSearchPanel mContextualSearchPanel; private final EphemeralTabPanel mEphemeralTabPanel;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java index d70729d..0e2ef49 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulator.java
@@ -214,7 +214,7 @@ // Only add new values at the end, right before NUM_ENTRIES. @IntDef({LensSupportStatus.LENS_SUPPORTED, LensSupportStatus.NON_GOOGLE_SEARCH_ENGINE, LensSupportStatus.ACTIVITY_NOT_ACCESSIBLE, LensSupportStatus.OUT_OF_DATE, - LensSupportStatus.SEARCH_BY_IMAGE_UNAVAILABLE}) + LensSupportStatus.SEARCH_BY_IMAGE_UNAVAILABLE, LensSupportStatus.LEGACY_OS}) @Retention(RetentionPolicy.SOURCE) public @interface LensSupportStatus { int LENS_SUPPORTED = 0; @@ -222,7 +222,8 @@ int ACTIVITY_NOT_ACCESSIBLE = 2; int OUT_OF_DATE = 3; int SEARCH_BY_IMAGE_UNAVAILABLE = 4; - int NUM_ENTRIES = 5; + int LEGACY_OS = 5; + int NUM_ENTRIES = 6; } /** @@ -630,6 +631,11 @@ return false; } + if (LensUtils.isDeviceOsBelowMinimum()) { + ContextMenuUma.recordLensSupportStatus(ContextMenuUma.LensSupportStatus.LEGACY_OS); + return false; + } + ContextMenuUma.recordLensSupportStatus(ContextMenuUma.LensSupportStatus.LENS_SUPPORTED); return true; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java index 604d2a1..1cbb853 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleToolbarController.java
@@ -9,10 +9,10 @@ import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator; import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; -import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.lifecycle.InflationObserver; import org.chromium.chrome.browser.lifecycle.NativeInitObserver; +import org.chromium.ui.util.TokenHolder; import javax.inject.Inject; @@ -27,7 +27,7 @@ private final CustomTabToolbarCoordinator mToolbarCoordinator; private final CustomTabIntentDataProvider mIntentDataProvider; - private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN; + private int mControlsHidingToken = TokenHolder.INVALID_TOKEN; private boolean mHasReleasedToken; @Inject @@ -73,6 +73,6 @@ @VisibleForTesting boolean hasAcquiredToken() { - return mControlsHidingToken != FullscreenManager.INVALID_TOKEN; + return mControlsHidingToken != TokenHolder.INVALID_TOKEN; } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java index de6b9f1e..35edeb8a5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/features/toolbar/CustomTabToolbarCoordinator.java
@@ -10,6 +10,8 @@ import android.text.TextUtils; import android.view.View; +import androidx.browser.customtabs.CustomTabsIntent; + import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; @@ -32,11 +34,11 @@ import org.chromium.chrome.browser.tab.TabObserverRegistrar; import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.chrome.browser.util.ColorUtils; +import org.chromium.ui.util.TokenHolder; import javax.inject.Inject; import javax.inject.Named; -import androidx.browser.customtabs.CustomTabsIntent; import dagger.Lazy; /** @@ -68,7 +70,7 @@ private final CustomTabStatusBarColorProvider mStatusBarColorProvider; private final CustomTabBrowserControlsVisibilityDelegate mVisibilityDelegate; - private int mControlsHidingToken = FullscreenManager.INVALID_TOKEN; + private int mControlsHidingToken = TokenHolder.INVALID_TOKEN; private boolean mInitializedToolbarWithNative; @Inject
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java index 8828c4e..beded678 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/BrowserStateBrowserControlsVisibilityDelegate.java
@@ -12,6 +12,7 @@ import org.chromium.base.VisibleForTesting; import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.tab.BrowserControlsVisibilityDelegate; +import org.chromium.ui.util.TokenHolder; /** * Determines the desired visibility of the browser controls based on the current state of the @@ -51,8 +52,9 @@ private void ensureControlsVisibleForMinDuration() { // Do not lock the controls as visible. Such as in testing. - if (CommandLine.getInstance().hasSwitch(ChromeSwitches.DISABLE_MINIMUM_SHOW_DURATION)) + if (CommandLine.getInstance().hasSwitch(ChromeSwitches.DISABLE_MINIMUM_SHOW_DURATION)) { return; + } if (mHandler.hasMessages(0)) return; // Messages sent via post/postDelayed have what=0 long currentShowingTime = SystemClock.uptimeMillis() - mCurrentShowingStartTime;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java index 5f3a7e3..697ce51 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/ChromeFullscreenManager.java
@@ -48,6 +48,7 @@ import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.common.BrowserControlsState; +import org.chromium.ui.util.TokenHolder; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java index 9a1e71f..6f1b66d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/FullscreenManager.java
@@ -21,8 +21,6 @@ // TODO(tedchoc): Remove Tab's requirement on the fullscreen tokens to slim down the API of this // class. public abstract class FullscreenManager { - public static final int INVALID_TOKEN = -1; - private final FullscreenHtmlApiHandler mHtmlApiHandler; private boolean mOverlayVideoMode; @Nullable private Tab mTab;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java index 721fefb2..f119b27 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalLifetimeHandler.java
@@ -16,6 +16,7 @@ import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager.ModalDialogType; +import org.chromium.ui.util.TokenHolder; /** * Class responsible for handling dismissal of a tab modal dialog on user actions outside the tab @@ -44,6 +45,7 @@ private TabModalPresenter mPresenter; private TabModelSelectorTabModelObserver mTabModelObserver; private Tab mActiveTab; + private int mTabModalSuspendedToken; /** * @param activity The {@link ChromeActivity} that this handler is attached to. @@ -53,6 +55,7 @@ mActivity = activity; mManager = manager; activity.getLifecycleDispatcher().register(this); + mTabModalSuspendedToken = TokenHolder.INVALID_TOKEN; } /** @@ -114,9 +117,10 @@ private void updateSuspensionState() { assert mActiveTab != null; if (mActiveTab.isUserInteractable()) { - mManager.resumeType(ModalDialogType.TAB); - } else { - mManager.suspendType(ModalDialogType.TAB); + mManager.resumeType(ModalDialogType.TAB, mTabModalSuspendedToken); + mTabModalSuspendedToken = TokenHolder.INVALID_TOKEN; + } else if (mTabModalSuspendedToken == TokenHolder.INVALID_TOKEN) { + mTabModalSuspendedToken = mManager.suspendType(ModalDialogType.TAB); } } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java index 48b6d5d..046cf88 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/modaldialog/TabModalPresenter.java
@@ -22,7 +22,6 @@ import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel; import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager; import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager; -import org.chromium.chrome.browser.omnibox.LocationBar; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabAttributeKeys; import org.chromium.chrome.browser.tab.TabAttributes; @@ -290,6 +289,8 @@ * @param restricted Whether the browser controls access should be restricted. */ private void setBrowserControlsAccess(boolean restricted) { + if (mChromeActivity.getToolbarManager() == null) return; + View menuButton = mChromeActivity.getToolbarManager().getMenuButtonView(); if (restricted) { @@ -325,8 +326,7 @@ // Force toolbar to show and disable overflow menu. onTabModalDialogStateChanged(true); - mChromeActivity.getToolbarManager().setUrlBarFocus( - false, LocationBar.OmniboxFocusReason.UNFOCUS); + mChromeActivity.getToolbarManager().setUrlBarFocus(false); menuButton.setEnabled(false); } else {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java index 4887603..0bda0f2b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBar.java
@@ -9,9 +9,6 @@ import android.view.ViewGroup; import android.view.Window; -import androidx.annotation.IntDef; -import androidx.annotation.Nullable; - import org.chromium.chrome.browser.ActivityTabProvider; import org.chromium.chrome.browser.WindowDelegate; import org.chromium.chrome.browser.ntp.NewTabPage; @@ -23,41 +20,10 @@ import org.chromium.chrome.browser.toolbar.top.ToolbarActionModeCallback; import org.chromium.ui.base.WindowAndroid; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - /** * Container that holds the {@link UrlBar} and SSL state related with the current {@link Tab}. */ public interface LocationBar extends UrlBarDelegate { - /** A means of tracking which mechanism is being used to focus the omnibox. */ - @IntDef({OmniboxFocusReason.OMNIBOX_TAP, OmniboxFocusReason.OMNIBOX_LONG_PRESS, - OmniboxFocusReason.FAKE_BOX_TAP, OmniboxFocusReason.FAKE_BOX_LONG_PRESS, - OmniboxFocusReason.ACCELERATOR_TAP, OmniboxFocusReason.TAB_SWITCHER_OMNIBOX_TAP, - OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP, - OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS, - OmniboxFocusReason.DEFAULT_WITH_HARDWARE_KEYBOARD, OmniboxFocusReason.SEARCH_QUERY, - OmniboxFocusReason.LAUNCH_NEW_INCOGNITO_TAB, OmniboxFocusReason.MENU_OR_KEYBOARD_ACTION, - OmniboxFocusReason.UNFOCUS}) - @Retention(RetentionPolicy.SOURCE) - public @interface OmniboxFocusReason { - int OMNIBOX_TAP = 0; - int OMNIBOX_LONG_PRESS = 1; - int FAKE_BOX_TAP = 2; - int FAKE_BOX_LONG_PRESS = 3; - int ACCELERATOR_TAP = 4; - // TAB_SWITCHER_OMNIBOX_TAP has not been used anymore, keep it for record for now. - int TAB_SWITCHER_OMNIBOX_TAP = 5; - int TASKS_SURFACE_FAKE_BOX_TAP = 6; - int TASKS_SURFACE_FAKE_BOX_LONG_PRESS = 7; - int DEFAULT_WITH_HARDWARE_KEYBOARD = 8; - int SEARCH_QUERY = 9; - int LAUNCH_NEW_INCOGNITO_TAB = 10; - int MENU_OR_KEYBOARD_ACTION = 11; - int UNFOCUS = 12; - int NUM_ENTRIES = 13; - } - /** * Cleanup resources when this goes out of scope. */ @@ -156,11 +122,8 @@ * Signal a {@link UrlBar} focus change request. * @param shouldBeFocused Whether the focus should be requested or cleared. True requests focus * and False clears focus. - * @param pastedText The given pasted text when focus, which could be null. - * @param reason The given reason. */ - void setUrlBarFocus( - boolean shouldBeFocused, @Nullable String pastedText, @OmniboxFocusReason int reason); + void setUrlBarFocus(boolean shouldBeFocused); /** * Triggers the cursor to be visible in the UrlBar without triggering any of the focus animation
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java index 6bb64d4..0e2456c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -30,7 +30,6 @@ import org.chromium.base.CommandLine; import org.chromium.base.ObserverList; import org.chromium.base.VisibleForTesting; -import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.ActivityTabProvider; @@ -42,7 +41,6 @@ import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.ntp.NewTabPage.FakeboxDelegate; import org.chromium.chrome.browser.ntp.NewTabPageUma; -import org.chromium.chrome.browser.omnibox.LocationBar.OmniboxFocusReason; import org.chromium.chrome.browser.omnibox.UrlBar.ScrollType; import org.chromium.chrome.browser.omnibox.UrlBarCoordinator.SelectionState; import org.chromium.chrome.browser.omnibox.geo.GeolocationHeader; @@ -58,6 +56,7 @@ import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil; import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; +import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.chrome.browser.toolbar.top.ToolbarActionModeCallback; import org.chromium.chrome.browser.ui.widget.CompositeTouchDelegate; import org.chromium.chrome.browser.util.AccessibilityUtil; @@ -78,10 +77,6 @@ public class LocationBarLayout extends FrameLayout implements OnClickListener, LocationBar, AutocompleteDelegate, FakeboxDelegate, LocationBarVoiceRecognitionHandler.Delegate { - private static final EnumeratedHistogramSample ENUMERATED_FOCUS_REASON = - new EnumeratedHistogramSample( - "Android.OmniboxFocusReason", OmniboxFocusReason.NUM_ENTRIES); - protected ImageButton mDeleteButton; protected ImageButton mMicButton; protected UrlBar mUrlBar; @@ -264,7 +259,7 @@ && newConfig.keyboard != Configuration.KEYBOARD_QWERTY) { // If we lose the hardware keyboard and the focus animations were not run, then the // user has not typed any text, so we will just clear the focus instead. - setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); + setUrlBarFocus(false); } } @@ -371,35 +366,13 @@ } @Override - public void setUrlBarFocus( - boolean shouldBeFocused, @Nullable String pastedText, @OmniboxFocusReason int reason) { + public void setUrlBarFocus(boolean shouldBeFocused) { if (shouldBeFocused) { - if (!mUrlHasFocus) recordOmniboxFocusReason(reason); - - if (reason == LocationBar.OmniboxFocusReason.FAKE_BOX_TAP - || reason == LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS - || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_LONG_PRESS - || reason == LocationBar.OmniboxFocusReason.TASKS_SURFACE_FAKE_BOX_TAP) { - mUrlFocusedFromFakebox = true; - } - - if (mUrlHasFocus && mUrlFocusedWithoutAnimations) { - handleUrlFocusAnimation(mUrlHasFocus); - } else { - mUrlBar.requestFocus(); - } + mUrlBar.requestFocus(); } else { - assert pastedText == null; hideKeyboard(); mUrlBar.clearFocus(); } - - if (pastedText != null) { - // This must be happen after requestUrlFocus(), which changes the selection. - mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(pastedText), - UrlBar.ScrollType.NO_SCROLL, UrlBarCoordinator.SelectionState.SELECT_END); - forceOnTextChanged(); - } } @Override @@ -409,7 +382,7 @@ @Override public void clearOmniboxFocus() { - setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); + setUrlBarFocus(false); } @Override @@ -562,11 +535,23 @@ @Override public void requestUrlFocusFromFakebox(String pastedText) { - // TODO(crbug.com/1013693): Get rid of requestUrlFocusFromFakebox to let the caller uses - // setUrlBarFocus directly. - setUrlBarFocus(true, pastedText, - pastedText == null ? LocationBar.OmniboxFocusReason.FAKE_BOX_TAP - : LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS); + mUrlFocusedFromFakebox = true; + if (mUrlHasFocus && mUrlFocusedWithoutAnimations) { + handleUrlFocusAnimation(mUrlHasFocus); + } else { + setUrlBarFocus(true); + } + + if (pastedText != null) { + ToolbarManager.recordOmniboxFocusReason( + ToolbarManager.OmniboxFocusReason.FAKE_BOX_LONG_PRESS); + // This must be happen after requestUrlFocus(), which changes the selection. + mUrlCoordinator.setUrlBarData(UrlBarData.forNonUrlText(pastedText), + UrlBar.ScrollType.NO_SCROLL, UrlBarCoordinator.SelectionState.SELECT_END); + forceOnTextChanged(); + } else { + ToolbarManager.recordOmniboxFocusReason(ToolbarManager.OmniboxFocusReason.FAKE_BOX_TAP); + } } @Override @@ -585,10 +570,7 @@ if (mUrlHasFocus || mUrlFocusedFromFakebox) return; mUrlFocusedWithoutAnimations = true; - - // This interface should only be called to devices with a hardware keyboard attached as - // described in the LocationBar. - setUrlBarFocus(true, null, LocationBar.OmniboxFocusReason.DEFAULT_WITH_HARDWARE_KEYBOARD); + setUrlBarFocus(true); } /** @@ -817,7 +799,7 @@ setUrlBarText(UrlBarData.forNonUrlText(query), UrlBar.ScrollType.NO_SCROLL, SelectionState.SELECT_ALL); - setUrlBarFocus(true, null, LocationBar.OmniboxFocusReason.SEARCH_QUERY); + setUrlBarFocus(true); mAutocompleteCoordinator.startAutocompleteForQuery(query); post(new Runnable() { @Override @@ -844,7 +826,7 @@ @Override public void backKeyPressed() { - setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); + setUrlBarFocus(false); // Revert the URL to match the current page. setUrlToPageUrl(); focusCurrentTab(); @@ -863,12 +845,6 @@ return mToolbarDataProvider.getDisplaySearchTerms() != null; } - @Override - public void gestureDetected(boolean isLongPress) { - recordOmniboxFocusReason(isLongPress ? LocationBar.OmniboxFocusReason.OMNIBOX_LONG_PRESS - : LocationBar.OmniboxFocusReason.OMNIBOX_TAP); - } - /** * @return Returns the original url of the page. */ @@ -894,7 +870,7 @@ // If we did not run the focus animations, then the user has not typed any text. // So, clear the focus and accept whatever URL the page is currently attempting to // display. If the NTP is showing, the current page's URL should not be displayed. - setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); + setUrlBarFocus(false); } else { return; } @@ -1143,8 +1119,4 @@ String textWithAutocomplete = mUrlCoordinator.getTextWithAutocomplete(); mAutocompleteCoordinator.onTextChanged(textWithoutAutocomplete, textWithAutocomplete); } - - private void recordOmniboxFocusReason(@OmniboxFocusReason int reason) { - ENUMERATED_FOCUS_REASON.record(reason); - } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java index 4d2bda3..af4f428 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
@@ -42,6 +42,7 @@ import org.chromium.base.ThreadUtils; import org.chromium.base.metrics.CachedMetrics; import org.chromium.chrome.browser.WindowDelegate; +import org.chromium.chrome.browser.toolbar.ToolbarManager; import org.chromium.ui.KeyboardVisibilityDelegate; import java.lang.annotation.Retention; @@ -209,12 +210,6 @@ * whatever's in the URL bar verbatim. */ boolean shouldCutCopyVerbatim(); - - /** - * Called to notify that a tap or long press gesture has been detected. - * @param isLongPress Whether or not is a long press gesture. - */ - void gestureDetected(boolean isLongPress); } /** Provides updates about the URL text changes. */ @@ -277,14 +272,16 @@ new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { @Override public void onLongPress(MotionEvent e) { - mUrlBarDelegate.gestureDetected(true); + ToolbarManager.recordOmniboxFocusReason( + ToolbarManager.OmniboxFocusReason.OMNIBOX_LONG_PRESS); performLongClick(); } @Override public boolean onSingleTapUp(MotionEvent e) { requestFocus(); - mUrlBarDelegate.gestureDetected(false); + ToolbarManager.recordOmniboxFocusReason( + ToolbarManager.OmniboxFocusReason.OMNIBOX_TAP); return true; } }, ThreadUtils.getUiThreadHandler());
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java b/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java index 0149ce0..7bc72a1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java
@@ -11,8 +11,6 @@ import org.chromium.base.VisibleForTesting; import org.chromium.base.annotations.CalledByNative; import org.chromium.chrome.browser.ChromeActivity; -import org.chromium.chrome.browser.widget.bottomsheet.BottomSheet; -import org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver; import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogProperties; @@ -33,13 +31,13 @@ */ public class PermissionDialogController implements AndroidPermissionRequester.RequestDelegate, ModalDialogProperties.Controller { - @IntDef({State.NOT_SHOWING, State.PROMPT_PENDING, State.PROMPT_OPEN, State.PROMPT_ACCEPTED, - State.PROMPT_DENIED, State.REQUEST_ANDROID_PERMISSIONS}) + @IntDef({State.NOT_SHOWING, State.PROMPT_OPEN, State.PROMPT_ACCEPTED, State.PROMPT_DENIED, + State.REQUEST_ANDROID_PERMISSIONS}) @Retention(RetentionPolicy.SOURCE) private @interface State { int NOT_SHOWING = 0; // We don't show prompts while Chrome Home is showing. - int PROMPT_PENDING = 1; + // int PROMPT_PENDING = 1; // Obsolete. int PROMPT_OPEN = 2; int PROMPT_ACCEPTED = 3; int PROMPT_DENIED = 4; @@ -139,7 +137,6 @@ assert mState == State.NOT_SHOWING; mDialogDelegate = mRequestQueue.remove(0); - mState = State.PROMPT_PENDING; ChromeActivity activity = mDialogDelegate.getTab().getActivity(); // It's possible for the activity to be null if we reach here just after the user @@ -153,35 +150,6 @@ return; } - // Suppress modals while Chrome Home is open. Eventually we will want to handle other cases - // whereby the tab is obscured so modals don't pop up on top of (e.g.) the tab switcher or - // the three-dot menu. - final BottomSheet bottomSheet = activity.getBottomSheet(); - if (bottomSheet == null || !bottomSheet.isSheetOpen()) { - showDialog(); - } else { - bottomSheet.addObserver(new EmptyBottomSheetObserver() { - @Override - public void onSheetClosed(int reason) { - bottomSheet.removeObserver(this); - if (reason == BottomSheet.StateChangeReason.NAVIGATION) { - // Dismiss the prompt as it would otherwise be dismissed momentarily once - // the navigation completes. - // TODO(timloh): This logs a dismiss (and we also already logged a show), - // even though the user didn't see anything. - mDialogDelegate.onDismiss(); - destroyDelegate(); - } else { - showDialog(); - } - } - }); - } - } - - private void showDialog() { - assert mState == State.PROMPT_PENDING; - // The tab may have navigated or been closed while we were waiting for Chrome Home to close. if (mDialogDelegate == null) { mState = State.NOT_SHOWING; @@ -205,8 +173,8 @@ mModalDialogManager.dismissDialog( mDialogModel, DialogDismissalCause.DISMISSED_BY_NATIVE); } else { - assert mState == State.PROMPT_PENDING || mState == State.REQUEST_ANDROID_PERMISSIONS - || mState == State.PROMPT_DENIED || mState == State.PROMPT_ACCEPTED; + assert mState == State.REQUEST_ANDROID_PERMISSIONS || mState == State.PROMPT_DENIED + || mState == State.PROMPT_ACCEPTED; } } else { assert mRequestQueue.contains(delegate);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java index bcee94c..de48479 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
@@ -10,6 +10,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Build; import android.text.TextUtils; import org.chromium.base.ContextUtils; @@ -31,15 +32,16 @@ /** * See function for details. */ - private static boolean sFakePassableLensVersionForTesting; + private static boolean sFakePassableLensEnvironmentForTesting; /* * If true, short-circuit the version name intent check to always return a high enough version. + * Also hardcode the device OS check to return true. * Used by test cases. * @param shouldFake Whether to fake the version check. */ - public static void setFakePassableLensVersionForTesting(boolean shouldFake) { - sFakePassableLensVersionForTesting = shouldFake; + public static void setFakePassableLensEnvironmentForTesting(boolean shouldFake) { + sFakePassableLensEnvironmentForTesting = shouldFake; } /** @@ -51,7 +53,7 @@ */ public static String getLensActivityVersionNameIfAvailable(Context context) { // Use this syntax to avoid NPE if unset. - if (Boolean.TRUE.equals(sFakePassableLensVersionForTesting)) { + if (Boolean.TRUE.equals(sFakePassableLensEnvironmentForTesting)) { // Returns the minimum version which will meet the bar and allow future AGSA version // checks to succeed. return MIN_AGSA_VERSION_NAME_FOR_LENS_POSTCAPTURE; @@ -134,6 +136,20 @@ } /** + * Checks whether the device is below Android O. We restrict to these versions + * to limit to OS"s where image processing vulnerabilities can be retroactively + * fixed if they are discovered in the future. + * @return Whether the device is below Android O. + */ + public static boolean isDeviceOsBelowMinimum() { + if (sFakePassableLensEnvironmentForTesting) { + return false; + } + + return Build.VERSION.SDK_INT < Build.VERSION_CODES.O; + } + + /** * Get a deeplink intent to Google Lens with an optional content provider image URI. * @param imageUri The content provider URI generated by chrome (or empty URI) * if only resolving the activity.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java index 1f9452b6..dcb70eba 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -19,6 +19,7 @@ import android.view.View.OnLongClickListener; import android.view.ViewGroup; +import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.StringRes; @@ -26,6 +27,7 @@ import org.chromium.base.Callback; import org.chromium.base.VisibleForTesting; import org.chromium.base.metrics.CachedMetrics.ActionEvent; +import org.chromium.base.metrics.CachedMetrics.EnumeratedHistogramSample; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; @@ -55,7 +57,6 @@ import org.chromium.chrome.browser.findinpage.FindToolbarManager; import org.chromium.chrome.browser.findinpage.FindToolbarObserver; import org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControlsVisibilityDelegate; -import org.chromium.chrome.browser.fullscreen.FullscreenManager; import org.chromium.chrome.browser.fullscreen.FullscreenOptions; import org.chromium.chrome.browser.metrics.OmniboxStartupMetrics; import org.chromium.chrome.browser.native_page.NativePage; @@ -120,9 +121,12 @@ import org.chromium.content_public.common.ContentUrlConstants; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.PageTransition; +import org.chromium.ui.util.TokenHolder; import org.chromium.ui.widget.Toast; import org.chromium.ui.widget.ViewRectProvider; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.List; /** @@ -143,6 +147,23 @@ void updateReloadButtonState(boolean isLoading); } + /** A means of tracking which mechanism is being used to focus the omnibox. */ + @IntDef({OmniboxFocusReason.OMNIBOX_TAP, OmniboxFocusReason.OMNIBOX_LONG_PRESS, + OmniboxFocusReason.FAKE_BOX_TAP, OmniboxFocusReason.FAKE_BOX_LONG_PRESS, + OmniboxFocusReason.ACCELERATOR_TAP, OmniboxFocusReason.TAB_SWITCHER_OMNIBOX_TAP}) + @Retention(RetentionPolicy.SOURCE) + public @interface OmniboxFocusReason { + int OMNIBOX_TAP = 0; + int OMNIBOX_LONG_PRESS = 1; + int FAKE_BOX_TAP = 2; + int FAKE_BOX_LONG_PRESS = 3; + int ACCELERATOR_TAP = 4; + int TAB_SWITCHER_OMNIBOX_TAP = 5; + int NUM_ENTRIES = 6; + } + private static final EnumeratedHistogramSample ENUMERATED_FOCUS_REASON = + new EnumeratedHistogramSample( + "Android.OmniboxFocusReason", OmniboxFocusReason.NUM_ENTRIES); private static final ActionEvent ACCELERATOR_BUTTON_TAP_ACTION = new ActionEvent("MobileToolbarOmniboxAcceleratorTap"); @@ -195,10 +216,10 @@ private UrlFocusChangeListener mLocationBarFocusObserver; private BrowserStateBrowserControlsVisibilityDelegate mControlsVisibilityDelegate; - private int mFullscreenFocusToken = FullscreenManager.INVALID_TOKEN; - private int mFullscreenFindInPageToken = FullscreenManager.INVALID_TOKEN; - private int mFullscreenMenuToken = FullscreenManager.INVALID_TOKEN; - private int mFullscreenHighlightToken = FullscreenManager.INVALID_TOKEN; + private int mFullscreenFocusToken = TokenHolder.INVALID_TOKEN; + private int mFullscreenFindInPageToken = TokenHolder.INVALID_TOKEN; + private int mFullscreenMenuToken = TokenHolder.INVALID_TOKEN; + private int mFullscreenHighlightToken = TokenHolder.INVALID_TOKEN; private int mPreselectedTabId = Tab.INVALID_TAB_ID; @@ -725,7 +746,7 @@ @Override public void onScrimClick() { - setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS); + setUrlBarFocus(false); } /** @@ -736,6 +757,17 @@ } /** + * @param reason A {@link OmniboxFocusReason} that the omnibox was focused. + */ + public static void recordOmniboxFocusReason(@OmniboxFocusReason int reason) { + if (OmniboxFocusReason.OMNIBOX_TAP == reason + && ReturnToChromeExperimentsUtil.isInOverviewWithOmnibox()) { + reason = OmniboxFocusReason.TAB_SWITCHER_OMNIBOX_TAP; + } + ENUMERATED_FOCUS_REASON.record(reason); + } + + /** * Enable the bottom toolbar. */ public void enableBottomToolbar() { @@ -747,8 +779,9 @@ final OnClickListener searchAcceleratorListener = v -> { recordBottomToolbarUseForIPH(); + recordOmniboxFocusReason(OmniboxFocusReason.ACCELERATOR_TAP); ACCELERATOR_BUTTON_TAP_ACTION.record(); - setUrlBarFocus(true, LocationBar.OmniboxFocusReason.ACCELERATOR_TAP); + setUrlBarFocus(true); }; final OnClickListener shareButtonListener = v -> { @@ -1341,7 +1374,7 @@ if (isVisible) { // Defocus here to avoid handling focus in multiple places, e.g., when the // forward button is pressed. (see crbug.com/414219) - setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS); + setUrlBarFocus(false); if (!mActivity.isInOverviewMode() && isShowingAppMenuUpdateBadge()) { // The app menu badge should be removed the first time the menu is opened. @@ -1642,12 +1675,11 @@ * If you request focus and the UrlBar was already focused, this will select all of the text. * * @param focused Whether URL bar should be focused. - * @param reason The given reason. */ - public void setUrlBarFocus(boolean focused, @LocationBar.OmniboxFocusReason int reason) { + public void setUrlBarFocus(boolean focused) { if (!isInitialized()) return; boolean wasFocused = mLocationBar.isUrlBarFocused(); - mLocationBar.setUrlBarFocus(focused, null, reason); + mLocationBar.setUrlBarFocus(focused); if (wasFocused && focused) { mLocationBar.selectAll(); } @@ -1657,10 +1689,9 @@ * See {@link #setUrlBarFocus}, but if native is not loaded it will queue the request instead * of dropping it. */ - public void setUrlBarFocusOnceNativeInitialized( - boolean focused, @LocationBar.OmniboxFocusReason int reason) { + public void setUrlBarFocusOnceNativeInitialized(boolean focused) { if (isInitialized()) { - setUrlBarFocus(focused, reason); + setUrlBarFocus(focused); return; } @@ -1669,7 +1700,7 @@ // initialized. This is important for the Launch to Incognito Tab flow (see // IncognitoTabLauncher. mOnInitializedRunnable = () -> { - setUrlBarFocus(focused, reason); + setUrlBarFocus(focused); }; } else { mOnInitializedRunnable = null; @@ -1828,7 +1859,7 @@ // Ensure the URL bar loses focus if the tab it was interacting with is changed from // underneath it. - setUrlBarFocus(false, LocationBar.OmniboxFocusReason.UNFOCUS); + setUrlBarFocus(false); // Place the cursor in the Omnibox if applicable. We always clear the focus above to // ensure the shield placed over the content is dismissed when switching tabs. But if
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java index 83e7ca9..eabdc4c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java
@@ -609,9 +609,6 @@ } @Override - public void gestureDetected(boolean isLongPress) {} - - @Override public void setShowTitle(boolean showTitle) { if (showTitle) { mState = STATE_DOMAIN_AND_TITLE; @@ -806,8 +803,7 @@ } @Override - public void setUrlBarFocus(boolean shouldBeFocused, @Nullable String pastedText, - @LocationBar.OmniboxFocusReason int reason) {} + public void setUrlBarFocus(boolean shouldBeFocused) {} @Override public void showUrlBarCursorWithoutFocusAnimations() {}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java index 8bc47f0..e1641c6 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
@@ -797,9 +797,7 @@ * @return Whether or not the current Tab did go back. */ boolean back() { - if (getLocationBar() != null) { - getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); - } + if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false); return mToolbarTabController != null && mToolbarTabController.back() != null; } @@ -808,9 +806,7 @@ * @return Whether or not the current Tab did go forward. */ boolean forward() { - if (getLocationBar() != null) { - getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); - } + if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false); return mToolbarTabController != null ? mToolbarTabController.forward() : false; } @@ -821,9 +817,7 @@ * <p>The buttons of the toolbar will be updated as a result of making this call. */ void stopOrReloadCurrentTab() { - if (getLocationBar() != null) { - getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); - } + if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false); if (mToolbarTabController != null) mToolbarTabController.stopOrReloadCurrentTab(); } @@ -831,9 +825,7 @@ * Opens hompage in the current tab. */ void openHomepage() { - if (getLocationBar() != null) { - getLocationBar().setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); - } + if (getLocationBar() != null) getLocationBar().setUrlBarFocus(false); if (mToolbarTabController != null) mToolbarTabController.openHomepage(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java index 0a3c728..9e07763 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -2199,6 +2199,10 @@ if (getToolbarDataProvider().shouldShowLocationBarInOverviewMode()) { mLocationBar.updateStatusIcon(); + + if (getToolbarDataProvider().isInOverviewAndShowingOmnibox()) { + mUrlBar.setText(""); + } } } });
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java index f23a1648..4704cfe 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkModelTest.java
@@ -128,6 +128,24 @@ @SmallTest @UiThreadTest @Feature({"Bookmark"}) + public void testMoveBookmarksToSameFolder() { + BookmarkId folder = mBookmarkModel.addFolder(mMobileNode, 0, "fc"); + BookmarkId bookmarkA = addBookmark(folder, 0, "a", "http://a.com"); + BookmarkId bookmarkB = addBookmark(folder, 1, "b", "http://b.com"); + + HashSet<BookmarkId> movedBookmarks = new HashSet<BookmarkId>(2); + movedBookmarks.add(bookmarkA); + movedBookmarks.add(bookmarkB); + mBookmarkModel.moveBookmarks(new ArrayList<BookmarkId>(movedBookmarks), folder); + + // Order of the moved bookmarks is not tested. + verifyBookmarkListNoOrder(mBookmarkModel.getChildIDs(folder, true, true), movedBookmarks); + } + + @Test + @SmallTest + @UiThreadTest + @Feature({"Bookmark"}) public void testDeleteBookmarks() { BookmarkId bookmarkA = addBookmark(mDesktopNode, 0, "a", "http://a.com"); BookmarkId bookmarkB = addBookmark(mOtherNode, 0, "b", "http://b.com");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java index 97a38f3..9858a6f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextmenu/ContextMenuTest.java
@@ -96,7 +96,7 @@ TestThreadUtils.runOnUiThreadBlocking(() -> FirstRunStatus.setFirstRunFlowComplete(false)); deleteTestFiles(); ContextMenuHelper.setHardcodedImageBytesForTesting(null); - LensUtils.setFakePassableLensVersionForTesting(false); + LensUtils.setFakePassableLensEnvironmentForTesting(false); } @Override @@ -105,7 +105,7 @@ mTestUrl = mTestServer.getURL(TEST_PATH); deleteTestFiles(); ContextMenuHelper.setHardcodedImageBytesForTesting(null); - LensUtils.setFakePassableLensVersionForTesting(false); + LensUtils.setFakePassableLensEnvironmentForTesting(false); mDownloadTestRule.startMainActivityWithURL(mTestUrl); mDownloadTestRule.assertWaitForPageScaleFactorMatch(0.5f); } @@ -142,7 +142,7 @@ public void testSearchWithGoogleLensFiresIntent() throws Throwable { Tab tab = mDownloadTestRule.getActivity().getActivityTab(); - LensUtils.setFakePassableLensVersionForTesting(true); + LensUtils.setFakePassableLensEnvironmentForTesting(true); ShareHelper.setIgnoreActivityNotFoundExceptionForTesting(true); hardcodeTestImageForSharing(); @@ -415,7 +415,7 @@ @Feature({"Browser", "ContextMenu"}) @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS}) public void testContextMenuRetrievesImageOptionsLensEnabled() throws TimeoutException { - LensUtils.setFakePassableLensVersionForTesting(true); + LensUtils.setFakePassableLensEnvironmentForTesting(true); Tab tab = mDownloadTestRule.getActivity().getActivityTab(); ContextMenu menu = ContextMenuUtils.openContextMenu(tab, "testImage"); @@ -455,7 +455,7 @@ @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS}) public void testContextMenuRetrievesImageOptions_NoDefaultSearchEngineLensEnabled() throws TimeoutException { - LensUtils.setFakePassableLensVersionForTesting(true); + LensUtils.setFakePassableLensEnvironmentForTesting(true); Tab tab = mDownloadTestRule.getActivity().getActivityTab(); ContextMenu menu = ContextMenuUtils.openContextMenu(tab, "testImage"); @@ -495,7 +495,7 @@ @EnableFeatures({ChromeFeatureList.CONTEXT_MENU_SEARCH_WITH_GOOGLE_LENS}) public void testContextMenuRetrievesImageLinkOptionsSearchLensEnabled() throws TimeoutException { - LensUtils.setFakePassableLensVersionForTesting(true); + LensUtils.setFakePassableLensEnvironmentForTesting(true); Tab tab = mDownloadTestRule.getActivity().getActivityTab(); ContextMenu menu = ContextMenuUtils.openContextMenu(tab, "testImageLink");
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java index cd9c137..8b8f064 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/LocationBarLayoutTest.java
@@ -20,7 +20,6 @@ import org.junit.runner.RunWith; import org.chromium.base.ContextUtils; -import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Restriction; @@ -251,48 +250,4 @@ onView(withId(R.id.location_bar_status)) .check((view, e) -> Assert.assertEquals(iconView.getVisibility(), GONE)); } - - @Test - @SmallTest - public void testSetUrlBarFocus() { - final LocationBarLayout locationBar = getLocationBar(); - - Assert.assertEquals( - 0, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason")); - TestThreadUtils.runOnUiThreadBlocking(() -> { - locationBar.setUrlBarFocus( - true, SEARCH_TERMS_URL, LocationBar.OmniboxFocusReason.FAKE_BOX_LONG_PRESS); - }); - Assert.assertTrue(locationBar.isUrlBarFocused()); - Assert.assertTrue(locationBar.didFocusUrlFromFakebox()); - Assert.assertEquals(SEARCH_TERMS_URL, getUrlText(getUrlBar())); - Assert.assertEquals( - 1, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason")); - - TestThreadUtils.runOnUiThreadBlocking(() -> { - locationBar.setUrlBarFocus( - true, SEARCH_TERMS, LocationBar.OmniboxFocusReason.SEARCH_QUERY); - }); - Assert.assertTrue(locationBar.isUrlBarFocused()); - Assert.assertTrue(locationBar.didFocusUrlFromFakebox()); - Assert.assertEquals(SEARCH_TERMS, getUrlText(getUrlBar())); - Assert.assertEquals( - 1, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason")); - - TestThreadUtils.runOnUiThreadBlocking(() -> { - locationBar.setUrlBarFocus(false, null, LocationBar.OmniboxFocusReason.UNFOCUS); - }); - Assert.assertFalse(locationBar.isUrlBarFocused()); - Assert.assertFalse(locationBar.didFocusUrlFromFakebox()); - Assert.assertEquals( - 1, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason")); - - TestThreadUtils.runOnUiThreadBlocking(() -> { - locationBar.setUrlBarFocus(true, null, LocationBar.OmniboxFocusReason.OMNIBOX_TAP); - }); - Assert.assertTrue(locationBar.isUrlBarFocused()); - Assert.assertFalse(locationBar.didFocusUrlFromFakebox()); - Assert.assertEquals( - 2, RecordHistogram.getHistogramTotalCountForTesting("Android.OmniboxFocusReason")); - } }
diff --git a/chrome/android/profiles/newest.txt b/chrome/android/profiles/newest.txt index 5a90205..3b09b17 100644 --- a/chrome/android/profiles/newest.txt +++ b/chrome/android/profiles/newest.txt
@@ -1 +1 @@ -chromeos-chrome-amd64-78.0.3902.0_rc-r1-merged.afdo.bz2 \ No newline at end of file +gs://chromeos-localmirror/distfiles/afdo/bespoke/chromeos-chrome-amd64-78.0.3902.0_rc-r1-merged-no_indirect_functions.afdo.bz2
diff --git a/chrome/app/BUILD.gn b/chrome/app/BUILD.gn index f179c6a..6039c304 100644 --- a/chrome/app/BUILD.gn +++ b/chrome/app/BUILD.gn
@@ -49,7 +49,10 @@ if (is_win) { sources += [ "chrome_dll.rc" ] - deps += [ "//printing/buildflags" ] + deps += [ + "//build:branding_buildflags", + "//printing/buildflags", + ] } }
diff --git a/chrome/app/chrome_dll.rc b/chrome/app/chrome_dll.rc index 724208ce..7e63b68 100644 --- a/chrome/app/chrome_dll.rc +++ b/chrome/app/chrome_dll.rc
@@ -1,5 +1,6 @@ // Microsoft Visual C++ generated resource script. // +#include "build/branding_buildflags.h" #include "chrome_dll_resource.h" #include "chrome_command_ids.h" #include "printing/buildflags/buildflags.h" @@ -162,7 +163,7 @@ // the icon from the current module). We can perhaps work around this in the // future to get the icon from the .exe, which would save a copy. -#if defined(GOOGLE_CHROME_BUILD) +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) IDR_MAINFRAME ICON "theme\google_chrome\win\chrome.ico" IDR_SXS ICON "theme\google_chrome\win\chrome_sxs.ico" IDR_X004_DEV ICON "theme\google_chrome\win\chrome_dev.ico"
diff --git a/chrome/app/chrome_exe.rc b/chrome/app/chrome_exe.rc index 4c6be18..5eb0c3b 100644 --- a/chrome/app/chrome_exe.rc +++ b/chrome/app/chrome_exe.rc
@@ -1,5 +1,6 @@ // Microsoft Visual C++ generated resource script. // +#include "build/branding_buildflags.h" #include "chrome_exe_resource.h" #define APSTUDIO_READONLY_SYMBOLS @@ -35,7 +36,7 @@ // Note: chrome/installer/util/shell_util.cc depends on the order and number of // icons. To avoid breaking existing shortcuts, add new icons at the end // (following the ordering described above). -#if defined(GOOGLE_CHROME_BUILD) +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) IDR_MAINFRAME ICON "theme\\google_chrome\\win\\chrome.ico" // These three are no longer used, but remain as placeholders. (They cannot be // removed, or existing shortcuts to the later resources will break.) @@ -54,7 +55,7 @@ // should be incremented when a new icon is added. The icon indices in // chrome_icon_resources_win.h should also be updated. -#if defined(GOOGLE_CHROME_BUILD) +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) IDR_X001_APP_LIST ICON "theme\\google_chrome\\win\\app_list.ico" IDR_X002_APP_LIST_SXS ICON "theme\\google_chrome\\win\\app_list_sxs.ico" IDR_X003_INCOGNITO ICON "theme\\google_chrome\\win\\incognito.ico"
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 8a6fbe3..c9d91b3 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -4529,10 +4529,16 @@ {"scalable-app-list", flag_descriptions::kScalableAppListName, flag_descriptions::kScalableAppListDescription, kOsCrOS, FEATURE_VALUE_TYPE(app_list_features::kScalableAppList)}, + {"fuzzy-app-search", flag_descriptions::kFuzzyAppSearchName, flag_descriptions::kFuzzyAppSearchDescription, kOsCrOS, FEATURE_VALUE_TYPE(app_list_features::kEnableFuzzyAppSearch)}, + {"aggregated-ml-search-ranking", + flag_descriptions::kAggregatedMlSearchRankingName, + flag_descriptions::kAggregatedMlSearchRankingDescription, kOsCrOS, + FEATURE_VALUE_TYPE(app_list_features::kEnableAggregatedMlSearchRanking)}, + #endif // defined(OS_CHROMEOS) {"passwords-account-storage",
diff --git a/chrome/browser/after_startup_task_utils.cc b/chrome/browser/after_startup_task_utils.cc index 6f9e038..de85c99 100644 --- a/chrome/browser/after_startup_task_utils.cc +++ b/chrome/browser/after_startup_task_utils.cc
@@ -21,6 +21,7 @@ #include "build/build_config.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/navigation_handle.h" #include "content/public/browser/page_visibility_state.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" @@ -180,6 +181,14 @@ OnStartupComplete(); } + // Starting the browser with a file download url will not result in + // DidFinishLoad firing, so watch for this case too. crbug.com/1006954 + void DidFinishNavigation( + content::NavigationHandle* navigation_handle) override { + if (navigation_handle->IsInMainFrame() && navigation_handle->IsDownload()) + OnStartupComplete(); + } + void WebContentsDestroyed() override { OnStartupComplete(); } SEQUENCE_CHECKER(sequence_checker_);
diff --git a/chrome/browser/android/bookmarks/bookmark_bridge.cc b/chrome/browser/android/bookmarks/bookmark_bridge.cc index d44fafc..fc41628 100644 --- a/chrome/browser/android/bookmarks/bookmark_bridge.cc +++ b/chrome/browser/android/bookmarks/bookmark_bridge.cc
@@ -746,7 +746,10 @@ bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); type = JavaBookmarkIdGetType(env, j_parent_id_obj); const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type); - bookmark_model_->Move(node, new_parent_node, size_t{index}); + // Bookmark should not be moved to its own parent folder + if (node->parent() != new_parent_node) { + bookmark_model_->Move(node, new_parent_node, size_t{index}); + } } ScopedJavaLocalRef<jobject> BookmarkBridge::AddBookmark(
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc index 1108eba..802df38 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc +++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -40,6 +40,7 @@ #include "net/http/http_status_code.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/cpp/simple_url_loader.h" +#include "third_party/blink/public/mojom/frame/frame.mojom.h" #include "url/gurl.h" using content::RenderFrameHost; @@ -103,9 +104,10 @@ base::WeakPtr<ContextualSearchContext> contextual_search_context, content::WebContents* web_contents) { DCHECK(web_contents); - RenderFrameHost::TextSurroundingSelectionCallback callback = base::BindOnce( - &ContextualSearchDelegate::OnTextSurroundingSelectionAvailable, - AsWeakPtr()); + blink::mojom::Frame::GetTextSurroundingSelectionCallback callback = + base::BindOnce( + &ContextualSearchDelegate::OnTextSurroundingSelectionAvailable, + AsWeakPtr()); context_ = contextual_search_context; if (context_ == nullptr) return;
diff --git a/chrome/browser/android/provider/chrome_browser_provider.cc b/chrome/browser/android/provider/chrome_browser_provider.cc index 756e197..2e475ae9 100644 --- a/chrome/browser/android/provider/chrome_browser_provider.cc +++ b/chrome/browser/android/provider/chrome_browser_provider.cc
@@ -39,7 +39,6 @@ #include "components/bookmarks/managed/managed_bookmark_service.h" #include "components/favicon/core/favicon_service.h" #include "components/history/core/browser/android/android_history_types.h" -#include "components/history/core/browser/history_service.h" #include "components/history/core/browser/top_sites.h" #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_service.h" @@ -793,9 +792,7 @@ } ChromeBrowserProvider::ChromeBrowserProvider(JNIEnv* env, jobject obj) - : weak_java_provider_(env, obj), - history_service_observer_(this), - handling_extensive_changes_(false) { + : weak_java_provider_(env, obj), handling_extensive_changes_(false) { DCHECK_CURRENTLY_ON(BrowserThread::UI); profile_ = g_browser_process->profile_manager()->GetLastUsedProfile(); bookmark_model_ = BookmarkModelFactory::GetForBrowserContext(profile_);
diff --git a/chrome/browser/android/provider/chrome_browser_provider.h b/chrome/browser/android/provider/chrome_browser_provider.h index d1bed91..87c3153 100644 --- a/chrome/browser/android/provider/chrome_browser_provider.h +++ b/chrome/browser/android/provider/chrome_browser_provider.h
@@ -15,6 +15,7 @@ #include "base/task/cancelable_task_tracker.h" #include "components/bookmarks/browser/base_bookmark_model_observer.h" #include "components/history/core/browser/android/android_history_types.h" +#include "components/history/core/browser/history_service.h" #include "components/history/core/browser/history_service_observer.h" class AndroidHistoryProviderService; @@ -229,7 +230,7 @@ base::CancelableTaskTracker cancelable_task_tracker_; ScopedObserver<history::HistoryService, history::HistoryServiceObserver> - history_service_observer_; + history_service_observer_{this}; bool handling_extensive_changes_;
diff --git a/chrome/browser/android/vr/arcore_device/arcore_device.cc b/chrome/browser/android/vr/arcore_device/arcore_device.cc index 2f7afc3..8b713a6 100644 --- a/chrome/browser/android/vr/arcore_device/arcore_device.cc +++ b/chrome/browser/android/vr/arcore_device/arcore_device.cc
@@ -122,11 +122,16 @@ DVLOG(1) << __func__; DCHECK(IsOnMainThread()); - if (session_state_->pending_request_session_callback_) { + if (HasExclusiveSession()) { DVLOG(1) << __func__ << ": Rejecting additional session request"; std::move(callback).Run(nullptr, mojo::NullRemote()); return; } + + // Set HasExclusiveSession status to true. This lasts until OnSessionEnded. + OnStartPresenting(); + + DCHECK(!session_state_->pending_request_session_callback_); session_state_->pending_request_session_callback_ = std::move(callback); bool use_dom_overlay = base::Contains( @@ -200,6 +205,9 @@ void ArCoreDevice::OnSessionEnded() { DVLOG(1) << __func__; + if (!HasExclusiveSession()) + return; + // This may be a no-op in case session end was initiated from the Java side. arcore_session_utils_->EndSession(); @@ -225,6 +233,9 @@ // Create a new mailbox bridge for use in the next session. (This is cheap, // the constructor doesn't establish a GL context.) mailbox_bridge_ = std::make_unique<vr::MailboxToSurfaceBridge>(); + + // This sets HasExclusiveSession status to false. + OnExitPresent(); } void ArCoreDevice::CallDeferredRequestSessionCallback(bool success) {
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index dfd9b23..3f75235 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -625,8 +625,12 @@ "arc/session/arc_session_manager.h", "arc/tracing/arc_app_performance_tracing.cc", "arc/tracing/arc_app_performance_tracing.h", + "arc/tracing/arc_app_performance_tracing_custom_session.cc", + "arc/tracing/arc_app_performance_tracing_custom_session.h", "arc/tracing/arc_app_performance_tracing_session.cc", "arc/tracing/arc_app_performance_tracing_session.h", + "arc/tracing/arc_app_performance_tracing_uma_session.cc", + "arc/tracing/arc_app_performance_tracing_uma_session.h", "arc/tracing/arc_cpu_event.cc", "arc/tracing/arc_cpu_event.h", "arc/tracing/arc_graphics_jank_detector.cc",
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc index aa300a9..014b14f 100644 --- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.cc
@@ -7,7 +7,9 @@ #include "base/memory/singleton.h" #include "base/no_destructor.h" #include "base/strings/string_util.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h" #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h" #include "components/arc/arc_browser_context_keyed_service_factory_base.h" #include "components/arc/arc_features.h" @@ -99,6 +101,13 @@ return ArcAppPerformanceTracingFactory::GetForBrowserContext(context); } +ArcAppPerformanceTracing* +ArcAppPerformanceTracing::GetForBrowserContextForTesting( + content::BrowserContext* context) { + return ArcAppPerformanceTracingFactory::GetForBrowserContextForTesting( + context); +} + // static void ArcAppPerformanceTracing::SetFocusAppForTesting( const std::string& package_name, @@ -108,6 +117,11 @@ ArcAppListPrefs::GetAppId(package_name, activity), category); } +void ArcAppPerformanceTracing::SetCustomSessionReadyCallbackForTesting( + CustomSessionReadyCallback callback) { + custom_session_ready_callback_ = std::move(callback); +} + void ArcAppPerformanceTracing::Shutdown() { MaybeStopTracing(); @@ -119,6 +133,26 @@ exo::WMHelper::GetInstance()->RemoveActivationObserver(this); } +bool ArcAppPerformanceTracing::StartCustomTracing() { + if (!arc_active_window_) + return false; + + session_ = std::make_unique<ArcAppPerformanceTracingCustomSession>(this); + session_->Schedule(); + if (custom_session_ready_callback_) + custom_session_ready_callback_.Run(); + + return true; +} + +void ArcAppPerformanceTracing::StopCustomTracing( + ResultCallback result_callback) { + if (!session_ || !session_->AsCustomSession()) + std::move(result_callback).Run(false /* success */, 0, 0, 0); + + session_->AsCustomSession()->StopAndAnalyze(std::move(result_callback)); +} + void ArcAppPerformanceTracing::OnWindowActivated(ActivationReason reason, aura::Window* gained_active, aura::Window* lost_active) { @@ -170,11 +204,6 @@ reported_categories_.insert(category); } -void ArcAppPerformanceTracing::SetTracingPeriodForTesting( - const base::TimeDelta& period) { - tracing_period_ = period; -} - void ArcAppPerformanceTracing::MaybeStartTracing() { if (session_) { // We are already tracing, ignore. @@ -205,8 +234,8 @@ } // Start tracing for |arc_active_window_|. - session_ = std::make_unique<ArcAppPerformanceTracingSession>( - this, arc_active_window_, category, tracing_period_); + session_ = + std::make_unique<ArcAppPerformanceTracingUmaSession>(this, category); session_->Schedule(); }
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h index f801c52..687768ea 100644 --- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h
@@ -12,6 +12,7 @@ #include <set> #include <string> +#include "base/callback.h" #include "base/macros.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "components/keyed_service/core/keyed_service.h" @@ -38,6 +39,12 @@ public aura::WindowObserver, public ArcAppListPrefs::Observer { public: + using ResultCallback = base::OnceCallback<void(bool success, + double fps, + double commit_deviation, + double render_quality)>; + using CustomSessionReadyCallback = base::RepeatingCallback<void()>; + ArcAppPerformanceTracing(content::BrowserContext* context, ArcBridgeService* bridge); ~ArcAppPerformanceTracing() override; @@ -46,14 +53,23 @@ // or nullptr if the browser |context| is not allowed to use ARC++. static ArcAppPerformanceTracing* GetForBrowserContext( content::BrowserContext* context); + static ArcAppPerformanceTracing* GetForBrowserContextForTesting( + content::BrowserContext* context); static void SetFocusAppForTesting(const std::string& package_name, const std::string& activity, const std::string& category); + void SetCustomSessionReadyCallbackForTesting( + CustomSessionReadyCallback callback); // KeyedService: void Shutdown() override; + // Starts custom tracing. Returns true if tracing was successfully started. + bool StartCustomTracing(); + // Stops custom tracing and returns tracing results. + void StopCustomTracing(ResultCallback result_callback); + // wm::ActivationChangeObserver: void OnWindowActivated(ActivationReason reason, aura::Window* gained_active, @@ -75,12 +91,13 @@ // Marks that |category| is reported in the current user's session. void SetReported(const std::string& category); - // Sets different tracing |period| for testing. - void SetTracingPeriodForTesting(const base::TimeDelta& period); - // Returns active tracing session or nullptr. ArcAppPerformanceTracingSession* session() { return session_.get(); } + // Returns currently active ARC window or null. It may or may not be currently + // profiled. + aura::Window* active_window() { return arc_active_window_; } + private: // May be start tracing session if all conditions are met. Window creating is // controlled by Wayland protocol implementation and task creation is reported @@ -119,9 +136,8 @@ // Keeps current active tracing session associated with |arc_active_window_|. std::unique_ptr<ArcAppPerformanceTracingSession> session_; - // Defines the period to capture tracing results. Can be overwritten for - // testing. - base::TimeDelta tracing_period_ = base::TimeDelta::FromSeconds(15); + // Callback to call when custom session is ready for testing. + CustomSessionReadyCallback custom_session_ready_callback_; DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracing); };
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.cc new file mode 100644 index 0000000..21c3d77 --- /dev/null +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.cc
@@ -0,0 +1,57 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "arc_app_performance_tracing_custom_session.h" + +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" + +namespace arc { + +ArcAppPerformanceTracingCustomSession::ArcAppPerformanceTracingCustomSession( + ArcAppPerformanceTracing* owner) + : ArcAppPerformanceTracingSession(owner) {} + +ArcAppPerformanceTracingCustomSession:: + ~ArcAppPerformanceTracingCustomSession() = default; + +void ArcAppPerformanceTracingCustomSession::Schedule() { + ScheduleInternal(false /* detect_idles */, + base::TimeDelta() /* start_delay */, + base::TimeDelta() /* tracing_period */); +} + +ArcAppPerformanceTracingCustomSession* +ArcAppPerformanceTracingCustomSession::AsCustomSession() { + return this; +} + +void ArcAppPerformanceTracingCustomSession::StopAndAnalyze( + ResultCallback callback) { + DCHECK(!callback_); + DCHECK(callback); + + callback_ = std::move(callback); + if (tracing_active()) + StopAndAnalyzeInternal(); + else + OnTracingFailed(); + + DCHECK(!callback_); +} + +void ArcAppPerformanceTracingCustomSession::OnTracingDone( + double fps, + double commit_deviation, + double render_quality) { + DCHECK(callback_); + std::move(callback_).Run(true /* success */, fps, commit_deviation, + render_quality); +} + +void ArcAppPerformanceTracingCustomSession::OnTracingFailed() { + DCHECK(callback_); + std::move(callback_).Run(false /* success */, 0, 0, 0); +} + +} // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h new file mode 100644 index 0000000..90f1952 --- /dev/null +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_custom_session.h
@@ -0,0 +1,51 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_CUSTOM_SESSION_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_CUSTOM_SESSION_H_ + +#include "base/callback.h" +#include "base/macros.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" + +namespace arc { + +class ArcAppPerformanceTracing; + +// Handles the tracing initiated from a test. It started and stopped explicitly. +// There is no automatic idle detection. +class ArcAppPerformanceTracingCustomSession + : public ArcAppPerformanceTracingSession { + public: + using ResultCallback = base::OnceCallback<void(bool success, + double fps, + double commit_deviation, + double render_quality)>; + + explicit ArcAppPerformanceTracingCustomSession( + ArcAppPerformanceTracing* owner); + ~ArcAppPerformanceTracingCustomSession() override; + + // ArcAppPerformanceTracingSession: + void Schedule() override; + ArcAppPerformanceTracingCustomSession* AsCustomSession() override; + + void StopAndAnalyze(ResultCallback callback); + + protected: + // ArcAppPerformanceTracingSession: + void OnTracingDone(double fps, + double commit_deviation, + double render_quality) override; + void OnTracingFailed() override; + + private: + ResultCallback callback_; + + DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingCustomSession); +}; + +} // namespace arc + +#endif // CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_CUSTOM_SESSION_H_
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc index 193c0a1..64aef3f 100644 --- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.cc
@@ -5,8 +5,6 @@ #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" #include "base/bind.h" -#include "base/metrics/histogram_functions.h" -#include "base/strings/stringprintf.h" #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" #include "components/exo/shell_surface_util.h" #include "components/exo/surface.h" @@ -17,15 +15,6 @@ namespace { -// Defines the delay to start tracing after ARC++ window gets activated. -// This is done to avoid likely redundant statistics collection during the app -// initialization/loading time. -constexpr base::TimeDelta kInitTracingDelay = base::TimeDelta::FromMinutes(1); - -// Defines the delay to start next session of capturing statistics for the same -// active app or in case the app was already reported. -constexpr base::TimeDelta kNextTracingDelay = base::TimeDelta::FromMinutes(20); - // Target FPS, all reference devices has 60 FPS. // TODO(khmel), detect this per device. constexpr uint64_t kTargetFps = 60; @@ -37,64 +26,47 @@ // any commit for |kIdleThresholdFrames| frames. constexpr uint64_t kIdleThresholdFrames = 10; -std::string GetHistogramName(const std::string& category, - const std::string& name) { - return base::StringPrintf("Arc.Runtime.Performance.%s.%s", name.c_str(), - category.c_str()); -} - -void ReportFPS(const std::string& category_name, double fps) { - DCHECK(!category_name.empty()); - DCHECK_GT(fps, 0); - base::UmaHistogramCounts100(GetHistogramName(category_name, "FPS"), - static_cast<int>(std::round(fps))); -} - -void ReportCommitError(const std::string& category_name, double error_mcs) { - DCHECK(!category_name.empty()); - DCHECK_GE(error_mcs, 0); - base::UmaHistogramCustomCounts( - GetHistogramName(category_name, "CommitDeviation"), - static_cast<int>(std::round(error_mcs)), 100 /* min */, 5000 /* max */, - 50 /* buckets */); -} - -void ReportQuality(const std::string& category_name, double quality) { - DCHECK(!category_name.empty()); - DCHECK_GT(quality, 0); - // Report quality from 0 to 100%. - const int sample = (int)(quality * 100.0); - base::UmaHistogramPercentage(GetHistogramName(category_name, "RenderQuality"), - sample); -} - } // namespace ArcAppPerformanceTracingSession::ArcAppPerformanceTracingSession( - ArcAppPerformanceTracing* owner, - aura::Window* window, - const std::string& category, - const base::TimeDelta& tracing_period) - : owner_(owner), - window_(window), - category_(category), - tracing_period_(tracing_period) {} + ArcAppPerformanceTracing* owner) + : owner_(owner), window_(owner->active_window()) { + DCHECK(owner_); + DCHECK(window_); +} ArcAppPerformanceTracingSession::~ArcAppPerformanceTracingSession() { // Discard any active tracing if any. Stop(); } -void ArcAppPerformanceTracingSession::Schedule() { +ArcAppPerformanceTracingCustomSession* +ArcAppPerformanceTracingSession::AsCustomSession() { + return nullptr; +} + +void ArcAppPerformanceTracingSession::ScheduleInternal( + bool detect_idles, + const base::TimeDelta& start_delay, + const base::TimeDelta& tracing_period) { DCHECK(!tracing_active_); DCHECK(!tracing_timer_.IsRunning()); - const base::TimeDelta delay = - owner_->WasReported(category_) ? kNextTracingDelay : kInitTracingDelay; - tracing_timer_.Start(FROM_HERE, delay, + detect_idles_ = detect_idles; + tracing_period_ = tracing_period; + if (start_delay.is_zero()) { + Start(); + return; + } + tracing_timer_.Start(FROM_HERE, start_delay, base::BindOnce(&ArcAppPerformanceTracingSession::Start, base::Unretained(this))); } +void ArcAppPerformanceTracingSession::StopAndAnalyzeInternal() { + DCHECK(tracing_active_); + Analyze(base::TimeTicks::Now() - tracing_start_); +} + void ArcAppPerformanceTracingSession::OnSurfaceDestroying( exo::Surface* surface) { Stop(); @@ -116,7 +88,7 @@ void ArcAppPerformanceTracingSession::Start() { DCHECK(!tracing_timer_.IsRunning()); - VLOG(1) << "Start tracing for the category " << category_ << "."; + VLOG(1) << "Start tracing."; frame_deltas_.clear(); last_commit_timestamp_ = base::Time(); @@ -126,9 +98,15 @@ surface->AddSurfaceObserver(this); // Schedule result analyzing at the end of tracing. - tracing_timer_.Start(FROM_HERE, tracing_period_, - base::BindOnce(&ArcAppPerformanceTracingSession::Analyze, - base::Unretained(this))); + tracing_start_ = base::TimeTicks::Now(); + if (!tracing_period_.is_zero()) { + // |tracing_period_| is passed to be able to correctly compare expectations + // in unit tests. + tracing_timer_.Start( + FROM_HERE, tracing_period_, + base::BindOnce(&ArcAppPerformanceTracingSession::Analyze, + base::Unretained(this), tracing_period_)); + } tracing_active_ = true; } @@ -153,33 +131,41 @@ const base::TimeDelta frame_delta = timestamp - last_commit_timestamp_; last_commit_timestamp_ = timestamp; - const uint64_t display_frames_passed = - (frame_delta + kTargetFrameTime / 2) / kTargetFrameTime; - if (display_frames_passed >= kIdleThresholdFrames) { - // Idle is detected, try the next time. - Stop(); - Schedule(); - return; + if (detect_idles_) { + const uint64_t display_frames_passed = + (frame_delta + kTargetFrameTime / 2) / kTargetFrameTime; + if (display_frames_passed >= kIdleThresholdFrames) { + // Idle is detected, try the next time. + Stop(); + OnTracingFailed(); + return; + } } + frame_deltas_.emplace_back(frame_delta); } -void ArcAppPerformanceTracingSession::Analyze() { +void ArcAppPerformanceTracingSession::Analyze(base::TimeDelta tracing_period) { // No more data is needed, stop active tracing. Stop(); - // Check last commit timestamp if we are in idle at this moment. - const base::TimeDelta last_frame_delta = - base::Time::Now() - last_commit_timestamp_; - if (last_frame_delta >= kTargetFrameTime * kIdleThresholdFrames) { - // Current idle state is detected, try next time. - Schedule(); + if (frame_deltas_.empty() || tracing_period <= base::TimeDelta()) { + OnTracingFailed(); return; } - VLOG(1) << "Analyze tracing for the category " << category_ << "."; + // Check last commit timestamp if we are in idle at this moment. + if (detect_idles_) { + const base::TimeDelta last_frame_delta = + base::Time::Now() - last_commit_timestamp_; + if (last_frame_delta >= kTargetFrameTime * kIdleThresholdFrames) { + // Current idle state is detected, try next time. + OnTracingFailed(); + return; + } + } - DCHECK(!frame_deltas_.empty()); + VLOG(1) << "Analyze tracing."; double vsync_error_deviation_accumulator = 0; for (const auto& frame_delta : frame_deltas_) { @@ -197,29 +183,20 @@ vsync_error_deviation_accumulator += (vsync_error.InMicrosecondsF() * vsync_error.InMicrosecondsF()); } - const double vsync_error = + const double commit_deviation = sqrt(vsync_error_deviation_accumulator / frame_deltas_.size()); std::sort(frame_deltas_.begin(), frame_deltas_.end()); // Get 10% and 90% indices. const size_t lower_position = frame_deltas_.size() / 10; const size_t upper_position = frame_deltas_.size() - 1 - lower_position; - const double quality = frame_deltas_[lower_position].InMicrosecondsF() / - frame_deltas_[upper_position].InMicrosecondsF(); + const double render_quality = + frame_deltas_[lower_position].InMicrosecondsF() / + frame_deltas_[upper_position].InMicrosecondsF(); - const double fps = frame_deltas_.size() / tracing_period_.InSecondsF(); - VLOG(1) << "Analyzing is done for " << category_ << " " - << " FPS: " << fps << ", quality: " << quality - << ", vsync_error: " << vsync_error; + const double fps = frame_deltas_.size() / tracing_period.InSecondsF(); - ReportFPS(category_, fps); - ReportCommitError(category_, vsync_error); - ReportQuality(category_, quality); - - owner_->SetReported(category_); - - // Reschedule the next tracing session. - Schedule(); + OnTracingDone(fps, commit_deviation, render_quality); } } // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h index 735d1da..14cabb5 100644 --- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h
@@ -5,6 +5,7 @@ #ifndef CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_SESSION_H_ #define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_SESSION_H_ +#include <memory> #include <string> #include <vector> @@ -24,32 +25,51 @@ namespace arc { class ArcAppPerformanceTracing; +class ArcAppPerformanceTracingCustomSession; // Implements Surface commit tracing for the target window. class ArcAppPerformanceTracingSession : public exo::SurfaceObserver { public: - ArcAppPerformanceTracingSession(ArcAppPerformanceTracing* owner, - aura::Window* window, - const std::string& category, - const base::TimeDelta& tracing_period); + explicit ArcAppPerformanceTracingSession(ArcAppPerformanceTracing* owner); ~ArcAppPerformanceTracingSession() override; - // Schedules tracing with a delay based on condition if tracing category was - // previously reported or not. Creator of |ArcAppPerformanceTracingSession| is - // responsible for the initial scheduling. This can internally re-scheduled - // during the life-cycle of the tracing session. - void Schedule(); + // Performs initial scheduling of tracing based on session type. + virtual void Schedule() = 0; + + // Casts this session to |ArcAppPerformanceTracingCustomSession|. + virtual ArcAppPerformanceTracingCustomSession* AsCustomSession(); // exo::SurfaceObserver: void OnSurfaceDestroying(exo::Surface* surface) override; void OnCommit(exo::Surface* surface) override; + // Fires tracing timeout for testing. void FireTimerForTesting(); + // Add one more sample for testing. void OnCommitForTesting(const base::Time& timestamp); bool tracing_active() const { return tracing_active_; } + ArcAppPerformanceTracing* owner() { return owner_; } + const ArcAppPerformanceTracing* owner() const { return owner_; } const aura::Window* window() const { return window_; } + protected: + // Called when tracing is done. + virtual void OnTracingDone(double fps, + double commit_deviation, + double render_quality) = 0; + virtual void OnTracingFailed() = 0; + + // Schedules tracing with a delay and for specific amount of time. If + // |tracing_period| is 0 then it means manual tracing and |StopAndAnalyze| + // should be called in order to get results. + void ScheduleInternal(bool detect_idles, + const base::TimeDelta& start_delay, + const base::TimeDelta& tracing_period); + + // Stops current tracing and analyzes results. + void StopAndAnalyzeInternal(); + private: // Starts tracing by observing commits to the |exo::Surface| attached to the // current |window_|. @@ -63,21 +83,25 @@ void HandleCommit(const base::Time& timestamp); // Stops current tracing, analyzes captured tracing results and schedules the - // next tracing for the current |window_|. - void Analyze(); + // next tracing for the current |window_|. |tracing_period| indicates the time + // spent for tracing. + void Analyze(base::TimeDelta tracing_period); - // Unowned pointer. + // Unowned pointers. ArcAppPerformanceTracing* const owner_; aura::Window* const window_; - // Current tracing category. - const std::string category_; - // Timer to start Surface commit tracing delayed. base::OneShotTimer tracing_timer_; - // Period for tracing sessions. - const base::TimeDelta tracing_period_; + // Start time of tracing. + base::TimeTicks tracing_start_; + + // Requested tracing period. + base::TimeDelta tracing_period_; + + // Set to true in case automatic idle detection is required. + bool detect_idles_ = false; // Timestamp of last commit event. base::Time last_commit_timestamp_;
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc new file mode 100644 index 0000000..804676b --- /dev/null +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc
@@ -0,0 +1,116 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h" + +#include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" +#include "chrome/browser/profiles/profile.h" +#include "components/exo/shell_surface_util.h" +#include "components/exo/surface.h" +#include "components/exo/wm_helper.h" +#include "components/exo/wm_helper_chromeos.h" +#include "ui/views/widget/widget.h" + +namespace arc { + +ArcAppPerformanceTracingTestHelper::ArcAppPerformanceTracingTestHelper() = + default; +ArcAppPerformanceTracingTestHelper::~ArcAppPerformanceTracingTestHelper() = + default; + +void ArcAppPerformanceTracingTestHelper::SetUp(Profile* profile) { + DCHECK(!profile_ && profile); + DCHECK(IsArcAllowedForProfile(profile)); + profile_ = profile; + wm_helper_ = std::make_unique<exo::WMHelperChromeOS>(); + exo::WMHelper::SetInstance(wm_helper_.get()); + // Make sure it is accessible in test. + if (!GetTracing()) { + ArcAppPerformanceTracing::GetForBrowserContextForTesting(profile_); + DCHECK(GetTracing()); + } +} + +void ArcAppPerformanceTracingTestHelper::TearDown() { + DCHECK(profile_); + exo::WMHelper::SetInstance(nullptr); + wm_helper_.reset(); + profile_ = nullptr; +} + +// static +views::Widget* ArcAppPerformanceTracingTestHelper::CreateArcWindow( + const std::string& window_app_id) { + views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); + params.bounds = gfx::Rect(5, 5, 20, 20); + params.context = nullptr; + views::Widget* widget = new views::Widget(); + widget->Init(std::move(params)); + // Set ARC id before showing the window to be recognized in + // ArcAppWindowLauncherController. + exo::SetShellApplicationId(widget->GetNativeWindow(), window_app_id); + exo::SetShellMainSurface(widget->GetNativeWindow(), new exo::Surface()); + widget->Show(); + widget->Activate(); + return widget; +} + +ArcAppPerformanceTracing* ArcAppPerformanceTracingTestHelper::GetTracing() { + DCHECK(profile_); + return ArcAppPerformanceTracing::GetForBrowserContext(profile_); +} + +ArcAppPerformanceTracingSession* +ArcAppPerformanceTracingTestHelper::GetTracingSession() { + return GetTracing()->session(); +} + +void ArcAppPerformanceTracingTestHelper::FireTimerForTesting() { + DCHECK(GetTracingSession()); + DCHECK(GetTracingSession()->tracing_active()); + GetTracingSession()->FireTimerForTesting(); +} + +void ArcAppPerformanceTracingTestHelper::PlaySequence( + const std::vector<base::TimeDelta>& deltas) { + DCHECK(GetTracingSession()); + DCHECK(GetTracingSession()->tracing_active()); + base::Time timestamp = base::Time::Now(); + GetTracingSession()->OnCommitForTesting(timestamp); + for (const base::TimeDelta& delta : deltas) { + timestamp += delta; + GetTracingSession()->OnCommitForTesting(timestamp); + } +} + +void ArcAppPerformanceTracingTestHelper::PlayDefaultSequence() { + const base::TimeDelta normal_interval = base::TimeDelta::FromSeconds(1) / 60; + const base::TimeDelta error1 = base::TimeDelta::FromMicroseconds(100); + const base::TimeDelta error2 = base::TimeDelta::FromMicroseconds(200); + const base::TimeDelta error3 = base::TimeDelta::FromMicroseconds(300); + const std::vector<base::TimeDelta> sequence = { + normal_interval + error1, + normal_interval + error2, + // One frame skip + normal_interval * 2 + error3, + normal_interval - error1, + normal_interval - error2, + // Two frames skip + normal_interval * 3 - error3, + normal_interval + error1, + normal_interval + error2, + normal_interval * 2 + error3, + normal_interval - error1, + normal_interval * 2 - error2, + normal_interval - error3, + normal_interval + error1, + normal_interval + error2, + normal_interval + error3, + }; + PlaySequence(sequence); +} + +} // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h new file mode 100644 index 0000000..4959c15b2 --- /dev/null +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h
@@ -0,0 +1,70 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_TEST_HELPER_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_TEST_HELPER_H_ + +#include <memory> +#include <string> +#include <vector> + +#include "base/macros.h" +#include "base/time/time.h" + +class Profile; + +namespace exo { +class WMHelper; +} + +namespace views { +class Widget; +} // namespace views. + +namespace arc { + +class ArcAppPerformanceTracing; +class ArcAppPerformanceTracingSession; + +// Helper class to share common functionality in browser and unit tests. +class ArcAppPerformanceTracingTestHelper { + public: + ArcAppPerformanceTracingTestHelper(); + virtual ~ArcAppPerformanceTracingTestHelper(); + + // Creates app window as ARC++ window. + static views::Widget* CreateArcWindow(const std::string& window_app_id); + + void SetUp(Profile* profile); + void TearDown(); + + // Helper that returns ArcAppPerformanceTracing as service. + ArcAppPerformanceTracing* GetTracing(); + + // Helper that returns active ArcAppPerformanceTracingSession. + ArcAppPerformanceTracingSession* GetTracingSession(); + + // Fires timer to finish statistics tracing or stop waiting for delayed start. + void FireTimerForTesting(); + + // Sends sequence of commits where each commit is delayed for specific delta + // from |deltas|. + void PlaySequence(const std::vector<base::TimeDelta>& deltas); + + // Plays default sequence that has FPS = 45, CommitDeviation = 216 and + // RenderQuality = 48% for target tracing period as 1/3 seconds. + void PlayDefaultSequence(); + + private: + // Unowned pointer. + Profile* profile_ = nullptr; + + std::unique_ptr<exo::WMHelper> wm_helper_; + + DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingTestHelper); +}; + +} // namespace arc + +#endif // CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_TEST_HELPER_H_
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.cc new file mode 100644 index 0000000..5200964 --- /dev/null +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.cc
@@ -0,0 +1,105 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h" + +#include "base/metrics/histogram_functions.h" +#include "base/strings/stringprintf.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" + +namespace arc { + +namespace { + +// Defines the delay to start tracing after ARC++ window gets activated. +// This is done to avoid likely redundant statistics collection during the app +// initialization/loading time. +constexpr base::TimeDelta kInitTracingDelay = base::TimeDelta::FromMinutes(1); + +// Defines the delay to start next session of capturing statistics for the same +// active app or in case the app was already reported. +constexpr base::TimeDelta kNextTracingDelay = base::TimeDelta::FromMinutes(20); + +// Defines the period to capture tracing results. Can be overwritten for +// testing. +base::TimeDelta tracing_period = base::TimeDelta::FromSeconds(15); + +std::string GetHistogramName(const std::string& category, + const std::string& name) { + return base::StringPrintf("Arc.Runtime.Performance.%s.%s", name.c_str(), + category.c_str()); +} + +void ReportFPS(const std::string& category_name, double fps) { + DCHECK(!category_name.empty()); + DCHECK_GT(fps, 0); + base::UmaHistogramCounts100(GetHistogramName(category_name, "FPS"), + static_cast<int>(std::round(fps))); +} + +void ReportCommitDeviation(const std::string& category_name, double error_mcs) { + DCHECK(!category_name.empty()); + DCHECK_GE(error_mcs, 0); + base::UmaHistogramCustomCounts( + GetHistogramName(category_name, "CommitDeviation"), + static_cast<int>(std::round(error_mcs)), 100 /* min */, 5000 /* max */, + 50 /* buckets */); +} + +void ReportQuality(const std::string& category_name, double quality) { + DCHECK(!category_name.empty()); + DCHECK_GT(quality, 0); + // Report quality from 0 to 100%. + const int sample = (int)(quality * 100.0); + base::UmaHistogramPercentage(GetHistogramName(category_name, "RenderQuality"), + sample); +} + +} // namespace + +ArcAppPerformanceTracingUmaSession::ArcAppPerformanceTracingUmaSession( + ArcAppPerformanceTracing* owner, + const std::string& category) + : ArcAppPerformanceTracingSession(owner), category_(category) {} + +ArcAppPerformanceTracingUmaSession::~ArcAppPerformanceTracingUmaSession() = + default; + +// static +void ArcAppPerformanceTracingUmaSession::SetTracingPeriodForTesting( + const base::TimeDelta& period) { + tracing_period = period; +} + +void ArcAppPerformanceTracingUmaSession::Schedule() { + ScheduleInternal(true /* detect_idles */, GetStartDelay(), tracing_period); +} + +void ArcAppPerformanceTracingUmaSession::OnTracingDone(double fps, + double commit_deviation, + double render_quality) { + VLOG(1) << "Analyzing is done for " << category_ << " " + << " FPS: " << fps << ", quality: " << render_quality + << ", commit_deviation: " << commit_deviation; + + ReportFPS(category_, fps); + ReportCommitDeviation(category_, commit_deviation); + ReportQuality(category_, render_quality); + + // Report category is processed. + owner()->SetReported(category_); + Schedule(); +} + +void ArcAppPerformanceTracingUmaSession::OnTracingFailed() { + // It valid case, just reschedule. + Schedule(); +} + +base::TimeDelta ArcAppPerformanceTracingUmaSession::GetStartDelay() const { + return owner()->WasReported(category_) ? kNextTracingDelay + : kInitTracingDelay; +} + +} // namespace arc
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h new file mode 100644 index 0000000..d3e1f293 --- /dev/null +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h
@@ -0,0 +1,52 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_UMA_SESSION_H_ +#define CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_UMA_SESSION_H_ + +#include <string> + +#include "base/macros.h" +#include "base/time/time.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" + +namespace arc { + +class ArcAppPerformanceTracing; + +// Handles tracing of an app of known category. Tracing is done periodically +// during the all time of app is active. Tracing results are published in UMA. +class ArcAppPerformanceTracingUmaSession + : public ArcAppPerformanceTracingSession { + public: + ArcAppPerformanceTracingUmaSession(ArcAppPerformanceTracing* owner, + const std::string& category); + ~ArcAppPerformanceTracingUmaSession() override; + + static void SetTracingPeriodForTesting(const base::TimeDelta& period); + + // ArcAppPerformanceTracingSession: + void Schedule() override; + + protected: + // ArcAppPerformanceTracingSession: + void OnTracingDone(double fps, + double commit_deviation, + double render_quality) override; + void OnTracingFailed() override; + + private: + // Determines the tracing start delay. If we already reported this category, + // start delay will be increased. + base::TimeDelta GetStartDelay() const; + + // Tracing category. + const std::string category_; + + DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingUmaSession); +}; + +} // namespace arc + +#endif // CHROME_BROWSER_CHROMEOS_ARC_TRACING_ARC_APP_PERFORMANCE_TRACING_UMA_SESSION_H_
diff --git a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc index 9926dc826..d89316f 100644 --- a/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc +++ b/chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_unittest.cc
@@ -3,22 +3,18 @@ // found in the LICENSE file. #include <memory> -#include <vector> #include "base/metrics/histogram_samples.h" #include "base/metrics/statistics_recorder.h" #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" #include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_uma_session.h" #include "chrome/browser/ui/app_list/arc/arc_app_test.h" #include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/test/base/testing_profile.h" -#include "components/exo/shell_surface_util.h" -#include "components/exo/surface.h" -#include "components/exo/wm_helper.h" -#include "components/exo/wm_helper_chromeos.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/views/widget/widget.h" -#include "ui/wm/public/activation_change_observer.h" namespace arc { @@ -29,26 +25,11 @@ constexpr char kFocusCategory[] = "OnlineGame"; constexpr char kNonFocusAppPackage[] = "nonfocus.app.package"; constexpr char kNonFocusAppActivity[] = "nonfocus.app.package.Activity"; + // For 20 frames. constexpr base::TimeDelta kTestPeriod = base::TimeDelta::FromSeconds(1) / (60 / 20); -// Creates app window as ARC++ window. -views::Widget* CreateArcWindow(const std::string& window_app_id) { - views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); - params.bounds = gfx::Rect(5, 5, 20, 20); - params.context = nullptr; - views::Widget* widget = new views::Widget(); - widget->Init(std::move(params)); - // Set ARC id before showing the window to be recognized in - // ArcAppWindowLauncherController. - exo::SetShellApplicationId(widget->GetNativeWindow(), window_app_id); - exo::SetShellMainSurface(widget->GetNativeWindow(), new exo::Surface()); - widget->Show(); - widget->Activate(); - return widget; -} - // Creates name of histogram with required statistics. std::string GetFocusStatisticName(const std::string& name) { return base::StringPrintf("Arc.Runtime.Performance.%s.%s", name.c_str(), @@ -80,180 +61,147 @@ // testing::Test: void SetUp() override { BrowserWithTestWindowTest::SetUp(); - wm_helper_ = std::make_unique<exo::WMHelperChromeOS>(); - exo::WMHelper::SetInstance(wm_helper_.get()); arc_test_.SetUp(profile()); + tracing_helper_.SetUp(profile()); ArcAppPerformanceTracing::SetFocusAppForTesting( kFocusAppPackage, kFocusAppActivity, kFocusCategory); - performance_tracing_ = std::make_unique<ArcAppPerformanceTracing>( - profile(), nullptr /* bridge, unused */); - - performance_tracing_->SetTracingPeriodForTesting(kTestPeriod); + ArcAppPerformanceTracingUmaSession::SetTracingPeriodForTesting(kTestPeriod); } void TearDown() override { - performance_tracing_->Shutdown(); - performance_tracing_.reset(); + tracing_helper_.TearDown(); arc_test_.TearDown(); - exo::WMHelper::SetInstance(nullptr); - wm_helper_.reset(); BrowserWithTestWindowTest::TearDown(); } protected: // Ensures that tracing is active. - void StartArcFocusAppTracing() { - views::Widget* const arc_widget = CreateArcWindow("org.chromium.arc.1"); + views::Widget* StartArcFocusAppTracing() { + views::Widget* const arc_widget = + ArcAppPerformanceTracingTestHelper::CreateArcWindow( + "org.chromium.arc.1"); DCHECK(arc_widget && arc_widget->GetNativeWindow()); - performance_tracing().OnWindowActivated( + tracing_helper().GetTracing()->OnWindowActivated( wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT, arc_widget->GetNativeWindow(), arc_widget->GetNativeWindow()); - performance_tracing().OnTaskCreated(1 /* task_Id */, kFocusAppPackage, - kFocusAppActivity, - std::string() /* intent */); - DCHECK(performance_tracing().session()); - DCHECK(!performance_tracing().session()->tracing_active()); - performance_tracing().session()->FireTimerForTesting(); - DCHECK(performance_tracing().session()); - DCHECK(performance_tracing().session()->tracing_active()); + tracing_helper().GetTracing()->OnTaskCreated( + 1 /* task_Id */, kFocusAppPackage, kFocusAppActivity, + std::string() /* intent */); + DCHECK(tracing_helper().GetTracingSession()); + tracing_helper().GetTracingSession()->FireTimerForTesting(); + DCHECK(tracing_helper().GetTracingSession()); + DCHECK(tracing_helper().GetTracingSession()->tracing_active()); + return arc_widget; } - // Sends sequence of commits where each commit is delayed for specific delta - // from |deltas|. - void PlaySequence(const std::vector<base::TimeDelta>& deltas) { - DCHECK(performance_tracing().session()); - DCHECK(performance_tracing().session()->tracing_active()); - base::Time timestamp = base::Time::Now(); - performance_tracing().session()->OnCommitForTesting(timestamp); - for (const base::TimeDelta& delta : deltas) { - timestamp += delta; - performance_tracing().session()->OnCommitForTesting(timestamp); - } - // Fire timer at the end to finish statistics tracing. - performance_tracing().session()->FireTimerForTesting(); - } - - ArcAppPerformanceTracing& performance_tracing() { - return *performance_tracing_; + ArcAppPerformanceTracingTestHelper& tracing_helper() { + return tracing_helper_; } private: + ArcAppPerformanceTracingTestHelper tracing_helper_; ArcAppTest arc_test_; - std::unique_ptr<exo::WMHelper> wm_helper_; - std::unique_ptr<ArcAppPerformanceTracing> performance_tracing_; DISALLOW_COPY_AND_ASSIGN(ArcAppPerformanceTracingTest); }; TEST_F(ArcAppPerformanceTracingTest, TracingScheduled) { // By default it is inactive. - EXPECT_FALSE(performance_tracing().session()); + EXPECT_FALSE(tracing_helper().GetTracingSession()); // Report task first. - performance_tracing().OnTaskCreated(1 /* task_Id */, kFocusAppPackage, - kFocusAppActivity, - std::string() /* intent */); - EXPECT_FALSE(performance_tracing().session()); + tracing_helper().GetTracing()->OnTaskCreated( + 1 /* task_Id */, kFocusAppPackage, kFocusAppActivity, + std::string() /* intent */); + EXPECT_FALSE(tracing_helper().GetTracingSession()); // Create window second. - views::Widget* const arc_widget1 = CreateArcWindow("org.chromium.arc.1"); + views::Widget* const arc_widget1 = + ArcAppPerformanceTracingTestHelper::CreateArcWindow("org.chromium.arc.1"); ASSERT_TRUE(arc_widget1); ASSERT_TRUE(arc_widget1->GetNativeWindow()); - performance_tracing().OnWindowActivated( + tracing_helper().GetTracing()->OnWindowActivated( wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT, arc_widget1->GetNativeWindow(), nullptr /* lost_active */); - ASSERT_TRUE(performance_tracing().session()); - EXPECT_FALSE(performance_tracing().session()->tracing_active()); + ASSERT_TRUE(tracing_helper().GetTracingSession()); + // Scheduled but not started. + EXPECT_FALSE(tracing_helper().GetTracingSession()->tracing_active()); // Test reverse order, create window first. - views::Widget* const arc_widget2 = CreateArcWindow("org.chromium.arc.2"); + views::Widget* const arc_widget2 = + ArcAppPerformanceTracingTestHelper::CreateArcWindow("org.chromium.arc.2"); ASSERT_TRUE(arc_widget2); ASSERT_TRUE(arc_widget2->GetNativeWindow()); - performance_tracing().OnWindowActivated( + tracing_helper().GetTracing()->OnWindowActivated( wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT, arc_widget2->GetNativeWindow(), arc_widget2->GetNativeWindow()); // Task is not yet created, this also resets previous tracing. - EXPECT_FALSE(performance_tracing().session()); + EXPECT_FALSE(tracing_helper().GetTracingSession()); // Report task second. - performance_tracing().OnTaskCreated(2 /* task_Id */, kFocusAppPackage, - kFocusAppActivity, - std::string() /* intent */); - ASSERT_TRUE(performance_tracing().session()); - EXPECT_FALSE(performance_tracing().session()->tracing_active()); + tracing_helper().GetTracing()->OnTaskCreated( + 2 /* task_Id */, kFocusAppPackage, kFocusAppActivity, + std::string() /* intent */); + ASSERT_TRUE(tracing_helper().GetTracingSession()); + // Scheduled but not started. + EXPECT_FALSE(tracing_helper().GetTracingSession()->tracing_active()); + arc_widget1->Close(); + arc_widget2->Close(); } TEST_F(ArcAppPerformanceTracingTest, TracingNotScheduledForNonFocusApp) { - views::Widget* const arc_widget = CreateArcWindow("org.chromium.arc.1"); + views::Widget* const arc_widget = + ArcAppPerformanceTracingTestHelper::CreateArcWindow("org.chromium.arc.1"); ASSERT_TRUE(arc_widget); ASSERT_TRUE(arc_widget->GetNativeWindow()); - performance_tracing().OnWindowActivated( + tracing_helper().GetTracing()->OnWindowActivated( wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT, arc_widget->GetNativeWindow(), arc_widget->GetNativeWindow()); - EXPECT_FALSE(performance_tracing().session()); - performance_tracing().OnTaskCreated(1 /* task_Id */, kNonFocusAppPackage, - kNonFocusAppActivity, - std::string() /* intent */); - EXPECT_FALSE(performance_tracing().session()); + EXPECT_FALSE(tracing_helper().GetTracingSession()); + tracing_helper().GetTracing()->OnTaskCreated( + 1 /* task_Id */, kNonFocusAppPackage, kNonFocusAppActivity, + std::string() /* intent */); + EXPECT_FALSE(tracing_helper().GetTracingSession()); + arc_widget->Close(); } TEST_F(ArcAppPerformanceTracingTest, TracingStoppedOnIdle) { - StartArcFocusAppTracing(); + views::Widget* const arc_widget = StartArcFocusAppTracing(); const base::TimeDelta normal_interval = base::TimeDelta::FromSeconds(1) / 60; base::Time timestamp = base::Time::Now(); - performance_tracing().session()->OnCommitForTesting(timestamp); + tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp); // Expected updates; timestamp += normal_interval; - performance_tracing().session()->OnCommitForTesting(timestamp); - ASSERT_TRUE(performance_tracing().session()); - EXPECT_TRUE(performance_tracing().session()->tracing_active()); + tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp); + ASSERT_TRUE(tracing_helper().GetTracingSession()); + EXPECT_TRUE(tracing_helper().GetTracingSession()->tracing_active()); timestamp += normal_interval * 5; - performance_tracing().session()->OnCommitForTesting(timestamp); - ASSERT_TRUE(performance_tracing().session()); - EXPECT_TRUE(performance_tracing().session()->tracing_active()); + tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp); + ASSERT_TRUE(tracing_helper().GetTracingSession()); + EXPECT_TRUE(tracing_helper().GetTracingSession()->tracing_active()); // Too long update. timestamp += normal_interval * 10; - performance_tracing().session()->OnCommitForTesting(timestamp); + tracing_helper().GetTracingSession()->OnCommitForTesting(timestamp); // Tracing is rescheduled and no longer active. - ASSERT_TRUE(performance_tracing().session()); - EXPECT_FALSE(performance_tracing().session()->tracing_active()); + ASSERT_TRUE(tracing_helper().GetTracingSession()); + EXPECT_FALSE(tracing_helper().GetTracingSession()->tracing_active()); + arc_widget->Close(); } TEST_F(ArcAppPerformanceTracingTest, StatisticsReported) { - StartArcFocusAppTracing(); - const base::TimeDelta normal_interval = base::TimeDelta::FromSeconds(1) / 60; - const base::TimeDelta error1 = base::TimeDelta::FromMicroseconds(100); - const base::TimeDelta error2 = base::TimeDelta::FromMicroseconds(200); - const base::TimeDelta error3 = base::TimeDelta::FromMicroseconds(300); - const std::vector<base::TimeDelta> sequence = { - normal_interval + error1, - normal_interval + error2, - // One frame skip - normal_interval * 2 + error3, - normal_interval - error1, - normal_interval - error2, - // Two frames skip - normal_interval * 3 - error3, - normal_interval + error1, - normal_interval + error2, - normal_interval * 2 + error3, - normal_interval - error1, - normal_interval * 2 - error2, - normal_interval - error3, - normal_interval + error1, - normal_interval + error2, - normal_interval + error3, - }; - EXPECT_FALSE(performance_tracing().WasReported(kFocusCategory)); - PlaySequence(sequence); - EXPECT_TRUE(performance_tracing().WasReported(kFocusCategory)); + views::Widget* const arc_widget = StartArcFocusAppTracing(); + EXPECT_FALSE(tracing_helper().GetTracing()->WasReported(kFocusCategory)); + tracing_helper().PlayDefaultSequence(); + tracing_helper().FireTimerForTesting(); + EXPECT_TRUE(tracing_helper().GetTracing()->WasReported(kFocusCategory)); EXPECT_EQ(45L, ReadFocusStatistics("FPS")); EXPECT_EQ(216L, ReadFocusStatistics("CommitDeviation")); EXPECT_EQ(48L, ReadFocusStatistics("RenderQuality")); + arc_widget->Close(); } } // namespace arc
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc index fe06e06..79eac27e 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.cc
@@ -43,6 +43,8 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/session/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" #include "chrome/browser/chromeos/assistant/assistant_util.h" #include "chrome/browser/chromeos/crostini/crostini_export_import.h" #include "chrome/browser/chromeos/crostini/crostini_installer.h" @@ -2488,6 +2490,67 @@ } /////////////////////////////////////////////////////////////////////////////// +// AutotestPrivateArcAppTracingStartFunction +/////////////////////////////////////////////////////////////////////////////// + +AutotestPrivateArcAppTracingStartFunction:: + AutotestPrivateArcAppTracingStartFunction() = default; +AutotestPrivateArcAppTracingStartFunction:: + ~AutotestPrivateArcAppTracingStartFunction() = default; + +ExtensionFunction::ResponseAction +AutotestPrivateArcAppTracingStartFunction::Run() { + DVLOG(1) << "AutotestPrivateArcAppTracingStartFunction"; + + arc::ArcAppPerformanceTracing* const tracing = + arc::ArcAppPerformanceTracing::GetForBrowserContext(browser_context()); + if (!tracing) + return RespondNow(Error("No ARC performance tracing is available.")); + + if (!tracing->StartCustomTracing()) + return RespondNow(Error("Failed to start custom tracing.")); + + return RespondNow(NoArguments()); +} + +/////////////////////////////////////////////////////////////////////////////// +// AutotestPrivateArcAppTracingStopAndAnalyzeFunction +/////////////////////////////////////////////////////////////////////////////// + +AutotestPrivateArcAppTracingStopAndAnalyzeFunction:: + AutotestPrivateArcAppTracingStopAndAnalyzeFunction() = default; +AutotestPrivateArcAppTracingStopAndAnalyzeFunction:: + ~AutotestPrivateArcAppTracingStopAndAnalyzeFunction() = default; + +ExtensionFunction::ResponseAction +AutotestPrivateArcAppTracingStopAndAnalyzeFunction::Run() { + DVLOG(1) << "AutotestPrivateArcAppTracingStopAndAnalyzeFunction"; + + arc::ArcAppPerformanceTracing* const tracing = + arc::ArcAppPerformanceTracing::GetForBrowserContext(browser_context()); + if (!tracing) + return RespondNow(Error("No ARC performance tracing is available.")); + + tracing->StopCustomTracing(base::BindOnce( + &AutotestPrivateArcAppTracingStopAndAnalyzeFunction::OnTracingResult, + this)); + return did_respond() ? AlreadyResponded() : RespondLater(); +} + +void AutotestPrivateArcAppTracingStopAndAnalyzeFunction::OnTracingResult( + bool success, + double fps, + double commit_deviation, + double render_quality) { + auto result = std::make_unique<base::Value>(base::Value::Type::DICTIONARY); + result->SetBoolKey("success", success); + result->SetDoubleKey("fps", fps); + result->SetDoubleKey("commitDeviation", commit_deviation); + result->SetDoubleKey("renderQuality", render_quality); + Respond(OneArgument(std::move(result))); +} + +/////////////////////////////////////////////////////////////////////////////// // AutotestPrivateSetArcAppWindowStateFunction ///////////////////////////////////////////////////////////////////////////////
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h index a4fbdbf..bb402d8d 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h
@@ -829,6 +829,38 @@ ResponseAction Run() override; }; +// Starts ARC app performance tracing for the current ARC app window. +class AutotestPrivateArcAppTracingStartFunction : public ExtensionFunction { + public: + AutotestPrivateArcAppTracingStartFunction(); + DECLARE_EXTENSION_FUNCTION("autotestPrivate.arcAppTracingStart", + AUTOTESTPRIVATE_ARCAPPTRACINGSTART) + + private: + ~AutotestPrivateArcAppTracingStartFunction() override; + ResponseAction Run() override; +}; + +// Stops active ARC app performance tracing if it was active and analyzes +// results. Result is returned to the previously registered callback for +// traceActiveArcAppStart. +class AutotestPrivateArcAppTracingStopAndAnalyzeFunction + : public ExtensionFunction { + public: + AutotestPrivateArcAppTracingStopAndAnalyzeFunction(); + DECLARE_EXTENSION_FUNCTION("autotestPrivate.arcAppTracingStopAndAnalyze", + AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE) + + private: + ~AutotestPrivateArcAppTracingStopAndAnalyzeFunction() override; + ResponseAction Run() override; + + void OnTracingResult(bool success, + double fps, + double commit_deviation, + double render_quality); +}; + class AutotestPrivateSwapWindowsInSplitViewFunction : public ExtensionFunction { public: AutotestPrivateSwapWindowsInSplitViewFunction();
diff --git a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc index 3ac9eb4..741e3e8 100644 --- a/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc +++ b/chrome/browser/chromeos/extensions/autotest_private/autotest_private_apitest.cc
@@ -2,11 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/callback_forward.h" #include "base/macros.h" - #include "build/build_config.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/session/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_session.h" +#include "chrome/browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h" #include "chrome/browser/chromeos/extensions/autotest_private/autotest_private_api.h" #include "chrome/browser/extensions/extension_apitest.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" @@ -25,6 +28,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_utils.h" +#include "ui/views/widget/widget.h" using testing::_; using testing::Return; @@ -47,26 +51,25 @@ arc::ArcSessionManager::SetUiEnabledForTesting(false); } + void SetUpOnMainThread() override { + ExtensionApiTest::SetUpOnMainThread(); + // Turn on testing mode so we don't kill the browser. + AutotestPrivateAPI::GetFactoryInstance() + ->Get(browser()->profile()) + ->set_test_mode(true); + } + private: DISALLOW_COPY_AND_ASSIGN(AutotestPrivateApiTest); }; IN_PROC_BROWSER_TEST_F(AutotestPrivateApiTest, AutotestPrivate) { - // Turn on testing mode so we don't kill the browser. - AutotestPrivateAPI::GetFactoryInstance() - ->Get(browser()->profile()) - ->set_test_mode(true); ASSERT_TRUE(RunComponentExtensionTestWithArg("autotest_private", "default")) << message_; } // Set of tests where ARC is enabled and test apps and packages are registered. IN_PROC_BROWSER_TEST_F(AutotestPrivateApiTest, AutotestPrivateArcEnabled) { - // Turn on testing mode so we don't kill the browser. - AutotestPrivateAPI::GetFactoryInstance() - ->Get(browser()->profile()) - ->set_test_mode(true); - ArcAppListPrefs* const prefs = ArcAppListPrefs::Get(browser()->profile()); ASSERT_TRUE(prefs); @@ -104,7 +107,7 @@ arc::SetArcPlayStoreEnabledForProfile(profile(), false); } -class AutotestPrivateWithPolicyApiTest : public extensions::ExtensionApiTest { +class AutotestPrivateWithPolicyApiTest : public AutotestPrivateApiTest { public: AutotestPrivateWithPolicyApiTest() {} @@ -112,11 +115,11 @@ EXPECT_CALL(provider_, IsInitializationComplete(_)) .WillRepeatedly(Return(true)); policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); - ExtensionApiTest::SetUpInProcessBrowserTestFixture(); + AutotestPrivateApiTest::SetUpInProcessBrowserTestFixture(); } void SetUpOnMainThread() override { - ExtensionApiTest::SetUpOnMainThread(); + AutotestPrivateApiTest::SetUpOnMainThread(); // Set a fake policy policy::PolicyMap policy; policy.Set(policy::key::kAllowDinosaurEasterEgg, @@ -129,17 +132,66 @@ protected: policy::MockConfigurationPolicyProvider provider_; + + private: + DISALLOW_COPY_AND_ASSIGN(AutotestPrivateWithPolicyApiTest); }; // GetAllEnterprisePolicies Sanity check. IN_PROC_BROWSER_TEST_F(AutotestPrivateWithPolicyApiTest, PolicyAPITest) { - // Turn on testing mode so we don't kill the browser. - AutotestPrivateAPI::GetFactoryInstance() - ->Get(browser()->profile()) - ->set_test_mode(true); ASSERT_TRUE(RunComponentExtensionTestWithArg("autotest_private", "enterprisePolicies")) << message_; } +class AutotestPrivateArcPerformanceTracing : public AutotestPrivateApiTest { + public: + AutotestPrivateArcPerformanceTracing() = default; + ~AutotestPrivateArcPerformanceTracing() override = default; + + protected: + // AutotestPrivateApiTest: + void SetUpOnMainThread() override { + AutotestPrivateApiTest::SetUpOnMainThread(); + tracing_helper_.SetUp(profile()); + performance_tracing()->SetCustomSessionReadyCallbackForTesting( + base::BindRepeating( + &arc::ArcAppPerformanceTracingTestHelper::PlayDefaultSequence, + base::Unretained(&tracing_helper()))); + } + + void TearDownOnMainThread() override { + performance_tracing()->SetCustomSessionReadyCallbackForTesting( + arc::ArcAppPerformanceTracing::CustomSessionReadyCallback()); + tracing_helper_.TearDown(); + AutotestPrivateApiTest::TearDownOnMainThread(); + } + + arc::ArcAppPerformanceTracingTestHelper& tracing_helper() { + return tracing_helper_; + } + + arc::ArcAppPerformanceTracing* performance_tracing() { + return tracing_helper_.GetTracing(); + } + + private: + arc::ArcAppPerformanceTracingTestHelper tracing_helper_; + + DISALLOW_COPY_AND_ASSIGN(AutotestPrivateArcPerformanceTracing); +}; + +IN_PROC_BROWSER_TEST_F(AutotestPrivateArcPerformanceTracing, Basic) { + views::Widget* const arc_widget = + arc::ArcAppPerformanceTracingTestHelper::CreateArcWindow( + "org.chromium.arc.1"); + performance_tracing()->OnWindowActivated( + wm::ActivationChangeObserver::ActivationReason::ACTIVATION_CLIENT, + arc_widget->GetNativeWindow(), arc_widget->GetNativeWindow()); + + ASSERT_TRUE(RunComponentExtensionTestWithArg("autotest_private", + "arcPerformanceTracing")) + << message_; +} + } // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc index 814a169..243ed5a 100644 --- a/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc +++ b/chrome/browser/chromeos/extensions/login_screen/login/login_apitest.cc
@@ -69,7 +69,8 @@ DISALLOW_COPY_AND_ASSIGN(LoginApitest); }; -IN_PROC_BROWSER_TEST_F(LoginApitest, LaunchManagedGuestSession) { +// Flaky. https://crbug.com/1014239 +IN_PROC_BROWSER_TEST_F(LoginApitest, DISABLED_LaunchManagedGuestSession) { SetUpDeviceLocalAccountPolicy(); SetUpExtensionAndRunTest(kLaunchManagedGuestSession); EXPECT_TRUE(session_manager::SessionManager::Get()->IsSessionStarted());
diff --git a/chrome/browser/chromeos/login/reset_browsertest.cc b/chrome/browser/chromeos/login/reset_browsertest.cc index 3aab402..2724017 100644 --- a/chrome/browser/chromeos/login/reset_browsertest.cc +++ b/chrome/browser/chromeos/login/reset_browsertest.cc
@@ -98,8 +98,8 @@ private: bool signal_emitted_ = false; - ScopedObserver<SessionManagerClient, LoginPromptVisibleObserver> observer_{ - this}; + ScopedObserver<SessionManagerClient, SessionManagerClient::Observer> + observer_{this}; DISALLOW_COPY_AND_ASSIGN(LoginPromptVisibleObserver); };
diff --git a/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc index 70a5461..ce9d95b 100644 --- a/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc +++ b/chrome/browser/chromeos/login/screens/hid_detection_screen_browsertest.cc
@@ -159,7 +159,9 @@ // Test that if there is no Bluetooth device connected on HID screen, the // Bluetooth adapter should be disabled after advancing to the next screen. -IN_PROC_BROWSER_TEST_F(HIDDetectionScreenTest, NoBluetoothDeviceConnected) { +// Flaky. https://crbug.com/1010866 +IN_PROC_BROWSER_TEST_F(HIDDetectionScreenTest, + DISABLED_NoBluetoothDeviceConnected) { OobeScreenWaiter(HIDDetectionView::kScreenId).Wait(); EXPECT_TRUE(adapter()->IsPowered());
diff --git a/chrome/browser/extensions/lazy_background_page_apitest.cc b/chrome/browser/extensions/lazy_background_page_apitest.cc index 1e15444..9807ed3b 100644 --- a/chrome/browser/extensions/lazy_background_page_apitest.cc +++ b/chrome/browser/extensions/lazy_background_page_apitest.cc
@@ -301,9 +301,10 @@ EXPECT_FALSE(IsBackgroundPageAlive(last_loaded_extension_id())); } +// Flaky. https://crbug.com/1006634 // Tests that the lazy background page stays alive until all network requests // are complete. -IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, WaitForRequest) { +IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, DISABLED_WaitForRequest) { ASSERT_TRUE(StartEmbeddedTestServer()); LazyBackgroundObserver page_complete;
diff --git a/chrome/browser/extensions/service_worker_apitest.cc b/chrome/browser/extensions/service_worker_apitest.cc index 8e9b385..376c3839 100644 --- a/chrome/browser/extensions/service_worker_apitest.cc +++ b/chrome/browser/extensions/service_worker_apitest.cc
@@ -1519,8 +1519,9 @@ EXPECT_TRUE(sync_listener.WaitUntilSatisfied()); } -IN_PROC_BROWSER_TEST_F(ServiceWorkerTest, - FetchFromContentScriptShouldNotGoToServiceWorkerOfPage) { +IN_PROC_BROWSER_TEST_F( + ServiceWorkerTest, + DISABLED_FetchFromContentScriptShouldNotGoToServiceWorkerOfPage) { ASSERT_TRUE(StartEmbeddedTestServer()); GURL page_url = embedded_test_server()->GetURL( "/extensions/api_test/service_worker/content_script_fetch/"
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 80bf058..e572941 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -44,6 +44,11 @@ "expiry_milestone": 81 }, { + "name": "aggregated-ml-search-ranking", + "owners": [ "thanhdng", "jiameng" ], + "expiry_milestone": 82 + }, + { "name": "allow-disable-mouse-acceleration", "owners": [ "zentaro" ], "expiry_milestone": 82 @@ -1967,8 +1972,8 @@ }, { "name": "enable-webrtc-hide-local-ips-with-mdns", - "owners": [ "qingsi", "jeroendb" ], - "expiry_milestone": 78 + "owners": [ "qingsi" ], + "expiry_milestone": 81 }, { "name": "enable-webrtc-hw-h264-encoding",
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index 0845ce6..2e8adc4 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -3124,6 +3124,11 @@ const char kAggregatedMlAppRankingDescription[] = "Use the aggregated ML model to rank the suggested apps."; +const char kAggregatedMlSearchRankingName[] = "Rank search results with ML."; +const char kAggregatedMlSearchRankingDescription[] = + "Use the aggregated ML model to rank the non-app search results for " + "non-empty queries."; + const char kAllowDisableMouseAccelerationName[] = "Allow disabling mouse acceleration"; const char kAllowDisableMouseAccelerationDescription[] = @@ -3687,7 +3692,9 @@ "Enable or disable decode acceleration of WebP images using the VA-API."; const char kVirtualKeyboardName[] = "Virtual Keyboard"; -const char kVirtualKeyboardDescription[] = "Enable virtual keyboard support."; +const char kVirtualKeyboardDescription[] = + "Always show virtual keyboard regardless of having a physical keyboard " + "present"; const char kWakeOnPacketsName[] = "Wake On Packets"; const char kWakeOnPacketsDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index 2712a97..5926a9d 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -1845,6 +1845,9 @@ extern const char kAggregatedMlAppRankingName[]; extern const char kAggregatedMlAppRankingDescription[]; +extern const char kAggregatedMlSearchRankingName[]; +extern const char kAggregatedMlSearchRankingDescription[]; + extern const char kAllowDisableMouseAccelerationName[]; extern const char kAllowDisableMouseAccelerationDescription[];
diff --git a/chrome/browser/media/media_engagement_browsertest.cc b/chrome/browser/media/media_engagement_browsertest.cc index d8aa265..78867d9f6 100644 --- a/chrome/browser/media/media_engagement_browsertest.cc +++ b/chrome/browser/media/media_engagement_browsertest.cc
@@ -11,6 +11,7 @@ #include "base/test/test_mock_time_task_runner.h" #include "base/time/time.h" #include "base/timer/timer.h" +#include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/component_updater/mei_preload_component_installer.h" #include "chrome/browser/media/media_engagement_contents_observer.h" @@ -477,8 +478,16 @@ ExpectScores(1, 0, 1, 0); } +#if defined(OS_WIN) || defined(OS_LINUX) +// Flaky timeout. https://crbug.com/1014229 +#define MAYBE_RecordSingleVisitOnSameOrigin \ + DISABLED_RecordSingleVisitOnSameOrigin +#else +#define MAYBE_RecordSingleVisitOnSameOrigin RecordSingleVisitOnSameOrigin +#endif + IN_PROC_BROWSER_TEST_F(MediaEngagementBrowserTest, - RecordSingleVisitOnSameOrigin) { + MAYBE_RecordSingleVisitOnSameOrigin) { LoadTestPageAndWaitForPlayAndAudible("engagement_test_small_frame_size.html", false); AdvanceMeaningfulPlaybackTime();
diff --git a/chrome/browser/metrics/renderer_uptime_tracker.cc b/chrome/browser/metrics/renderer_uptime_tracker.cc index e77aa48..3820de6 100644 --- a/chrome/browser/metrics/renderer_uptime_tracker.cc +++ b/chrome/browser/metrics/renderer_uptime_tracker.cc
@@ -38,7 +38,7 @@ // static RendererUptimeTracker* RendererUptimeTracker::Get() { - DCHECK(g_renderer_uptime_tracker_instance); + // This can return null in unit tests. return g_renderer_uptime_tracker_instance; }
diff --git a/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc b/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc index 8c58735..35185b5 100644 --- a/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc +++ b/chrome/browser/metrics/renderer_uptime_web_contents_observer.cc
@@ -30,8 +30,11 @@ } void RendererUptimeWebContentsObserver::DocumentAvailableInMainFrame() { - RendererUptimeTracker::Get()->OnLoadInMainFrame( - web_contents()->GetMainFrame()->GetProcess()->GetID()); + // RendererUptimeTracker can be null in unittests. + if (RendererUptimeTracker* tracker = RendererUptimeTracker::Get()) { + tracker->OnLoadInMainFrame( + web_contents()->GetMainFrame()->GetProcess()->GetID()); + } } WEB_CONTENTS_USER_DATA_KEY_IMPL(RendererUptimeWebContentsObserver)
diff --git a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc index 0e89c92..5d92d1f 100644 --- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc +++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.cc
@@ -417,7 +417,7 @@ ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl:: WritePermissionGrantImpl( - scoped_refptr<ChromeNativeFileSystemPermissionContext> context, + base::WeakPtr<ChromeNativeFileSystemPermissionContext> context, const url::Origin& origin, const Key& key, bool is_directory) @@ -467,7 +467,7 @@ bool ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl:: CanRequestPermission() { - return context_->CanRequestWritePermission(origin_); + return context_ && context_->CanRequestWritePermission(origin_); } void ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl:: @@ -481,7 +481,8 @@ ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl:: ~WritePermissionGrantImpl() { - context_->PermissionGrantDestroyed(this); + if (context_) + context_->PermissionGrantDestroyed(this); } void ChromeNativeFileSystemPermissionContext::WritePermissionGrantImpl:: @@ -543,6 +544,9 @@ HostContentSettingsMapFactory::GetForProfile(profile)); } +ChromeNativeFileSystemPermissionContext:: + ~ChromeNativeFileSystemPermissionContext() = default; + scoped_refptr<content::NativeFileSystemPermissionGrant> ChromeNativeFileSystemPermissionContext::GetReadPermissionGrant( const url::Origin& origin, @@ -609,7 +613,7 @@ // status, and store a reference to it in |origin_state| by assigning // |existing_grant|. auto result = base::MakeRefCounted<WritePermissionGrantImpl>( - this, origin, grant_key, is_directory); + weak_factory_.GetWeakPtr(), origin, grant_key, is_directory); if (result->CanRequestPermission()) { if (user_action == UserAction::kSave) { result->SetStatus(WritePermissionGrantImpl::PermissionStatus::GRANTED); @@ -668,8 +672,8 @@ base::BindOnce(&ShouldBlockAccessToPath, paths[0]), base::BindOnce(&ChromeNativeFileSystemPermissionContext:: DidConfirmSensitiveDirectoryAccess, - this, origin, paths, is_directory, process_id, frame_id, - std::move(callback))); + weak_factory_.GetWeakPtr(), origin, paths, is_directory, + process_id, frame_id, std::move(callback))); } void ChromeNativeFileSystemPermissionContext::PerformAfterWriteChecks( @@ -722,28 +726,6 @@ return grants; } -// static -void ChromeNativeFileSystemPermissionContext::GetPermissionGrantsFromUIThread( - content::BrowserContext* browser_context, - const url::Origin& origin, - int process_id, - int frame_id, - base::OnceCallback<void(Grants)> callback) { - auto permission_context = - NativeFileSystemPermissionContextFactory::GetForProfileIfExists( - browser_context); - if (!permission_context) { - std::move(callback).Run(Grants()); - return; - } - base::PostTaskAndReplyWithResult( - FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce( - &ChromeNativeFileSystemPermissionContext::GetPermissionGrants, - permission_context, origin, process_id, frame_id), - std::move(callback)); -} - void ChromeNativeFileSystemPermissionContext::RevokeDirectoryReadGrants( const url::Origin& origin, int process_id, @@ -793,37 +775,14 @@ } } -// static -void ChromeNativeFileSystemPermissionContext:: - RevokeGrantsForOriginAndTabFromUIThread( - content::BrowserContext* browser_context, - const url::Origin& origin, - int process_id, - int frame_id) { - auto permission_context = - NativeFileSystemPermissionContextFactory::GetForProfileIfExists( - browser_context); - if (!permission_context) { - // With no context there is nothing to revoke. - return; - } - base::PostTask( - FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce( - [](const scoped_refptr<ChromeNativeFileSystemPermissionContext>& - context, - const url::Origin& origin, int process_id, int frame_id) { - context->RevokeDirectoryReadGrants(origin, process_id, frame_id); - context->RevokeWriteGrants(origin, process_id, frame_id); - }, - std::move(permission_context), origin, process_id, frame_id)); +void ChromeNativeFileSystemPermissionContext::RevokeGrantsForOriginAndTab( + const url::Origin& origin, + int process_id, + int frame_id) { + RevokeDirectoryReadGrants(origin, process_id, frame_id); + RevokeWriteGrants(origin, process_id, frame_id); } -void ChromeNativeFileSystemPermissionContext::ShutdownOnUIThread() {} - -ChromeNativeFileSystemPermissionContext:: - ~ChromeNativeFileSystemPermissionContext() = default; - void ChromeNativeFileSystemPermissionContext::PermissionGrantDestroyed( WritePermissionGrantImpl* grant) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
diff --git a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h index 86daaa5..0d01c96 100644 --- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h +++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context.h
@@ -11,7 +11,7 @@ #include "base/sequence_checker.h" #include "chrome/browser/permissions/permission_util.h" #include "components/content_settings/core/common/content_settings_types.h" -#include "components/keyed_service/core/refcounted_keyed_service.h" +#include "components/keyed_service/core/keyed_service.h" #include "content/public/browser/native_file_system_permission_context.h" #include "third_party/blink/public/mojom/permissions/permission_status.mojom.h" @@ -24,11 +24,7 @@ // Chrome implementation of NativeFileSystemPermissionContext. Currently // implements a single per-origin write permission state. // -// All methods should be called on the same sequence, except for the -// constructor, destructor, and GetPermissionGrantsFromUIThread method. -// -// TODO(mek): Reconsider if this class should just be UI-thread only, avoiding -// the need to make this ref-counted. +// All methods must be called on the UI thread. // // This class does not inherit from ChooserContextBase because the model this // API uses doesn't really match what ChooserContextBase has to provide. The @@ -40,10 +36,11 @@ // ChooserContextBase. class ChromeNativeFileSystemPermissionContext : public content::NativeFileSystemPermissionContext, - public RefcountedKeyedService { + public KeyedService { public: explicit ChromeNativeFileSystemPermissionContext( content::BrowserContext* context); + ~ChromeNativeFileSystemPermissionContext() override; class WritePermissionGrantImpl : public content::NativeFileSystemPermissionGrant { @@ -65,7 +62,7 @@ }; WritePermissionGrantImpl( - scoped_refptr<ChromeNativeFileSystemPermissionContext> context, + base::WeakPtr<ChromeNativeFileSystemPermissionContext> context, const url::Origin& origin, const Key& key, bool is_directory); @@ -113,7 +110,7 @@ SEQUENCE_CHECKER(sequence_checker_); - scoped_refptr<ChromeNativeFileSystemPermissionContext> const context_; + base::WeakPtr<ChromeNativeFileSystemPermissionContext> const context_; const url::Origin origin_; const Key key_; const bool is_directory_; @@ -161,6 +158,9 @@ int frame_id, base::OnceCallback<void(AfterWriteCheckResult)> callback) override; + // Returns a snapshot of the currently granted permissions. + // TODO(https://crbug.com/984769): Eliminate process_id and frame_id from this + // method when grants stop being scoped to a frame. struct Grants { Grants(); ~Grants(); @@ -174,17 +174,6 @@ int process_id, int frame_id); - // This method must be called on the UI thread, and calls the callback with a - // snapshot of the currently granted permissions after looking them up. - // TODO(https://crbug.com/984769): Eliminate process_id and frame_id from this - // method when grants stop being scoped to a frame. - static void GetPermissionGrantsFromUIThread( - content::BrowserContext* browser_context, - const url::Origin& origin, - int process_id, - int frame_id, - base::OnceCallback<void(Grants)> callback); - // Revokes directory read access for the given origin in the given tab. void RevokeDirectoryReadGrants(const url::Origin& origin, int process_id, @@ -196,21 +185,13 @@ // Revokes write access and directory read access for the given origin in the // given tab. - static void RevokeGrantsForOriginAndTabFromUIThread( - content::BrowserContext* browser_context, - const url::Origin& origin, - int process_id, - int frame_id); - - // RefcountedKeyedService: - void ShutdownOnUIThread() override; + void RevokeGrantsForOriginAndTab(const url::Origin& origin, + int process_id, + int frame_id); HostContentSettingsMap* content_settings() { return content_settings_.get(); } private: - // Destructor is private because this class is refcounted. - ~ChromeNativeFileSystemPermissionContext() override; - void PermissionGrantDestroyed(WritePermissionGrantImpl* grant); void DidConfirmSensitiveDirectoryAccess( @@ -230,6 +211,8 @@ scoped_refptr<HostContentSettingsMap> content_settings_; + base::WeakPtrFactory<ChromeNativeFileSystemPermissionContext> weak_factory_{ + this}; DISALLOW_COPY_AND_ASSIGN(ChromeNativeFileSystemPermissionContext); };
diff --git a/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc b/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc index e8ae25a..3de8ca6 100644 --- a/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc +++ b/chrome/browser/native_file_system/chrome_native_file_system_permission_context_unittest.cc
@@ -46,7 +46,7 @@ web_contents_ = content::WebContentsTester::CreateTestWebContents(&profile_, nullptr); permission_context_ = - base::MakeRefCounted<ChromeNativeFileSystemPermissionContext>( + std::make_unique<ChromeNativeFileSystemPermissionContext>( browser_context()); } @@ -119,7 +119,7 @@ content::BrowserTaskEnvironment task_environment_; base::ScopedTempDir temp_dir_; - scoped_refptr<ChromeNativeFileSystemPermissionContext> permission_context_; + std::unique_ptr<ChromeNativeFileSystemPermissionContext> permission_context_; content::RenderViewHostTestEnabler render_view_host_test_enabler_; TestingProfile profile_; std::unique_ptr<WebContents> web_contents_;
diff --git a/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc b/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc index 4741d21..f327367 100644 --- a/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc +++ b/chrome/browser/native_file_system/native_file_system_permission_context_factory.cc
@@ -11,19 +11,19 @@ #include "components/keyed_service/content/browser_context_dependency_manager.h" // static -scoped_refptr<ChromeNativeFileSystemPermissionContext> +ChromeNativeFileSystemPermissionContext* NativeFileSystemPermissionContextFactory::GetForProfile( content::BrowserContext* profile) { return static_cast<ChromeNativeFileSystemPermissionContext*>( - GetInstance()->GetServiceForBrowserContext(profile, true).get()); + GetInstance()->GetServiceForBrowserContext(profile, true)); } // static -scoped_refptr<ChromeNativeFileSystemPermissionContext> +ChromeNativeFileSystemPermissionContext* NativeFileSystemPermissionContextFactory::GetForProfileIfExists( content::BrowserContext* profile) { return static_cast<ChromeNativeFileSystemPermissionContext*>( - GetInstance()->GetServiceForBrowserContext(profile, false).get()); + GetInstance()->GetServiceForBrowserContext(profile, false)); } // static @@ -35,7 +35,7 @@ NativeFileSystemPermissionContextFactory:: NativeFileSystemPermissionContextFactory() - : RefcountedBrowserContextKeyedServiceFactory( + : BrowserContextKeyedServiceFactory( "NativeFileSystemPermissionContext", BrowserContextDependencyManager::GetInstance()) { DependsOn(HostContentSettingsMapFactory::GetInstance()); @@ -50,8 +50,7 @@ return chrome::GetBrowserContextOwnInstanceInIncognito(context); } -scoped_refptr<RefcountedKeyedService> -NativeFileSystemPermissionContextFactory::BuildServiceInstanceFor( +KeyedService* NativeFileSystemPermissionContextFactory::BuildServiceInstanceFor( content::BrowserContext* profile) const { return new ChromeNativeFileSystemPermissionContext(profile); }
diff --git a/chrome/browser/native_file_system/native_file_system_permission_context_factory.h b/chrome/browser/native_file_system/native_file_system_permission_context_factory.h index 4bbc2b3..152c2a4d 100644 --- a/chrome/browser/native_file_system/native_file_system_permission_context_factory.h +++ b/chrome/browser/native_file_system/native_file_system_permission_context_factory.h
@@ -7,19 +7,19 @@ #include "base/macros.h" #include "base/no_destructor.h" -#include "components/keyed_service/content/refcounted_browser_context_keyed_service_factory.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" class ChromeNativeFileSystemPermissionContext; // Factory to get or create an instance of // ChromeNativeFileSystemPermissionContext from a Profile. class NativeFileSystemPermissionContextFactory - : public RefcountedBrowserContextKeyedServiceFactory { + : public BrowserContextKeyedServiceFactory { public: - static scoped_refptr<ChromeNativeFileSystemPermissionContext> GetForProfile( + static ChromeNativeFileSystemPermissionContext* GetForProfile( content::BrowserContext* profile); - static scoped_refptr<ChromeNativeFileSystemPermissionContext> - GetForProfileIfExists(content::BrowserContext* profile); + static ChromeNativeFileSystemPermissionContext* GetForProfileIfExists( + content::BrowserContext* profile); static NativeFileSystemPermissionContextFactory* GetInstance(); private: @@ -28,10 +28,10 @@ NativeFileSystemPermissionContextFactory(); ~NativeFileSystemPermissionContextFactory() override; - // RefcountedBrowserContextKeyedServiceFactory: + // BrowserContextKeyedServiceFactory: content::BrowserContext* GetBrowserContextToUse( content::BrowserContext* context) const override; - scoped_refptr<RefcountedKeyedService> BuildServiceInstanceFor( + KeyedService* BuildServiceInstanceFor( content::BrowserContext* profile) const override; DISALLOW_COPY_AND_ASSIGN(NativeFileSystemPermissionContextFactory);
diff --git a/chrome/browser/net/ftp_browsertest.cc b/chrome/browser/net/ftp_browsertest.cc index 5b0ba383..1b3fe62 100644 --- a/chrome/browser/net/ftp_browsertest.cc +++ b/chrome/browser/net/ftp_browsertest.cc
@@ -2,13 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include <vector> + #include "base/command_line.h" #include "base/files/file_path.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/common/chrome_features.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/browser_context.h" @@ -19,15 +23,19 @@ #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" +namespace { + class FtpBrowserTest : public InProcessBrowserTest { public: FtpBrowserTest() : ftp_server_(net::SpawnedTestServer::TYPE_FTP, base::FilePath(FILE_PATH_LITERAL("chrome/test/data/ftp"))) { + scoped_feature_list_.InitAndEnableFeature(features::kEnableFtp); } protected: net::SpawnedTestServer ftp_server_; + base::test::ScopedFeatureList scoped_feature_list_; }; void WaitForTitle(content::WebContents* contents, const char* expected_title) { @@ -38,6 +46,8 @@ title_watcher.WaitAndGetTitle()); } +} // namespace + IN_PROC_BROWSER_TEST_F(FtpBrowserTest, BasicFtpUrlAuthentication) { ASSERT_TRUE(ftp_server_.Start()); ui_test_utils::NavigateToURL(
diff --git a/chrome/browser/net/profile_network_context_service.cc b/chrome/browser/net/profile_network_context_service.cc index f3c55a9c..344a3d2 100644 --- a/chrome/browser/net/profile_network_context_service.cc +++ b/chrome/browser/net/profile_network_context_service.cc
@@ -492,7 +492,8 @@ // ProfileIOData::IsHandledProtocol(). // TODO(mmenke): Find a better way of handling tracking supported schemes. #if !BUILDFLAG(DISABLE_FTP_SUPPORT) - network_context_params->enable_ftp_url_support = true; + network_context_params->enable_ftp_url_support = + base::FeatureList::IsEnabled(features::kEnableFtp); #endif // !BUILDFLAG(DISABLE_FTP_SUPPORT) proxy_config_monitor_.AddToNetworkContextParams(network_context_params.get());
diff --git a/chrome/browser/net/system_network_context_manager.cc b/chrome/browser/net/system_network_context_manager.cc index dcc5b84..59f49c0 100644 --- a/chrome/browser/net/system_network_context_manager.cc +++ b/chrome/browser/net/system_network_context_manager.cc
@@ -851,7 +851,8 @@ // These are needed for PAC scripts that use FTP URLs. #if !BUILDFLAG(DISABLE_FTP_SUPPORT) - network_context_params->enable_ftp_url_support = true; + network_context_params->enable_ftp_url_support = + base::FeatureList::IsEnabled(features::kEnableFtp); #endif network_context_params->primary_network_context = true;
diff --git a/chrome/browser/notifications/chrome_ash_message_center_client.cc b/chrome/browser/notifications/chrome_ash_message_center_client.cc index b304b9d..782592d 100644 --- a/chrome/browser/notifications/chrome_ash_message_center_client.cc +++ b/chrome/browser/notifications/chrome_ash_message_center_client.cc
@@ -8,7 +8,6 @@ #include "ash/public/cpp/notifier_settings_observer.h" #include "base/i18n/string_compare.h" #include "base/stl_util.h" -#include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" #include "chrome/browser/notifications/arc_application_notifier_controller.h" #include "chrome/browser/notifications/extension_notifier_controller.h" @@ -16,8 +15,8 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/settings_window_manager_chromeos.h" #include "chrome/common/webui_url_constants.h" +#include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" -#include "content/public/browser/notification_service.h" #include "ui/message_center/message_center.h" #include "ui/message_center/public/cpp/notifier_id.h" @@ -32,8 +31,8 @@ // All notifier actions are performed on the notifiers for the currently active // profile, so this just returns the active profile. Profile* GetProfileForNotifiers() { - const auto* user = user_manager::UserManager::Get()->GetActiveUser(); - return chromeos::ProfileHelper::Get()->GetProfileByUser(user); + return chromeos::ProfileHelper::Get()->GetProfileByUser( + user_manager::UserManager::Get()->GetActiveUser()); } class NotifierComparator { @@ -145,8 +144,16 @@ } void ChromeAshMessageCenterClient::GetNotifiers() { + if (!notifier_observers_.might_have_observers()) + return; + Profile* profile = GetProfileForNotifiers(); if (!profile) { + user_manager::UserManager::Get() + ->GetActiveUser() + ->AddProfileCreatedObserver( + base::BindOnce(&ChromeAshMessageCenterClient::GetNotifiers, + weak_ptr_.GetWeakPtr())); LOG(ERROR) << "GetNotifiers called before profile fully loaded, see " "https://crbug.com/968825"; return; @@ -171,9 +178,8 @@ void ChromeAshMessageCenterClient::SetNotifierEnabled( const NotifierId& notifier_id, bool enabled) { - Profile* profile = GetProfileForNotifiers(); - CHECK(profile); - sources_[notifier_id.type]->SetNotifierEnabled(profile, notifier_id, enabled); + sources_[notifier_id.type]->SetNotifierEnabled(GetProfileForNotifiers(), + notifier_id, enabled); } void ChromeAshMessageCenterClient::AddNotifierSettingsObserver( @@ -199,15 +205,3 @@ if (!enabled) MessageCenter::Get()->RemoveNotificationsForNotifierId(notifier_id); } - -void ChromeAshMessageCenterClient::Observe( - int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) { - DCHECK_EQ(type, chrome::NOTIFICATION_PROFILE_ADDED); - Profile* profile = GetProfileForNotifiers(); - if (profile) { - GetNotifiers(); - registrar_.RemoveAll(); - } -}
diff --git a/chrome/browser/notifications/chrome_ash_message_center_client.h b/chrome/browser/notifications/chrome_ash_message_center_client.h index 2fca655..7bae2a8 100644 --- a/chrome/browser/notifications/chrome_ash_message_center_client.h +++ b/chrome/browser/notifications/chrome_ash_message_center_client.h
@@ -6,12 +6,11 @@ #define CHROME_BROWSER_NOTIFICATIONS_CHROME_ASH_MESSAGE_CENTER_CLIENT_H_ #include "ash/public/cpp/notifier_settings_controller.h" +#include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "chrome/browser/notifications/notification_platform_bridge.h" #include "chrome/browser/notifications/notification_platform_bridge_chromeos.h" #include "chrome/browser/notifications/notifier_controller.h" -#include "content/public/browser/notification_observer.h" -#include "content/public/browser/notification_registrar.h" // This class serves as Chrome's AshMessageCenterClient, as well as the // NotificationPlatformBridge for ChromeOS. It dispatches notifications to Ash @@ -19,8 +18,7 @@ // NotifierControllers to provide notifier settings information to Ash (visible // in NotifierSettingsView). class ChromeAshMessageCenterClient : public ash::NotifierSettingsController, - public NotifierController::Observer, - public content::NotificationObserver { + public NotifierController::Observer { public: explicit ChromeAshMessageCenterClient( NotificationPlatformBridgeDelegate* delegate); @@ -46,11 +44,6 @@ bool enabled) override; private: - // content::NotificationObserver override. - void Observe(int type, - const content::NotificationSource& source, - const content::NotificationDetails& details) override; - NotificationPlatformBridgeDelegate* delegate_; // Notifier source for each notifier type. @@ -59,7 +52,7 @@ base::ObserverList<ash::NotifierSettingsObserver> notifier_observers_; - content::NotificationRegistrar registrar_; + base::WeakPtrFactory<ChromeAshMessageCenterClient> weak_ptr_{this}; DISALLOW_COPY_AND_ASSIGN(ChromeAshMessageCenterClient); };
diff --git a/chrome/browser/offline_pages/recent_tab_helper_unittest.cc b/chrome/browser/offline_pages/recent_tab_helper_unittest.cc index 2515200..0c48b94 100644 --- a/chrome/browser/offline_pages/recent_tab_helper_unittest.cc +++ b/chrome/browser/offline_pages/recent_tab_helper_unittest.cc
@@ -279,6 +279,7 @@ void RecentTabHelperTest::StartAndCommitNavigation( std::unique_ptr<content::NavigationSimulator> simulator) { simulator->SetAutoAdvance(false); + simulator->SetKeepLoading(true); simulator->Start(); // Need to flush the task queue manually since there may be async tasks
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc index 425e785..4a8b8f1 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -74,6 +74,23 @@ rfh, page_load_features); } +std::string GetHeavyAdReportMessage(const FrameData& frame_data) { + const char kChromeStatusMessage[] = + "See https://www.chromestatus.com/feature/4800491902992384"; + switch (frame_data.heavy_ad_status()) { + case FrameData::HeavyAdStatus::kNetwork: + return "Ad was removed because its network usage exceeded the limit. " + + std::string(kChromeStatusMessage); + case FrameData::HeavyAdStatus::kTotalCpu: + case FrameData::HeavyAdStatus::kPeakCpu: + return "Ad was removed because its CPU usage exceeded the limit. " + + std::string(kChromeStatusMessage); + case FrameData::HeavyAdStatus::kNone: + NOTREACHED(); + return ""; + } +} + using ResourceMimeType = AdsPageLoadMetricsObserver::ResourceMimeType; const char kDisallowedByBlocklistHistogramName[] = "PageLoad.Clients.Ads.HeavyAds.DisallowedByBlocklist"; @@ -177,59 +194,11 @@ FrameData* ancestor_data = FindFrameData(subframe_rfh->GetFrameTreeNodeId()); // Only update the frame with the root frames timing updates. - if (ancestor_data && - ancestor_data->frame_tree_node_id() == subframe_rfh->GetFrameTreeNodeId()) + if (ancestor_data && ancestor_data->root_frame_tree_node_id() == + subframe_rfh->GetFrameTreeNodeId()) ancestor_data->set_timing(timing.Clone()); } -void AdsPageLoadMetricsObserver::MaybeTriggerHeavyAdIntervention( - content::RenderFrameHost* render_frame_host, - FrameData* frame_data) { - DCHECK(render_frame_host); - if (!frame_data->MaybeTriggerHeavyAdIntervention()) - return; - - // Check to see if we are allowed to activate on this host. - if (IsBlocklisted()) - return; - - // Find the RenderFrameHost associated with this frame data. It is possible - // that this frame no longer exists. We do not care if the frame has - // moved to a new process because once the frame has been tagged as an ad, it - // is always considered an ad. - while (render_frame_host && render_frame_host->GetFrameTreeNodeId() != - frame_data->frame_tree_node_id()) { - render_frame_host = render_frame_host->GetParent(); - } - if (!render_frame_host) - return; - - // Ensure that this RenderFrameHost is a subframe. - DCHECK(render_frame_host->GetParent()); - - GetDelegate().GetWebContents()->GetController().LoadPostCommitErrorPage( - render_frame_host, render_frame_host->GetLastCommittedURL(), - heavy_ads::PrepareHeavyAdPage(), net::ERR_BLOCKED_BY_CLIENT); - - RecordFeatureUsage(render_frame_host, - blink::mojom::WebFeature::kHeavyAdIntervention); - - ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION, - FrameData::FrameVisibility::kAnyVisibility, - frame_data->heavy_ad_status_with_noise()); - ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION, - frame_data->visibility(), - frame_data->heavy_ad_status_with_noise()); - - // Report intervention to the blocklist. - if (auto* blocklist = GetHeavyAdBlocklist()) { - blocklist->AddEntry( - GetDelegate().GetWebContents()->GetLastCommittedURL().host(), - true /* opt_out */, - static_cast<int>(HeavyAdBlocklistType::kHeavyAdOnlyType)); - } -} - void AdsPageLoadMetricsObserver::OnCpuTimingUpdate( content::RenderFrameHost* subframe_rfh, const page_load_metrics::mojom::CpuTiming& timing) { @@ -422,7 +391,7 @@ // chain, then update it. The display property is propagated to all child // frames. if (ancestor_data && render_frame_host->GetFrameTreeNodeId() == - ancestor_data->frame_tree_node_id()) { + ancestor_data->root_frame_tree_node_id()) { ancestor_data->SetDisplayState(is_display_none); } } @@ -435,7 +404,7 @@ // If the frame whose size has changed is the root of the ad ancestry chain, // then update it if (ancestor_data && render_frame_host->GetFrameTreeNodeId() == - ancestor_data->frame_tree_node_id()) { + ancestor_data->root_frame_tree_node_id()) { ancestor_data->SetFrameSize(frame_size); } } @@ -472,7 +441,7 @@ // If the root ad frame has been deleted, flush histograms for the frame and // remove it from storage. All child frames should be deleted by this point. - if (ancestor_data && ancestor_data->frame_tree_node_id() == + if (ancestor_data && ancestor_data->root_frame_tree_node_id() == render_frame_host->GetFrameTreeNodeId()) { RecordPerFrameHistogramsForAdTagging(*ancestor_data); RecordPerFrameHistogramsForCpuUsage(*ancestor_data); @@ -975,6 +944,74 @@ return &*id_and_data->second; } +void AdsPageLoadMetricsObserver::MaybeTriggerHeavyAdIntervention( + content::RenderFrameHost* render_frame_host, + FrameData* frame_data) { + DCHECK(render_frame_host); + if (!frame_data->MaybeTriggerHeavyAdIntervention()) + return; + + // Check to see if we are allowed to activate on this host. + if (IsBlocklisted()) + return; + + // We should always unload the root of the ad subtree. Find the + // RenderFrameHost of the root ad frame associated with |frame_data|. + // |render_frame_host| may be the frame host for a subframe of the ad which we + // received a resource update for. Traversing the tree here guarantees + // that the frame we unload is an ancestor of |render_frame_host|. We cannot + // check if render frame hosts are ads so we rely on matching the + // root_frame_tree_node_id of |frame_data|. It is possible that this frame no + // longer exists. We do not care if the frame has moved to a new process + // because once the frame has been tagged as an ad, it is always considered an + // ad by our heuristics. + while (render_frame_host && render_frame_host->GetFrameTreeNodeId() != + frame_data->root_frame_tree_node_id()) { + render_frame_host = render_frame_host->GetParent(); + } + if (!render_frame_host) + return; + + // Ensure that this RenderFrameHost is a subframe. + DCHECK(render_frame_host->GetParent()); + + const char kReportId[] = "HeavyAdIntervention"; + std::string report_message = GetHeavyAdReportMessage(*frame_data); + + // Report to all child frames that will be unloaded. Once all reports are + // queued, the frame will be unloaded. Because the IPC messages are ordered + // wrt to each frames unload, we do not need to wait before loading the error + // page. Reports will be added to ReportingObserver queues synchronously when + // the IPC message is handled, which guarantees they will be available in the + // the unload handler. + for (content::RenderFrameHost* reporting_frame : + render_frame_host->GetFramesInSubtree()) { + reporting_frame->SendInterventionReport(kReportId, report_message); + } + + // Report intervention to the blocklist. + if (auto* blocklist = GetHeavyAdBlocklist()) { + blocklist->AddEntry( + GetDelegate().GetWebContents()->GetLastCommittedURL().host(), + true /* opt_out */, + static_cast<int>(HeavyAdBlocklistType::kHeavyAdOnlyType)); + } + + GetDelegate().GetWebContents()->GetController().LoadPostCommitErrorPage( + render_frame_host, render_frame_host->GetLastCommittedURL(), + heavy_ads::PrepareHeavyAdPage(), net::ERR_BLOCKED_BY_CLIENT); + + RecordFeatureUsage(render_frame_host, + blink::mojom::WebFeature::kHeavyAdIntervention); + + ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION, + FrameData::FrameVisibility::kAnyVisibility, + frame_data->heavy_ad_status_with_noise()); + ADS_HISTOGRAM("HeavyAds.InterventionType2", UMA_HISTOGRAM_ENUMERATION, + frame_data->visibility(), + frame_data->heavy_ad_status_with_noise()); +} + bool AdsPageLoadMetricsObserver::IsBlocklisted() { if (!heavy_ad_blocklist_enabled_) return false;
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h index 629a771..63a4ff33 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer.h
@@ -30,7 +30,6 @@ : public page_load_metrics::PageLoadMetricsObserver, public subresource_filter::SubresourceFilterObserver { public: - // Returns a new AdsPageLoadMetricObserver. If the feature is disabled it // returns nullptr. static std::unique_ptr<AdsPageLoadMetricsObserver> CreateIfNeeded( @@ -164,12 +163,10 @@ // |ad_frames_data_storage_|. FrameData* FindFrameData(FrameTreeNodeId id); - // Loads the heavy ad intervention page in the target frame if it is safe to - // do so on this origin, and the frame meets the criteria to be considered a - // heavy ad. - // TODO(johnidel): Ads may only automatically be unloaded 5 times per-origin - // per day and to prevent a side channel leak of cross-origin resource size / - // CPU usage. + // Triggers the heavy ad intervention page in the target frame if it is safe + // to do so on this origin, and the frame meets the criteria to be considered + // a heavy ad. This first sends an intervention report to every affected + // frame then loads an error page in the root ad frame. void MaybeTriggerHeavyAdIntervention( content::RenderFrameHost* render_frame_host, FrameData* frame_data);
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc index 8f1f4fe..1707d59 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
@@ -876,6 +876,123 @@ entries.front(), ukm::builders::AdFrameLoad::kLoading_CacheBytes2Name, 0); } +// Verifies that the ad unloaded by the heavy ad intervention receives an +// intervention report prior to being unloaded. +IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest, + HeavyAdInterventionFired_ReportSent) { + base::HistogramTester histogram_tester; + auto incomplete_resource_response = + std::make_unique<net::test_server::ControllableHttpResponse>( + embedded_test_server(), "/ads_observer/incomplete_resource.js", + true /*relative_url_is_prefix*/); + ASSERT_TRUE(embedded_test_server()->Start()); + + // Create a navigation observer that will watch for the intervention to + // navigate the frame. + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + + auto waiter = CreateAdsPageLoadMetricsTestWaiter(); + GURL url = embedded_test_server()->GetURL( + "/ads_observer/ad_with_incomplete_resource.html"); + ui_test_utils::NavigateToURL(browser(), url); + + content::RenderFrameHost* ad_frame = + ChildFrameAt(web_contents->GetMainFrame(), 0); + + content::DOMMessageQueue message_queue(ad_frame); + + const std::string report_script = R"( + function process(report) { + if (report.body.id === 'HeavyAdIntervention') + window.domAutomationController.send('REPORT'); + } + + let observer = new ReportingObserver((reports, observer) => { + reports.forEach(process); + }); + observer.observe(); + + window.addEventListener('unload', function(event) { + observer.takeRecords().forEach(process); + window.domAutomationController.send('END'); + }); + )"; + EXPECT_TRUE(content::ExecJs(ad_frame, report_script, + content::EXECUTE_SCRIPT_NO_USER_GESTURE)); + + // Load a resource large enough to trigger the intervention. + LoadLargeResource(incomplete_resource_response.get(), kMaxHeavyAdNetworkSize); + + std::string message; + bool got_report = false; + while (message_queue.WaitForMessage(&message)) { + if (message == "\"REPORT\"") { + got_report = true; + break; + } + if (message == "\"END\"") + break; + } + EXPECT_TRUE(got_report); +} + +// Verifies that reports are sent to all children. +IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest, + HeavyAdInterventionFired_ReportsToAllChildren) { + base::HistogramTester histogram_tester; + auto large_resource = + std::make_unique<net::test_server::ControllableHttpResponse>( + embedded_test_server(), "/ads_observer/incomplete_resource.js", + false /*relative_url_is_prefix*/); + ASSERT_TRUE(embedded_test_server()->Start()); + + // Create a navigation observer that will watch for the intervention to + // navigate the frame. + content::WebContents* web_contents = + browser()->tab_strip_model()->GetActiveWebContents(); + content::TestNavigationObserver child_observer(web_contents, 2); + content::TestNavigationObserver error_observer(web_contents, + net::ERR_BLOCKED_BY_CLIENT); + + auto waiter = CreateAdsPageLoadMetricsTestWaiter(); + auto console_delegate = std::make_unique<content::ConsoleObserverDelegate>( + web_contents, "Ad was removed*"); + web_contents->SetDelegate(console_delegate.get()); + + ui_test_utils::NavigateToURL( + browser(), embedded_test_server()->GetURL( + "foo.com", "/ad_tagging/frame_factory.html")); + + EXPECT_TRUE(ExecJs(web_contents, + "createAdFrame('/ad_tagging/frame_factory.html', '');")); + + child_observer.Wait(); + + content::RenderFrameHost* ad_frame = + ChildFrameAt(web_contents->GetMainFrame(), 0); + + auto cross_origin_ad_url = embedded_test_server()->GetURL( + "xyz.com", "/ad_tagging/frame_factory.html"); + + EXPECT_TRUE(ExecJs( + ad_frame, + "createAdFrame('/ads_observer/ad_with_incomplete_resource.html', '');", + content::EXECUTE_SCRIPT_NO_USER_GESTURE)); + EXPECT_TRUE(ExecJs(ad_frame, + "createAdFrame('" + cross_origin_ad_url.spec() + "', '');", + content::EXECUTE_SCRIPT_NO_USER_GESTURE)); + + // Load a resource large enough to trigger the intervention. + LoadLargeResource(large_resource.get(), kMaxHeavyAdNetworkSize); + + error_observer.WaitForNavigationFinished(); + + // Every frame should get a report (ad_with_incomplete_resource.html loads two + // frames). + EXPECT_EQ(4u, console_delegate->messages().size()); +} + // Verifies that the frame is navigated to the intervention page when a // heavy ad intervention triggers. IN_PROC_BROWSER_TEST_F(AdsPageLoadMetricsObserverResourceBrowserTest, @@ -905,6 +1022,9 @@ // Wait for the intervention page navigation to finish on the frame. error_observer.WaitForNavigationFinished(); + histogram_tester.ExpectUniqueSample(kHeavyAdInterventionTypeHistogramId, + FrameData::HeavyAdStatus::kNetwork, 1); + // Check that the ad frame was navigated to the intervention page. EXPECT_FALSE(error_observer.last_navigation_succeeded()); @@ -1031,6 +1151,9 @@ // Wait for the intervention page navigation to finish on the frame. error_observer.WaitForNavigationFinished(); + histogram_tester.ExpectUniqueSample(kHeavyAdInterventionTypeHistogramId, + FrameData::HeavyAdStatus::kNetwork, 1); + // Check that the ad frame was navigated to the intervention page. EXPECT_FALSE(error_observer.last_navigation_succeeded());
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc index 65ed7e7..aa11190 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/bind_helpers.h" +#include "base/callback.h" #include "base/macros.h" #include "base/sequenced_task_runner.h" #include "base/strings/stringprintf.h" @@ -48,10 +49,14 @@ #include "content/public/test/test_navigation_throttle.h" #include "content/public/test/test_navigation_throttle_inserter.h" #include "content/public/test/test_renderer_host.h" +#include "content/public/test/test_utils.h" #include "content/public/test/web_contents_tester.h" +#include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "net/base/host_port_pair.h" #include "services/metrics/public/cpp/metrics_utils.h" #include "services/metrics/public/cpp/ukm_builders.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" +#include "third_party/blink/public/mojom/frame/frame.mojom.h" #include "url/gurl.h" using content::NavigationSimulator; @@ -280,6 +285,86 @@ } } +// Waits for an error page for the heavy ad intervention to be navigated to. +class ErrorPageWaiter : public content::WebContentsObserver { + public: + explicit ErrorPageWaiter(content::WebContents* contents) + : content::WebContentsObserver(contents) {} + ~ErrorPageWaiter() override = default; + + // content::WebContentsObserver: + void DidFinishNavigation(content::NavigationHandle* handle) override { + if (handle->GetNetErrorCode() != net::ERR_BLOCKED_BY_CLIENT) { + is_error_page_ = false; + return; + } + + is_error_page_ = true; + if (quit_closure_) + std::move(quit_closure_).Run(); + } + + // Immediately returns if we are on an error page. + void WaitForError() { + if (is_error_page_) + return; + base::RunLoop run_loop; + quit_closure_ = run_loop.QuitClosure(); + run_loop.Run(); + } + + private: + base::OnceClosure quit_closure_; + bool is_error_page_ = false; +}; + +// Mock frame remote. Processes calls to SendInterventionReport and waits +// for all pending messages to be sent. +class FrameRemoteTester : public blink::mojom::Frame { + public: + FrameRemoteTester() = default; + ~FrameRemoteTester() override = default; + + void BindPendingReceiver(mojo::ScopedInterfaceEndpointHandle handle) { + receivers_.Add(this, mojo::PendingAssociatedReceiver<blink::mojom::Frame>( + std::move(handle))); + } + + // blink::mojom::Frame + void SendInterventionReport(const std::string& id, + const std::string& message) override { + if (!on_empty_report_callback_) + return; + + if (id.empty()) { + std::move(on_empty_report_callback_).Run(); + return; + } + had_message_ = true; + } + + void GetTextSurroundingSelection( + uint32_t max_length, + GetTextSurroundingSelectionCallback callback) override {} + + // Sends an empty message and waits for it to be received. Returns true if any + // other messages were received. + bool FlushForTesting(RenderFrameHost* render_frame_host) { + base::RunLoop run_loop; + on_empty_report_callback_ = run_loop.QuitClosure(); + render_frame_host->SendInterventionReport("", ""); + run_loop.Run(); + int had_message = had_message_; + had_message_ = false; + return had_message; + } + + private: + bool had_message_ = false; + base::OnceClosure on_empty_report_callback_; + mojo::AssociatedReceiverSet<blink::mojom::Frame> receivers_; +}; + } // namespace class AdsPageLoadMetricsObserverTest @@ -373,6 +458,15 @@ auto navigation_simulator = NavigationSimulator::CreateRendererInitiated(GURL(url), subframe); navigation_simulator->Commit(); + + blink::AssociatedInterfaceProvider* remote_interfaces = + navigation_simulator->GetFinalRenderFrameHost() + ->GetRemoteAssociatedInterfaces(); + remote_interfaces->OverrideBinderForTesting( + blink::mojom::Frame::Name_, + base::BindRepeating(&FrameRemoteTester::BindPendingReceiver, + base::Unretained(&frame_remote_tester_))); + return navigation_simulator->GetFinalRenderFrameHost(); } @@ -427,6 +521,12 @@ HeavyAdBlocklist* blocklist() { return test_blocklist_.get(); } + // Flushes all intervention report messages and returns a bool if there was a + // message. + bool HasInterventionReportsAfterFlush(RenderFrameHost* render_frame_host) { + return frame_remote_tester_.FlushForTesting(render_frame_host); + } + void OverrideVisibilityTrackerWithMockClock() { clock_ = std::make_unique<base::SimpleTestTickClock>(); clock_->SetNowTicks(base::TimeTicks::Now()); @@ -491,6 +591,7 @@ base::HistogramTester histogram_tester_; ukm::TestAutoSetUkmRecorder test_ukm_recorder_; std::unique_ptr<page_load_metrics::PageLoadMetricsObserverTester> tester_; + FrameRemoteTester frame_remote_tester_; // The clock used by the ui::ScopedVisibilityTracker, assigned if non-null. std::unique_ptr<base::SimpleTestTickClock> clock_; @@ -1648,12 +1749,17 @@ // Load just under the threshold amount of bytes. ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, (heavy_ad_thresholds::kMaxNetworkBytes / 1024) - 1); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 0); + + // Verify we did not trigger the intervention. + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); + + ErrorPageWaiter waiter(web_contents()); // Load enough bytes to trigger the intervention. ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, 2); + EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame)); + waiter.WaitForError(); histogram_tester().ExpectUniqueSample( SuffixedHistogram("HeavyAds.InterventionType2"), FrameData::HeavyAdStatus::kNetwork, 1); @@ -1676,9 +1782,12 @@ histogram_tester().ExpectTotalCount( SuffixedHistogram("HeavyAds.InterventionType2"), 0); + ErrorPageWaiter waiter(web_contents()); + // Load enough bytes to meet the noised threshold criteria. ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, 1); + waiter.WaitForError(); histogram_tester().ExpectUniqueSample( SuffixedHistogram("HeavyAds.InterventionType2"), FrameData::HeavyAdStatus::kNetwork, 1); @@ -1700,8 +1809,9 @@ // Load network bytes that trip the heavy ad threshold without noise. ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, heavy_ad_thresholds::kMaxNetworkBytes / 1024 + 1); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 0); + + // Verify we did not trigger the intervention. + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); // Navigate again to trigger histograms. NavigateFrame(kNonAdUrl, main_frame); @@ -1735,6 +1845,9 @@ // Verify the frame can still trip the CPU threshold. UseCpuTimeUnderThreshold(ad_frame, base::TimeDelta::FromMilliseconds( heavy_ad_thresholds::kMaxCpuTime + 1)); + + // Verify we did not trigger the intervention. + EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame)); histogram_tester().ExpectUniqueSample( SuffixedHistogram("HeavyAds.InterventionType2"), FrameData::HeavyAdStatus::kTotalCpu, 1); @@ -1766,12 +1879,18 @@ AdvancePageDuration(base::TimeDelta::FromSeconds(30)); UseCpuTimeUnderThreshold(ad_frame, base::TimeDelta::FromMilliseconds( heavy_ad_thresholds::kMaxCpuTime - 1)); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 0); + + // Verify we did not trigger the intervention. + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); + AdvancePageDuration(base::TimeDelta::FromSeconds(30)); + // Use enough CPU to trigger the intervention. + ErrorPageWaiter waiter(web_contents()); OnCpuTimingUpdate(ad_frame, base::TimeDelta::FromMilliseconds(1)); + EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame)); + waiter.WaitForError(); histogram_tester().ExpectUniqueSample( SuffixedHistogram("HeavyAds.InterventionType2"), FrameData::HeavyAdStatus::kTotalCpu, 1); @@ -1793,13 +1912,17 @@ ad_frame, base::TimeDelta::FromMilliseconds( heavy_ad_thresholds::kMaxPeakWindowedPercent * 30000 / 100 - 1)); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 0); + + // Verify we did not trigger the intervention. + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); // Use enough CPU to trigger the intervention. + ErrorPageWaiter waiter(web_contents()); AdvancePageDuration(base::TimeDelta::FromSeconds(10)); OnCpuTimingUpdate(ad_frame, base::TimeDelta::FromMilliseconds(1)); + EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame)); + waiter.WaitForError(); histogram_tester().ExpectUniqueSample( SuffixedHistogram("HeavyAds.InterventionType2"), FrameData::HeavyAdStatus::kPeakCpu, 1); @@ -1816,8 +1939,9 @@ ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, (kMaxHeavyAdNetworkBytes / 1024) + 1); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 0); + // Verify we did not trigger the intervention. + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); + histogram_tester().ExpectTotalCount( SuffixedHistogram("HeavyAds.DisallowedByBlocklist"), 0); } @@ -1837,8 +1961,7 @@ ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 0); + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); // Navigate again to trigger histograms. NavigateFrame(kNonAdUrl, main_frame); @@ -1864,8 +1987,8 @@ ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 0); + // Verify we did not trigger the intervention. + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); } TEST_F(AdsPageLoadMetricsObserverTest, @@ -1886,11 +2009,15 @@ RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); // Add enough data to trigger the intervention. + ErrorPageWaiter waiter(web_contents()); ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1); - histogram_tester().ExpectTotalCount( - SuffixedHistogram("HeavyAds.InterventionType2"), 1); + EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame)); + waiter.WaitForError(); + histogram_tester().ExpectUniqueSample( + SuffixedHistogram("HeavyAds.InterventionType2"), + FrameData::HeavyAdStatus::kNetwork, 1); // This histogram should not be recorded when the blocklist is disabled. histogram_tester().ExpectTotalCount( @@ -1913,10 +2040,13 @@ RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); // Add enough data to trigger the intervention. + ErrorPageWaiter waiter(web_contents()); ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1); // Verify the intervention triggered. + EXPECT_TRUE(HasInterventionReportsAfterFlush(ad_frame)); + waiter.WaitForError(); histogram_tester().ExpectUniqueSample( SuffixedHistogram("HeavyAds.InterventionType2"), FrameData::HeavyAdStatus::kNetwork, 1); @@ -1931,9 +2061,7 @@ (heavy_ad_thresholds::kMaxNetworkBytes / 1024) + 1); // Verify the intervention did not occur again. - histogram_tester().ExpectUniqueSample( - SuffixedHistogram("HeavyAds.InterventionType2"), - FrameData::HeavyAdStatus::kNetwork, 1); + EXPECT_FALSE(HasInterventionReportsAfterFlush(ad_frame)); histogram_tester().ExpectBucketCount( SuffixedHistogram("HeavyAds.DisallowedByBlocklist"), true, 1); }
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc index 8548027..26e2c03f 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.cc
@@ -55,12 +55,12 @@ return ResourceMimeType::kOther; } -FrameData::FrameData(FrameTreeNodeId frame_tree_node_id, +FrameData::FrameData(FrameTreeNodeId root_frame_tree_node_id, int heavy_ad_network_threshold_noise) - : bytes_(0u), + : root_frame_tree_node_id_(root_frame_tree_node_id), + bytes_(0u), network_bytes_(0u), same_origin_bytes_(0u), - frame_tree_node_id_(frame_tree_node_id), origin_status_(OriginStatus::kUnknown), frame_navigated_(false), user_activation_status_(UserActivationStatus::kNoActivation),
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h index 0f85a8b..d34a4c0 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/frame_data.h
@@ -118,7 +118,9 @@ static ResourceMimeType GetResourceMimeType( const page_load_metrics::mojom::ResourceDataUpdatePtr& resource); - explicit FrameData(FrameTreeNodeId frame_tree_node_id, + // |root_frame_tree_node_id| is the root frame of the subtree that FrameData + // stores information for. + explicit FrameData(FrameTreeNodeId root_frame_tree_node_id, int heavy_ad_network_threshold_noise); ~FrameData(); @@ -191,7 +193,9 @@ return peak_window_start_time_; } - FrameTreeNodeId frame_tree_node_id() const { return frame_tree_node_id_; } + FrameTreeNodeId root_frame_tree_node_id() const { + return root_frame_tree_node_id_; + } OriginStatus origin_status() const { return origin_status_; } @@ -253,6 +257,10 @@ // computing the status. HeavyAdStatus ComputeHeavyAdStatus(bool use_network_threshold_noise) const; + // The frame tree node id of root frame of the subtree that |this| is + // tracking information for. + const FrameTreeNodeId root_frame_tree_node_id_; + // The most recently updated timing received for this frame. page_load_metrics::mojom::PageLoadTimingPtr timing_; @@ -310,7 +318,6 @@ // The number of bytes that are same origin to the root ad frame. size_t same_origin_bytes_; - const FrameTreeNodeId frame_tree_node_id_; OriginStatus origin_status_; bool frame_navigated_; UserActivationStatus user_activation_status_;
diff --git a/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc b/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc index 3a63105..0b818d2 100644 --- a/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc +++ b/chrome/browser/performance_manager/graph/page_node_impl_browsertest.cc
@@ -254,8 +254,9 @@ RunOriginTrialTestOnPMSequence(mojom::InterventionPolicy::kOptOut); } +// Flaky. https://crbug.com/1014282 IN_PROC_BROWSER_TEST_F(PageNodeImplBrowserTest, - PageFreezeOriginTrialOptOutOptIn) { + DISABLED_PageFreezeOriginTrialOptOutOptIn) { ui_test_utils::NavigateToURL( browser(), GURL(base::JoinString({kOriginTrialTestHostname, k2iFramesPath, kOriginTrialOptOutOptIn},
diff --git a/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc b/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc index 987ea4c3..d5b4fe03 100644 --- a/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc +++ b/chrome/browser/predictors/loading_predictor_tab_helper_unittest.cc
@@ -98,6 +98,10 @@ content::RenderFrameHost* rfh) { auto navigation = content::NavigationSimulator::CreateRendererInitiated(GURL(url), rfh); + // These tests simulate loading events manually. + // TODO(ahemery): Consider refactoring to rely on load events dispatched by + // NavigationSimulator. + navigation->SetKeepLoading(true); navigation->Start(); navigation->Commit(); } @@ -114,6 +118,11 @@ TEST_F(LoadingPredictorTabHelperTest, MainFrameNavigationWithRedirects) { auto navigation = content::NavigationSimulator::CreateRendererInitiated( GURL("http://test.org"), main_rfh()); + // The problem here is that mock_collector_ is a strict mock, which expects + // a particular set of loading events and fails when extra is present. + // TOOO(ahemery): Consider refactoring this to rely on loading events + // in NavigationSimulator. + navigation->SetKeepLoading(true); auto navigation_id = CreateNavigationID(GetTabID(), "http://test.org"); EXPECT_CALL(*mock_collector_, RecordStartNavigation(navigation_id)); navigation->Start(); @@ -143,6 +152,11 @@ TEST_F(LoadingPredictorTabHelperTest, MainFrameNavigationFailed) { auto navigation = content::NavigationSimulator::CreateRendererInitiated( GURL("http://test.org"), main_rfh()); + navigation->SetKeepLoading(true); + // The problem here is that mock_collector_ is a strict mock, which expects + // a particular set of loading events and fails when extra is present. + // TOOO(ahemery): Consider refactoring this to rely on loading events + // in NavigationSimulator. auto navigation_id = CreateNavigationID(GetTabID(), "http://test.org"); EXPECT_CALL(*mock_collector_, RecordStartNavigation(navigation_id)); EXPECT_CALL(*mock_collector_,
diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc index 4d9be47..ef148eb 100644 --- a/chrome/browser/printing/print_view_manager.cc +++ b/chrome/browser/printing/print_view_manager.cc
@@ -26,7 +26,6 @@ #include "content/public/browser/web_contents.h" #include "content/public/common/webplugininfo.h" #include "ipc/ipc_message_macros.h" -#include "mojo/public/cpp/bindings/associated_remote.h" #include "printing/buildflags/buildflags.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" @@ -90,9 +89,13 @@ is_switching_to_system_dialog_ = true; SetPrintingRFH(print_preview_rfh_); - int32_t id = print_preview_rfh_->GetRoutingID(); - return PrintNowInternal(print_preview_rfh_, - std::make_unique<PrintMsg_PrintForSystemDialog>(id)); + + // Don't print / print preview interstitials or crashed tabs. + if (IsInterstitialOrCrashed()) + return false; + + GetPrintRenderFrame(print_preview_rfh_)->PrintForSystemDialog(); + return true; } bool PrintViewManager::BasicPrint(content::RenderFrameHost* rfh) { @@ -143,22 +146,20 @@ if (print_preview_state_ == NOT_PREVIEWING) return; -// Send ClosePrintPreview message for 'afterprint' event. +// Send OnPrintPreviewDialogClosed message for 'afterprint' event. #if defined(OS_WIN) - // On Windows, we always send ClosePrintPreviewDialog. It's ok to dispatch + // On Windows, we always send OnPrintPreviewDialogClosed. It's ok to dispatch // 'afterprint' at this timing because system dialog printing on // Windows doesn't need the original frame. bool send_message = true; #else - // On non-Windows, we don't need to send ClosePrintPreviewDialog when we are - // switching to system dialog. PrintRenderFrameHelper is responsible to + // On non-Windows, we don't need to send OnPrintPreviewDialogClosed when we + // are switching to system dialog. PrintRenderFrameHelper is responsible to // dispatch 'afterprint' event. bool send_message = !is_switching_to_system_dialog_; #endif - if (send_message) { - print_preview_rfh_->Send(new PrintMsg_ClosePrintPreviewDialog( - print_preview_rfh_->GetRoutingID())); - } + if (send_message) + GetPrintRenderFrame(print_preview_rfh_)->OnPrintPreviewDialogClosed(); is_switching_to_system_dialog_ = false; if (print_preview_state_ == SCRIPTED_PREVIEW) { @@ -193,6 +194,21 @@ PrintViewManagerBase::RenderFrameDeleted(render_frame_host); } +const mojo::AssociatedRemote<printing::mojom::PrintRenderFrame>& +PrintViewManager::GetPrintRenderFrame(content::RenderFrameHost* rfh) { + if (!print_render_frame_.is_bound()) { + rfh->GetRemoteAssociatedInterfaces()->GetInterface(&print_render_frame_); + print_render_frame_.set_disconnect_handler( + base::BindOnce(&PrintViewManager::OnPrintRenderFrameDisconnected, + base::Unretained(this))); + } + return print_render_frame_; +} + +void PrintViewManager::OnPrintRenderFrameDisconnected() { + print_render_frame_.reset(); +} + bool PrintViewManager::PrintPreview( content::RenderFrameHost* rfh, mojom::PrintRendererAssociatedPtrInfo print_renderer, @@ -207,10 +223,8 @@ if (IsInterstitialOrCrashed()) return false; - mojo::AssociatedRemote<mojom::PrintRenderFrame> print_render_frame; - rfh->GetRemoteAssociatedInterfaces()->GetInterface(&print_render_frame); - print_render_frame->InitiatePrintPreview(std::move(print_renderer), - has_selection); + GetPrintRenderFrame(rfh)->InitiatePrintPreview(std::move(print_renderer), + has_selection); DCHECK(!print_preview_rfh_); print_preview_rfh_ = rfh;
diff --git a/chrome/browser/printing/print_view_manager.h b/chrome/browser/printing/print_view_manager.h index 4cabe91d..76f9e7b 100644 --- a/chrome/browser/printing/print_view_manager.h +++ b/chrome/browser/printing/print_view_manager.h
@@ -9,6 +9,7 @@ #include "chrome/browser/printing/print_view_manager_base.h" #include "components/printing/common/print.mojom.h" #include "content/public/browser/web_contents_user_data.h" +#include "mojo/public/cpp/bindings/associated_remote.h" #include "printing/buildflags/buildflags.h" namespace content { @@ -79,6 +80,15 @@ struct FrameDispatchHelper; + // Helper method to fetch the PrintRenderFrame associated remote interface + // pointer. + const mojo::AssociatedRemote<printing::mojom::PrintRenderFrame>& + GetPrintRenderFrame(content::RenderFrameHost* rfh); + + // Resets the PrintRenderFrame associated remote when it's disconnected from + // its receiver. + void OnPrintRenderFrameDisconnected(); + // Helper method for PrintPreviewNow() and PrintPreviewWithRenderer(). // Initiate print preview of the current document by first notifying the // renderer. Since this happens asynchronously, the print preview dialog @@ -117,6 +127,10 @@ // flag is true between PrintForSystemDialogNow() and PrintPreviewDone(). bool is_switching_to_system_dialog_ = false; + // Used to transmit mojom interface method calls to the PrintRenderFrame + // associated remote. + mojo::AssociatedRemote<printing::mojom::PrintRenderFrame> print_render_frame_; + WEB_CONTENTS_USER_DATA_KEY_DECL(); DISALLOW_COPY_AND_ASSIGN(PrintViewManager);
diff --git a/chrome/browser/profiles/off_the_record_profile_impl.cc b/chrome/browser/profiles/off_the_record_profile_impl.cc index 9085b98..d2ac0790 100644 --- a/chrome/browser/profiles/off_the_record_profile_impl.cc +++ b/chrome/browser/profiles/off_the_record_profile_impl.cc
@@ -532,7 +532,7 @@ content::NativeFileSystemPermissionContext* OffTheRecordProfileImpl::GetNativeFileSystemPermissionContext() { - return NativeFileSystemPermissionContextFactory::GetForProfile(this).get(); + return NativeFileSystemPermissionContextFactory::GetForProfile(this); } bool OffTheRecordProfileImpl::IsSameProfile(Profile* profile) {
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc index f5a7af2..2ecafc3 100644 --- a/chrome/browser/profiles/profile_impl.cc +++ b/chrome/browser/profiles/profile_impl.cc
@@ -1345,7 +1345,7 @@ content::NativeFileSystemPermissionContext* ProfileImpl::GetNativeFileSystemPermissionContext() { - return NativeFileSystemPermissionContextFactory::GetForProfile(this).get(); + return NativeFileSystemPermissionContextFactory::GetForProfile(this); } bool ProfileImpl::IsSameProfile(Profile* profile) {
diff --git a/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js b/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js index 18acfee..a3d1e88b 100644 --- a/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js +++ b/chrome/browser/resources/chromeos/camera/src/js/device/constraints_preferrer.js
@@ -306,11 +306,14 @@ // sorted by user preference of constant fps. const getFpses = (r) => { let constFpses = [null]; - if (this.constFpsInfo_[deviceId][r].includes(30) && - this.constFpsInfo_[deviceId][r].includes(60)) { - const prefFps = - this.prefFpses_[deviceId] && this.prefFpses_[deviceId][r] || 30; - constFpses = prefFps == 30 ? [30, 60] : [60, 30]; + if (this.constFpsInfo_[deviceId][r].includes(30)) { + if (this.constFpsInfo_[deviceId][r].includes(60)) { + const prefFps = + this.prefFpses_[deviceId] && this.prefFpses_[deviceId][r] || 30; + constFpses = prefFps == 30 ? [30, 60] : [60, 30]; + } else { + constFpses = [30]; + } } return constFpses.map((fps) => [...r, fps]); };
diff --git a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js index 5d06cda7..8c963f0 100644 --- a/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js +++ b/chrome/browser/resources/chromeos/internet_detail_dialog/internet_detail_dialog.js
@@ -523,7 +523,7 @@ return; } const config = this.getDefaultConfigProperties_(); - config.proxySetings = event.detail; + config.proxySettings = event.detail; this.setMojoNetworkProperties_(config); },
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js index c0f3295..e48f39cd 100644 --- a/chrome/browser/resources/local_ntp/local_ntp.js +++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -1269,6 +1269,7 @@ // this forwards key modifiers. This enables Shift+Enter to open a match // in a new window, for example. matchEls[selected].dispatchEvent(new MouseEvent('click', e)); + e.preventDefault(); } return; } @@ -1494,14 +1495,15 @@ const realboxWrapper = $(IDS.REALBOX_INPUT_WRAPPER); realboxWrapper.appendChild(realboxMatchesEl); - const hasMatches = matches.length > 0; - realboxWrapper.classList.toggle(CLASSES.SHOW_MATCHES, hasMatches); - - if (hasMatches) { + if (matches.length > 0) { + realboxWrapper.classList.add(CLASSES.SHOW_MATCHES); realboxWrapper.addEventListener('keydown', onRealboxKeyDown); + autocompleteMatches = matches; + } else { + // removesEventListener('keydown', onRealboxKeyDown) and also clears + // |autocompleteMatches|. + hideRealboxMatches(); } - - autocompleteMatches = matches; } /**
diff --git a/chrome/browser/resources/settings/autofill_page/payments_section.html b/chrome/browser/resources/settings/autofill_page/payments_section.html index 55257fa..2109d33 100644 --- a/chrome/browser/resources/settings/autofill_page/payments_section.html +++ b/chrome/browser/resources/settings/autofill_page/payments_section.html
@@ -52,7 +52,7 @@ label="$i18n{enableCreditCardFIDOAuthLabel}" sub-label="$i18n{enableCreditCardFIDOAuthSublabel}" pref="{{prefs.autofill.credit_card_fido_auth_enabled}}" - on-click="setFIDOAuthenticationEnabledState_"> + on-change="setFIDOAuthenticationEnabledState_"> </settings-toggle-button> </template> <template is="dom-if"
diff --git a/chrome/browser/task_manager/providers/service_worker_task_provider.cc b/chrome/browser/task_manager/providers/service_worker_task_provider.cc index b4f9c7d..b6545a1 100644 --- a/chrome/browser/task_manager/providers/service_worker_task_provider.cc +++ b/chrome/browser/task_manager/providers/service_worker_task_provider.cc
@@ -13,7 +13,6 @@ #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_source.h" #include "content/public/browser/render_process_host.h" -#include "content/public/browser/service_worker_context.h" #include "content/public/browser/service_worker_running_info.h" #include "content/public/browser/storage_partition.h" #include "content/public/common/child_process_host.h" @@ -23,9 +22,7 @@ namespace task_manager { -ServiceWorkerTaskProvider::ServiceWorkerTaskProvider() - : scoped_context_observer_(this) {} - +ServiceWorkerTaskProvider::ServiceWorkerTaskProvider() = default; ServiceWorkerTaskProvider::~ServiceWorkerTaskProvider() = default; Task* ServiceWorkerTaskProvider::GetTaskOfUrlRequest(int child_id,
diff --git a/chrome/browser/task_manager/providers/service_worker_task_provider.h b/chrome/browser/task_manager/providers/service_worker_task_provider.h index 54f95f8..05ac7496 100644 --- a/chrome/browser/task_manager/providers/service_worker_task_provider.h +++ b/chrome/browser/task_manager/providers/service_worker_task_provider.h
@@ -14,12 +14,9 @@ #include "chrome/browser/task_manager/providers/task_provider.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" +#include "content/public/browser/service_worker_context.h" #include "content/public/browser/service_worker_context_observer.h" -namespace content { -class ServiceWorkerContext; -} - namespace task_manager { // This provides tasks that describe running service workers @@ -82,7 +79,7 @@ ScopedObserver<content::ServiceWorkerContext, content::ServiceWorkerContextObserver> - scoped_context_observer_; + scoped_context_observer_{this}; DISALLOW_COPY_AND_ASSIGN(ServiceWorkerTaskProvider); };
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index 6c4ca84b..8776b47 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -3516,6 +3516,8 @@ "app_list/search/common/file_icon_util.h", "app_list/search/common/url_icon_source.cc", "app_list/search/common/url_icon_source.h", + "app_list/search/cros_action_history/cros_action_recorder.cc", + "app_list/search/cros_action_history/cros_action_recorder.h", "app_list/search/drive_quick_access_provider.cc", "app_list/search/drive_quick_access_provider.h", "app_list/search/drive_quick_access_result.cc", @@ -3591,6 +3593,7 @@ "//ash/app_list", "//ash/public/cpp/app_list/vector_icons", "//ash/resources/vector_icons", + "//chrome/browser/ui/app_list/search/cros_action_history:cros_action_proto", "//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_event_logger_proto", "//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_predictor_proto", "//chrome/browser/ui/app_list/search/search_result_ranker:app_list_launch_recorder_proto",
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn b/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn new file mode 100644 index 0000000..19d6c058 --- /dev/null +++ b/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn
@@ -0,0 +1,11 @@ +# Copyright 2018 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//third_party/protobuf/proto_library.gni") + +proto_library("cros_action_proto") { + sources = [ + "cros_action.proto", + ] +}
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/OWNERS b/chrome/browser/ui/app_list/search/cros_action_history/OWNERS new file mode 100644 index 0000000..bea249a --- /dev/null +++ b/chrome/browser/ui/app_list/search/cros_action_history/OWNERS
@@ -0,0 +1,4 @@ +charleszhao@chromium.org +jiameng@chromium.org +xiyuan@chromium.org +tby@chromium.org
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action.proto b/chrome/browser/ui/app_list/search/cros_action_history/cros_action.proto new file mode 100644 index 0000000..08b1803a --- /dev/null +++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action.proto
@@ -0,0 +1,33 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +syntax = "proto2"; + +option optimize_for = LITE_RUNTIME; + +package app_list; + +// CrOSActionProto records one individual action. +message CrOSActionProto { + // Name of the action. + optional string action_name = 1; + // Time of the action. + optional int64 secs_since_epoch = 2; + + // CrOSActionConditionProto records other features that may useful for this + // action. + message CrOSActionConditionProto { + // name of the condition. + optional string name = 1; + // value of the condition. + optional int32 value = 2; + } + + repeated CrOSActionConditionProto conditions = 3; +} + +// A history consists a list of actions. +message CrOSActionHistoryProto { + repeated CrOSActionProto actions = 1; +}
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.cc b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.cc new file mode 100644 index 0000000..9fec75b --- /dev/null +++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.cc
@@ -0,0 +1,126 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h" + +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/files/important_file_writer.h" +#include "base/metrics/metrics_hashes.h" +#include "base/no_destructor.h" +#include "base/strings/string_number_conversions.h" +#include "base/task/post_task.h" +#include "base/threading/scoped_blocking_call.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/ui/app_list/search/cros_action_history/cros_action.pb.h" + +namespace app_list { +namespace { + +constexpr int kSecondsPerDay = 86400; + +void SaveToDiskOnWorkerThread(const CrOSActionHistoryProto actions, + const base::FilePath action_filepath) { + // Loads proto string from local disk. + std::string proto_str; + if (!base::ReadFileToString(action_filepath, &proto_str)) + proto_str.clear(); + + CrOSActionHistoryProto actions_to_write; + if (!actions_to_write.ParseFromString(proto_str)) + actions_to_write.Clear(); + + actions_to_write.MergeFrom(actions); + const std::string proto_str_to_write = actions_to_write.SerializeAsString(); + + // Create directory if it's not there yet. + const bool create_directory_sucess = + base::CreateDirectory(action_filepath.DirName()); + DCHECK(create_directory_sucess) + << "Error create directory for " << action_filepath; + const bool write_success = base::ImportantFileWriter::WriteFileAtomically( + action_filepath, proto_str_to_write, "CrOSActionHistory"); + DCHECK(write_success) << "Error writing action_file " << action_filepath; +} + +} // namespace + +constexpr char CrOSActionRecorder::kActionHistoryDir[]; +constexpr base::TimeDelta CrOSActionRecorder::kSaveInternal; + +CrOSActionRecorder::CrOSActionRecorder() + : should_log_(false), + should_hash_(true), + last_save_timestamp_(base::Time::Now()) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + Profile* profile = ProfileManager::GetPrimaryUserProfile(); + if (profile) { + profile_path_ = profile->GetPath(); + } else { + // If profile_path_ is not set, then there is no point to record anything. + should_log_ = false; + } + + task_runner_ = base::CreateSequencedTaskRunner( + {base::ThreadPool(), base::TaskPriority::BEST_EFFORT, base::MayBlock(), + base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}); +} + +CrOSActionRecorder::~CrOSActionRecorder() = default; + +CrOSActionRecorder* CrOSActionRecorder::GetCrosActionRecorder() { + static base::NoDestructor<CrOSActionRecorder> recorder; + return recorder.get(); +} + +void CrOSActionRecorder::RecordAction( + const CrOSAction& action, + const std::vector<std::pair<std::string, int>>& conditions) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!should_log_) + return; + + CrOSActionProto& cros_action_proto = *actions_.add_actions(); + + // Record action. + cros_action_proto.set_action_name( + MaybeHashed(std::get<0>(action), should_hash_)); + cros_action_proto.set_secs_since_epoch(base::Time::Now().ToDoubleT()); + + // Record conditions. + for (const auto& pair : conditions) { + auto& condition = *cros_action_proto.add_conditions(); + condition.set_name(MaybeHashed(pair.first, should_hash_)); + condition.set_value(pair.second); + } + + // May flush to disk. + MaybeFlushToDisk(); +} + +void CrOSActionRecorder::MaybeFlushToDisk() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + const base::Time now = base::Time::Now(); + if (now - last_save_timestamp_ >= kSaveInternal) { + last_save_timestamp_ = now; + + // Writes the predictor proto to disk asynchronously. + const std::string day = base::NumberToString( + static_cast<int>(now.ToDoubleT() / kSecondsPerDay)); + const base::FilePath action_filepath = + profile_path_.Append(CrOSActionRecorder::kActionHistoryDir).Append(day); + + task_runner_->PostTask( + FROM_HERE, base::BindOnce(&SaveToDiskOnWorkerThread, + std::move(actions_), action_filepath)); + actions_.Clear(); + } +} + +std::string CrOSActionRecorder::MaybeHashed(const std::string& input, + const bool should_hash) { + return should_hash ? base::NumberToString(base::HashMetricName(input)) + : input; +} +} // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h new file mode 100644 index 0000000..b6a9a3fa --- /dev/null +++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h
@@ -0,0 +1,81 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_APP_LIST_SEARCH_CROS_ACTION_HISTORY_CROS_ACTION_RECORDER_H_ +#define CHROME_BROWSER_UI_APP_LIST_SEARCH_CROS_ACTION_HISTORY_CROS_ACTION_RECORDER_H_ + +#include <cstdint> +#include <string> +#include <tuple> +#include <vector> + +#include "base/files/file_path.h" +#include "base/memory/scoped_refptr.h" +#include "base/sequenced_task_runner.h" +#include "base/time/time.h" +#include "chrome/browser/ui/app_list/search/cros_action_history/cros_action.pb.h" + +namespace app_list { + +class CrOSActionHistoryProto; + +// CrOSActionRecorder is a singleton that used to record any CrOSAction. +// CrOSAction may contains: +// (1) App-launchings. +// (2) File-openings. +// (3) Settings. +// (4) Tab-navigations. +// and so on. +class CrOSActionRecorder { + public: + using CrOSActionName = std::string; + using CrOSAction = std::tuple<CrOSActionName>; + + CrOSActionRecorder(); + ~CrOSActionRecorder(); + // Get the pointer of the singleton. + static CrOSActionRecorder* GetCrosActionRecorder(); + + // Record a user |action| with |conditions|. + void RecordAction( + const CrOSAction& action, + const std::vector<std::pair<std::string, int>>& conditions = {}); + + private: + friend class CrOSActionRecorderTest; + + // kSaveInternal controls how often we save the action history to disk. + static constexpr base::TimeDelta kSaveInternal = + base::TimeDelta::FromHours(1); + // The sub-directory in profile path where the action history is stored. + static constexpr char kActionHistoryDir[] = "cros_action_history/"; + + // Saves the current |actions_| to disk and clear it when certain + // criteria is met. + void MaybeFlushToDisk(); + + // Hashes the |input| if |should_hash| is true; otherwise return |input|. + static std::string MaybeHashed(const std::string& input, bool should_hash); + + // Controls whether the logging is enabled. + bool should_log_ = false; + // Controls whether to hash the action and condition names before log. + bool should_hash_ = true; + // The timestamp of last save to disk. + base::Time last_save_timestamp_; + // A list of actions since last save. + CrOSActionHistoryProto actions_; + // Profile path to save the actions. + base::FilePath profile_path_; + + scoped_refptr<base::SequencedTaskRunner> task_runner_; + + SEQUENCE_CHECKER(sequence_checker_); + + DISALLOW_COPY_AND_ASSIGN(CrOSActionRecorder); +}; + +} // namespace app_list + +#endif // CHROME_BROWSER_UI_APP_LIST_SEARCH_CROS_ACTION_HISTORY_CROS_ACTION_RECORDER_H_
diff --git a/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc new file mode 100644 index 0000000..cc05f54 --- /dev/null +++ b/chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc
@@ -0,0 +1,204 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/app_list/search/cros_action_history/cros_action_recorder.h" +#include "base/files/file_util.h" +#include "base/files/scoped_temp_dir.h" +#include "base/metrics/metrics_hashes.h" +#include "base/strings/string_number_conversions.h" +#include "base/test/scoped_mock_clock_override.h" +#include "base/test/task_environment.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace app_list { +namespace { + +constexpr int kSecondsPerDay = 86400; +// Condition values start from this number for tests. +constexpr int kConditionValue = 11; + +} // namespace + +// Test functions of CrOSActionRecorder. +class CrOSActionRecorderTest : public testing::Test { + protected: + void SetUp() override { + Test::SetUp(); + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + profile_path_ = temp_dir_.GetPath(); + actions_ = {"Action0", "Action1", "Action2"}; + conditions_ = {"Condition0", "Condition1", "Condition2"}; + + save_internal_secs_ = CrOSActionRecorder::kSaveInternal.InSeconds(); + + // Set time_ to be base::Time::UnixEpoch(). + time_.Advance(base::TimeDelta::FromSeconds(11612937600)); + + // Reset the CrOSActionRecorder to be default. + CrOSActionRecorder::GetCrosActionRecorder()->actions_.Clear(); + CrOSActionRecorder::GetCrosActionRecorder()->last_save_timestamp_ = + base::Time::UnixEpoch(); + CrOSActionRecorder::GetCrosActionRecorder()->should_log_ = false; + CrOSActionRecorder::GetCrosActionRecorder()->should_hash_ = true; + CrOSActionRecorder::GetCrosActionRecorder()->profile_path_ = profile_path_; + } + + CrOSActionHistoryProto GetCrOSActionHistory() { + return CrOSActionRecorder::GetCrosActionRecorder()->actions_; + } + + void EnableLog() { + CrOSActionRecorder::GetCrosActionRecorder()->should_log_ = true; + } + + void DisableHash() { + CrOSActionRecorder::GetCrosActionRecorder()->should_hash_ = false; + } + + // Read and Parse log from |day|-th file. + CrOSActionHistoryProto ReadLog(const int day) { + const base::FilePath action_file_path = + profile_path_.Append(CrOSActionRecorder::kActionHistoryDir) + .Append(base::NumberToString(day)); + std::string proto_str; + CHECK(base::ReadFileToString(action_file_path, &proto_str)); + CrOSActionHistoryProto actions_history; + CHECK(actions_history.ParseFromString(proto_str)); + return actions_history; + } + + // Expects |action| to be actions_[i], with certain features. + void ExpectCrOSAction(const CrOSActionProto& action, + const int i, + const int64_t secs_since_epoch, + const bool should_hash = true) { + EXPECT_EQ(action.action_name(), + CrOSActionRecorder::MaybeHashed(actions_[i], should_hash)); + EXPECT_EQ(action.secs_since_epoch(), secs_since_epoch); + EXPECT_EQ(action.conditions_size(), 1); + const CrOSActionProto::CrOSActionConditionProto& condition = + action.conditions(0); + EXPECT_EQ(condition.name(), + CrOSActionRecorder::MaybeHashed(conditions_[i], should_hash)); + EXPECT_EQ(condition.value(), i + kConditionValue); + } + + void Wait() { task_environment_.RunUntilIdle(); } + + std::vector<std::string> actions_; + std::vector<std::string> conditions_; + base::ScopedTempDir temp_dir_; + base::FilePath profile_path_; + int64_t save_internal_secs_ = 0; + base::ScopedMockClockOverride time_; + base::test::TaskEnvironment task_environment_{ + base::test::TaskEnvironment::MainThreadType::DEFAULT, + base::test::TaskEnvironment::ThreadPoolExecutionMode::QUEUED}; +}; + +// Log is disabled by default. +TEST_F(CrOSActionRecorderTest, NoLogAsDefault) { + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction({actions_[0]}); + EXPECT_TRUE(GetCrOSActionHistory().actions().empty()); +} + +// Log is hashed by default. +TEST_F(CrOSActionRecorderTest, HashActionNameByDefault) { + EnableLog(); + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction( + {actions_[0]}, {{conditions_[0], kConditionValue}}); + const CrOSActionHistoryProto& action_history = GetCrOSActionHistory(); + EXPECT_EQ(action_history.actions_size(), 1); + + ExpectCrOSAction(action_history.actions(0), 0, 0); +} + +// DisableHash will log action name and condition name explicitly. +TEST_F(CrOSActionRecorderTest, DisableHashToLogExplicitly) { + EnableLog(); + DisableHash(); + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction( + {actions_[0]}, {{conditions_[0], kConditionValue}}); + const CrOSActionHistoryProto& action_history = GetCrOSActionHistory(); + EXPECT_EQ(action_history.actions_size(), 1); + ExpectCrOSAction(action_history.actions(0), 0, 0, false); +} + +// Check a new file is written every day for expected values. +TEST_F(CrOSActionRecorderTest, WriteToNewFileEveryDay) { + EnableLog(); + time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_)); + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction( + {actions_[0]}, {{conditions_[0], kConditionValue}}); + Wait(); + + // Expect the GetCrOSActionHistory() is already cleared. + EXPECT_TRUE(GetCrOSActionHistory().actions().empty()); + // Expect the log to have correct values. + const CrOSActionHistoryProto action_history_0 = ReadLog(0); + EXPECT_EQ(action_history_0.actions_size(), 1); + ExpectCrOSAction(action_history_0.actions(0), 0, save_internal_secs_); + + // Advance for 1 day. + time_.Advance(base::TimeDelta::FromSeconds(kSecondsPerDay)); + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction( + {actions_[1]}, {{conditions_[1], kConditionValue + 1}}); + Wait(); + + // Expect the GetCrOSActionHistory() is already cleared. + EXPECT_TRUE(GetCrOSActionHistory().actions().empty()); + // Expect the new log file to have correct values. + const CrOSActionHistoryProto action_history_1 = ReadLog(1); + EXPECT_EQ(action_history_1.actions_size(), 1); + ExpectCrOSAction(action_history_1.actions(0), 1, + save_internal_secs_ + kSecondsPerDay); +} + +// Check that the result is appended to previous log within a day. +TEST_F(CrOSActionRecorderTest, AppendToFileEverySaveInAday) { + EnableLog(); + time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_)); + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction( + {actions_[0]}, {{conditions_[0], kConditionValue}}); + Wait(); + + // Expect the GetCrOSActionHistory() is already cleared. + EXPECT_TRUE(GetCrOSActionHistory().actions().empty()); + // Expect the log has correct values. + const CrOSActionHistoryProto action_history_0 = ReadLog(0); + EXPECT_EQ(action_history_0.actions_size(), 1); + ExpectCrOSAction(action_history_0.actions(0), 0, save_internal_secs_); + + // Advance for 1 kSaveInternal. + time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_)); + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction( + {actions_[1]}, {{conditions_[1], kConditionValue + 1}}); + Wait(); + + // Expect the GetCrOSActionHistory() is already cleared. + EXPECT_TRUE(GetCrOSActionHistory().actions().empty()); + // Expect the log to have correct values (two actions). + const CrOSActionHistoryProto action_history_1 = ReadLog(0); + EXPECT_EQ(action_history_1.actions_size(), 2); + ExpectCrOSAction(action_history_1.actions(0), 0, save_internal_secs_); + ExpectCrOSAction(action_history_1.actions(1), 1, save_internal_secs_ * 2); + + // Advance for 3 kSaveInternal. + time_.Advance(base::TimeDelta::FromSeconds(save_internal_secs_ * 3)); + CrOSActionRecorder::GetCrosActionRecorder()->RecordAction( + {actions_[2]}, {{conditions_[2], kConditionValue + 2}}); + Wait(); + + // Expect the GetCrOSActionHistory() is already cleared. + EXPECT_TRUE(GetCrOSActionHistory().actions().empty()); + // Expect the log to have correct values (three actions). + const CrOSActionHistoryProto action_history_2 = ReadLog(0); + EXPECT_EQ(action_history_2.actions_size(), 3); + ExpectCrOSAction(action_history_1.actions(0), 0, save_internal_secs_); + ExpectCrOSAction(action_history_1.actions(1), 1, save_internal_secs_ * 2); + ExpectCrOSAction(action_history_2.actions(2), 2, save_internal_secs_ * 5); +} + +} // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc index e3fd40cd..b07b6d8 100644 --- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc +++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
@@ -210,7 +210,8 @@ config, chromeos::ProfileHelper::IsEphemeralUserProfile(profile_)); } else if (GetFieldTrialParamByFeatureAsBool( app_list_features::kEnableQueryBasedMixedTypesRanker, - "use_aggregated_model", false)) { + "use_aggregated_model", false) || + app_list_features::IsAggregatedMlSearchRankingEnabled()) { use_aggregated_search_ranking_inference_ = true; } else { // Item ranker model.
diff --git a/chrome/browser/ui/ash/network/network_state_notifier.cc b/chrome/browser/ui/ash/network/network_state_notifier.cc index 46af5b6..21fd9e2e 100644 --- a/chrome/browser/ui/ash/network/network_state_notifier.cc +++ b/chrome/browser/ui/ash/network/network_state_notifier.cc
@@ -70,13 +70,14 @@ return kNotificationWifiOffIcon; } -void ShowErrorNotification(const std::string& service_path, +// |identifier| may be a service path or guid. +void ShowErrorNotification(const std::string& identifier, const std::string& notification_id, const std::string& network_type, const base::string16& title, const base::string16& message, const base::Closure& callback) { - NET_LOG(ERROR) << "ShowErrorNotification: " << service_path << ": " + NET_LOG(ERROR) << "ShowErrorNotification: " << identifier << ": " << base::UTF16ToUTF8(title); std::unique_ptr<message_center::Notification> notification = ash::CreateSystemNotification( @@ -160,7 +161,7 @@ NetworkHandler::Get()->network_state_handler()->GetNetworkState( service_path); if (network && network->type() == shill::kTypeVPN) - connected_vpn_guid_.clear(); + connected_vpn_.reset(); RemoveConnectNotification(); } @@ -188,18 +189,30 @@ NetworkHandler::Get()->network_state_handler()->GetNetworkState( service_path); if (network && network->type() == shill::kTypeVPN) - connected_vpn_guid_.clear(); + connected_vpn_.reset(); } void NetworkStateNotifier::ActiveNetworksChanged( const std::vector<const NetworkState*>& active_networks) { + const NetworkState* active_vpn = nullptr; std::string active_non_vpn_network_guid; + // NOTE: The list of 'active' networks includes disconnected networks that + // were connected or connecting. for (const auto* network : active_networks) { - if (network->type() == shill::kTypeVPN) - UpdateVpnConnectionState(network); - else if (active_non_vpn_network_guid.empty()) - active_non_vpn_network_guid = network->guid(); + if (network->type() == shill::kTypeVPN) { + // Make sure that if there is an edge case with two active VPNs that we + // track the first active one. + if (!active_vpn) + active_vpn = network; + } else if (active_non_vpn_network_guid.empty()) { + // We are only interested in the "default" (first active) non virtual + // network. + if (network->IsConnectingOrConnected()) + active_non_vpn_network_guid = network->guid(); + } } + UpdateVpnConnectionState(active_vpn); + // If the default network changes, allow the out of credits notification to be // shown again. A delay prevents the notification from being shown too // frequently (see below). @@ -219,16 +232,41 @@ UpdateCellularActivating(network); } -void NetworkStateNotifier::UpdateVpnConnectionState(const NetworkState* vpn) { - if (vpn->guid() == connected_vpn_guid_) { - if (!vpn->IsConnectingOrConnected()) { - if (vpn->GetVpnProviderType() != shill::kProviderArcVpn) { - ShowVpnDisconnectedNotification(vpn); - } - connected_vpn_guid_.clear(); +void NetworkStateNotifier::UpdateVpnConnectionState( + const NetworkState* active_vpn) { + if (!active_vpn || !active_vpn->IsConnectingOrConnected()) { + // No connecting or connected VPN. If we were tracking a connected VPN, + // show a notification. + if (connected_vpn_) { + ShowVpnDisconnectedNotification(connected_vpn_.get()); + connected_vpn_.reset(); } - } else if (vpn->IsConnectedState()) { - connected_vpn_guid_ = vpn->guid(); + return; + } + if (connected_vpn_ && active_vpn->guid() == connected_vpn_->guid) { + // The connected VPN is unchanged and still connected or connecting. If the + // VPN goes from connected -> connecting -> connected, we do not want to + // show a notification. + return; + } + + // Do not track ARC VPNs for showing disconnect notifications. Also make sure + // |connected_vpn_| is cleared when connected to an ARC VPN. + if (active_vpn->GetVpnProviderType() == shill::kProviderArcVpn) { + connected_vpn_.reset(); + return; + } + + // If we are connected to a new VPN, track it as the connected VPN. Do not + // show a notification, even if we were tracking a different connected VPN, + // since we are still connected to a VPN (i.e. just replace |connected_vpn_|). + if (active_vpn->IsConnectedState()) { + connected_vpn_ = + std::make_unique<VpnDetails>(active_vpn->guid(), active_vpn->name()); + } else { + // |active_vpn| is connecting. Clear |connected_vpn_| so that we do not + // show a notification for the previous VPN. + connected_vpn_.reset(); } } @@ -453,7 +491,7 @@ base::string16 error_msg; if (!network_error_details.empty()) { - // network_name should't be empty if network_error_details is set. + // network_name shouldn't be empty if network_error_details is set. error_msg = l10n_util::GetStringFUTF16( IDS_NETWORK_CONNECTION_ERROR_MESSAGE_WITH_SERVER_MESSAGE, base::UTF8ToUTF16(network_name), error, @@ -478,16 +516,16 @@ weak_ptr_factory_.GetWeakPtr(), guid)); } -void NetworkStateNotifier::ShowVpnDisconnectedNotification( - const NetworkState* vpn) { +void NetworkStateNotifier::ShowVpnDisconnectedNotification(VpnDetails* vpn) { + DCHECK(vpn); base::string16 error_msg = l10n_util::GetStringFUTF16( - IDS_NETWORK_VPN_CONNECTION_LOST_BODY, base::UTF8ToUTF16(vpn->name())); + IDS_NETWORK_VPN_CONNECTION_LOST_BODY, base::UTF8ToUTF16(vpn->name)); ShowErrorNotification( - vpn->path(), kNetworkConnectNotificationId, shill::kTypeVPN, + vpn->guid, kNetworkConnectNotificationId, shill::kTypeVPN, l10n_util::GetStringUTF16(IDS_NETWORK_VPN_CONNECTION_LOST_TITLE), error_msg, base::Bind(&NetworkStateNotifier::ShowNetworkSettings, - weak_ptr_factory_.GetWeakPtr(), vpn->guid())); + weak_ptr_factory_.GetWeakPtr(), vpn->guid)); } void NetworkStateNotifier::ShowNetworkSettings(const std::string& network_id) {
diff --git a/chrome/browser/ui/ash/network/network_state_notifier.h b/chrome/browser/ui/ash/network/network_state_notifier.h index 143c7a2..30daf85 100644 --- a/chrome/browser/ui/ash/network/network_state_notifier.h +++ b/chrome/browser/ui/ash/network/network_state_notifier.h
@@ -55,6 +55,13 @@ static const char kNetworkOutOfCreditsNotificationId[]; private: + struct VpnDetails { + VpnDetails(const std::string& guid, const std::string& name) + : guid(guid), name(name) {} + std::string guid; + std::string name; + }; + // NetworkConnectionObserver void ConnectToNetworkRequested(const std::string& service_path) override; void ConnectSucceeded(const std::string& service_path) override; @@ -80,7 +87,7 @@ const std::string& error_name, const std::string& service_path, const base::DictionaryValue& shill_properties); - void ShowVpnDisconnectedNotification(const NetworkState* vpn); + void ShowVpnDisconnectedNotification(VpnDetails* vpn); // Removes any existing connect notifications. void RemoveConnectNotification(); @@ -89,7 +96,7 @@ bool UpdateDefaultNetwork(const NetworkState* network); // Helper methods to update state and check for notifications. - void UpdateVpnConnectionState(const NetworkState* vpn); + void UpdateVpnConnectionState(const NetworkState* active_vpn); void UpdateCellularOutOfCredits(); void UpdateCellularActivating(const NetworkState* cellular); @@ -99,9 +106,9 @@ // Shows the mobile setup dialog for |network_id|. void ShowMobileSetup(const std::string& network_id); - // Set to the GUID of the connected VPN network if any, otherwise empty. - // Used for displaying VPN disconnected notification. - std::string connected_vpn_guid_; + // The details of the connected VPN network if any, otherwise null. + // Used for displaying the VPN disconnected notification. + std::unique_ptr<VpnDetails> connected_vpn_; // Tracks state for out of credits notification. bool did_show_out_of_credits_ = false;
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index d0dd501..ea919c4 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc
@@ -2320,10 +2320,6 @@ if (tab_strip_model_->GetIndexOfWebContents(source) == TabStripModel::kNoTab) return; - // We ignore |INVALIDATE_TYPE_AUDIO| since we subscribe to - // RecentlyAudibleHelper via |OnTabAudibilityChanged()|. - changed_flags &= ~content::INVALIDATE_TYPE_AUDIO; - // Do some synchronous updates. if (changed_flags & content::INVALIDATE_TYPE_URL) { if (source == tab_strip_model_->GetActiveWebContents()) { @@ -2413,8 +2409,8 @@ } // Updates that don't depend upon the selected state go here. - if (flags & - (content::INVALIDATE_TYPE_TAB | content::INVALIDATE_TYPE_TITLE)) { + if (flags & (content::INVALIDATE_TYPE_TAB | content::INVALIDATE_TYPE_TITLE | + content::INVALIDATE_TYPE_AUDIO)) { tab_strip_model_->UpdateWebContentsStateAt( tab_strip_model_->GetIndexOfWebContents(contents), TabChangeType::kAll); @@ -2592,16 +2588,10 @@ zoom::ZoomController::FromWebContents(web_contents)->AddObserver(this); content_translate_driver->AddObserver(this); BookmarkTabHelper::FromWebContents(web_contents)->AddObserver(this); - audibility_subscriptions_[web_contents] = - RecentlyAudibleHelper::FromWebContents(web_contents) - ->RegisterCallback( - base::BindRepeating(&Browser::OnTabAudibilityChanged, - base::Unretained(this), web_contents)); } else { zoom::ZoomController::FromWebContents(web_contents)->RemoveObserver(this); content_translate_driver->RemoveObserver(this); BookmarkTabHelper::FromWebContents(web_contents)->RemoveObserver(this); - audibility_subscriptions_.erase(web_contents); } } @@ -2913,9 +2903,3 @@ return contents; } - -void Browser::OnTabAudibilityChanged(content::WebContents* contents, - bool recently_audible) { - tab_strip_model_->UpdateWebContentsStateAt( - tab_strip_model_->GetIndexOfWebContents(contents), TabChangeType::kAll); -}
diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h index 1d8277f..82e2ee1 100644 --- a/chrome/browser/ui/browser.h +++ b/chrome/browser/ui/browser.h
@@ -29,7 +29,6 @@ #include "chrome/browser/ui/chrome_web_modal_dialog_manager_delegate.h" #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h" #include "chrome/browser/ui/profile_chooser_constants.h" -#include "chrome/browser/ui/recently_audible_helper.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" #include "chrome/browser/ui/unload_controller.h" #include "components/content_settings/core/common/content_settings.h" @@ -1008,10 +1007,6 @@ const std::string& partition_id, content::SessionStorageNamespace* session_storage_namespace); - // Callback for RecentlyAudibleHelper. - void OnTabAudibilityChanged(content::WebContents* contents, - bool recently_audible); - // Data members ///////////////////////////////////////////////////////////// std::vector<InterstitialObserver*> interstitial_observers_; @@ -1153,13 +1148,6 @@ extension_browser_window_helper_; #endif - // These subscriptions are returned by RecentlyAudibleHelper when registering - // a callback. They de-register the callback when destroyed and safely handle - // destruction of the associated RecentlyAudibleHelper. - std::map<content::WebContents*, - std::unique_ptr<RecentlyAudibleHelper::Subscription>> - audibility_subscriptions_; - // The following factory is used for chrome update coalescing. base::WeakPtrFactory<Browser> chrome_updater_factory_{this};
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc index e18fa6e..301764f 100644 --- a/chrome/browser/ui/search/search_tab_helper.cc +++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -115,6 +115,9 @@ // calculates and logs the total load time. void RecordNewTabLoadTime(content::WebContents* contents) { CoreTabHelper* core_tab_helper = CoreTabHelper::FromWebContents(contents); + // CoreTabHelper can be null in unittests. + if (!core_tab_helper) + return; if (core_tab_helper->new_tab_start_time().is_null()) return;
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc index 654c318ff..9283555 100644 --- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc +++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc
@@ -46,8 +46,7 @@ : DesktopWindowTreeHostWin(native_widget_delegate, desktop_native_widget_aura), browser_view_(browser_view), - browser_frame_(browser_frame), - profile_observer_(this) { + browser_frame_(browser_frame) { profile_observer_.Add( &g_browser_process->profile_manager()->GetProfileAttributesStorage()); }
diff --git a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h index 7093adf..5968e03 100644 --- a/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h +++ b/chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.h
@@ -98,8 +98,8 @@ // This is used to monitor when the window icon needs to be updated because // the icon badge has changed (e.g., avatar icon changed). - ScopedObserver<ProfileAttributesStorage, BrowserDesktopWindowTreeHostWin> - profile_observer_; + ScopedObserver<ProfileAttributesStorage, ProfileAttributesStorage::Observer> + profile_observer_{this}; base::win::ScopedHICON icon_handle_;
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc index ac4e1f3..b52f59e 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -199,14 +199,17 @@ double size_fraction = 1.0; if (state < open_state_fraction_) size_fraction = state / open_state_fraction_; - if (state > (1.0 - open_state_fraction_)) + else if (state > (1.0 - open_state_fraction_)) size_fraction = (1.0 - state) / open_state_fraction_; return size_fraction; } bool IconLabelBubbleView::IsShrinking() const { - return slide_animation_.is_animating() && !is_animation_paused_ && - slide_animation_.GetCurrentValue() > (1.0 - open_state_fraction_); + if (!slide_animation_.is_animating() || is_animation_paused_) + return false; + return slide_animation_.IsClosing() || + (open_state_fraction_ < 1.0 && + slide_animation_.GetCurrentValue() > (1.0 - open_state_fraction_)); } bool IconLabelBubbleView::ShowBubble(const ui::Event& event) { @@ -401,10 +404,6 @@ return 0; } -base::TimeDelta IconLabelBubbleView::GetSlideDurationTime() const { - return base::TimeDelta::FromMilliseconds(3000); -} - int IconLabelBubbleView::GetWidthBetweenIconAndSeparator() const { return ShouldShowSeparator() ? kIconLabelBubbleSpaceBesideSeparator : 0; } @@ -421,13 +420,23 @@ return "IconLabelBubbleView"; } -void IconLabelBubbleView::SetUpForInOutAnimation() { +void IconLabelBubbleView::SetUpForAnimation() { SetInkDropMode(InkDropMode::ON); SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY); label()->SetElideBehavior(gfx::NO_ELIDE); label()->SetVisible(false); - slide_animation_.SetSlideDuration(GetSlideDurationTime()); + slide_animation_.SetSlideDuration(base::TimeDelta::FromMilliseconds(150)); slide_animation_.SetTweenType(kIconLabelBubbleTweenType); + open_state_fraction_ = 1.0; +} + +void IconLabelBubbleView::SetUpForInOutAnimation() { + SetUpForAnimation(); + // The duration of the slide includes the appearance of the label (600ms), + // statically showing the label (1800ms), and hiding the label (600ms). The + // proportion of time spent in each portion of the animation is controlled by + // kIconLabelBubbleOpenTimeFraction. + slide_animation_.SetSlideDuration(base::TimeDelta::FromMilliseconds(3000)); open_state_fraction_ = gfx::Tween::CalculateValue( kIconLabelBubbleTweenType, kIconLabelBubbleOpenTimeFraction); }
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h index d99cba0..c91c085 100644 --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.h
@@ -155,7 +155,12 @@ gfx::Size GetSizeForLabelWidth(int label_width) const; - // Set up for icons that animate their labels in and then out. + // Set up for icons that animate their labels in. Animating out is initiated + // manually. + void SetUpForAnimation(); + + // Set up for icons that animate their labels in and then automatically out + // after a period of time. void SetUpForInOutAnimation(); // Animates the view in and disables highlighting for hover and focus. If a @@ -191,10 +196,6 @@ // to the suggestion text, like in the SelectedKeywordView. virtual int GetExtraInternalSpacing() const; - // Subclasses that want a different duration for the slide animation can - // override this method. - virtual base::TimeDelta GetSlideDurationTime() const; - // Returns the width after the icon and before the separator. If the // separator is not shown, and ShouldShowExtraEndSpace() is false, this // returns 0.
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.cc b/chrome/browser/ui/views/location_bar/location_icon_view.cc index 8b298aa0..222fab0 100644 --- a/chrome/browser/ui/views/location_bar/location_icon_view.cc +++ b/chrome/browser/ui/views/location_bar/location_icon_view.cc
@@ -31,10 +31,9 @@ LocationIconView::LocationIconView(const gfx::FontList& font_list, Delegate* delegate) : IconLabelBubbleView(font_list), delegate_(delegate) { - label()->SetElideBehavior(gfx::ELIDE_MIDDLE); SetID(VIEW_ID_LOCATION_ICON); Update(true); - SetUpForInOutAnimation(); + SetUpForAnimation(); // Readability is guaranteed by the omnibox theme. label()->SetAutoColorReadabilityEnabled(false); @@ -262,10 +261,6 @@ return IconLabelBubbleView::IsTriggerableEvent(event); } -double LocationIconView::WidthMultiplier() const { - return GetAnimationValue(); -} - gfx::Size LocationIconView::GetMinimumSizeForPreferredSize( gfx::Size size) const { const int kMinCharacters = 10; @@ -273,7 +268,3 @@ GetSizeForLabelWidth(font_list().GetExpectedTextWidth(kMinCharacters))); return size; } - -base::TimeDelta LocationIconView::GetSlideDurationTime() const { - return base::TimeDelta::FromMilliseconds(150); -}
diff --git a/chrome/browser/ui/views/location_bar/location_icon_view.h b/chrome/browser/ui/views/location_bar/location_icon_view.h index 915b094..30fa313 100644 --- a/chrome/browser/ui/views/location_bar/location_icon_view.h +++ b/chrome/browser/ui/views/location_bar/location_icon_view.h
@@ -106,7 +106,6 @@ protected: // IconLabelBubbleView: bool IsTriggerableEvent(const ui::Event& event) override; - double WidthMultiplier() const override; private: // The security level when the location icon was last updated. Used to decide @@ -121,8 +120,6 @@ // Returns what the minimum size would be if the preferred size were |size|. gfx::Size GetMinimumSizeForPreferredSize(gfx::Size size) const; - base::TimeDelta GetSlideDurationTime() const override; - Delegate* delegate_; // Used to scope the lifetime of asynchronous icon fetch callbacks to the
diff --git a/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc b/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc index dff389a..7ab2f6f 100644 --- a/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc +++ b/chrome/browser/ui/views/native_file_system/native_file_system_access_icon_view.cc
@@ -8,6 +8,7 @@ #include "base/strings/utf_string_conversions.h" #include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/native_file_system/chrome_native_file_system_permission_context.h" +#include "chrome/browser/native_file_system/native_file_system_permission_context_factory.h" #include "chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.h" #include "chrome/grit/generated_resources.h" #include "components/vector_icons/vector_icons.h" @@ -72,47 +73,31 @@ url::Origin origin = url::Origin::Create(GetWebContents()->GetLastCommittedURL()); - ChromeNativeFileSystemPermissionContext::GetPermissionGrantsFromUIThread( - GetWebContents()->GetBrowserContext(), origin, - GetWebContents()->GetMainFrame()->GetProcess()->GetID(), - GetWebContents()->GetMainFrame()->GetRoutingID(), - base::BindOnce( - [](int frame_tree_node_id, const url::Origin& origin, - ChromeNativeFileSystemPermissionContext::Grants grants) { - auto* web_contents = - content::WebContents::FromFrameTreeNodeId(frame_tree_node_id); - if (!web_contents || - url::Origin::Create(web_contents->GetLastCommittedURL()) != - origin) { - // If web-contents has navigated to a different origin while we - // were looking up current usage, don't show the dialog to avoid - // showing the dialog for the wrong origin. - return; - } + auto* web_contents = GetWebContents(); + auto* context = + NativeFileSystemPermissionContextFactory::GetForProfileIfExists( + web_contents->GetBrowserContext()); + if (!context) { + // If there is no context, there can't be any usage either, so just return. + return; + } - NativeFileSystemUsageBubbleView::Usage usage; - if (base::FeatureList::IsEnabled( - kNativeFileSystemReadOnlyUsageIndicatorFeature)) { - usage.readable_directories = - web_contents->GetNativeFileSystemDirectoryHandles(); - } - usage.writable_files = std::move(grants.file_write_grants); - usage.writable_directories = - std::move(grants.directory_write_grants); + ChromeNativeFileSystemPermissionContext::Grants grants = + context->GetPermissionGrants( + origin, web_contents->GetMainFrame()->GetProcess()->GetID(), + web_contents->GetMainFrame()->GetRoutingID()); - if (usage.readable_directories.empty() && - usage.writable_files.empty() && - usage.writable_directories.empty()) { - // Async looking up of usage might result in there no longer being - // usage by the time we get here, in that case just abort and - // don't show the bubble. - return; - } + NativeFileSystemUsageBubbleView::Usage usage; + if (base::FeatureList::IsEnabled( + kNativeFileSystemReadOnlyUsageIndicatorFeature)) { + usage.readable_directories = + web_contents->GetNativeFileSystemDirectoryHandles(); + } + usage.writable_files = std::move(grants.file_write_grants); + usage.writable_directories = std::move(grants.directory_write_grants); - NativeFileSystemUsageBubbleView::ShowBubble(web_contents, origin, - std::move(usage)); - }, - GetWebContents()->GetMainFrame()->GetFrameTreeNodeId(), origin)); + NativeFileSystemUsageBubbleView::ShowBubble(web_contents, origin, + std::move(usage)); } const gfx::VectorIcon& NativeFileSystemAccessIconView::GetVectorIcon() const {
diff --git a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc index 49a2166..ee39794 100644 --- a/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc +++ b/chrome/browser/ui/views/native_file_system/native_file_system_usage_bubble_view.cc
@@ -10,6 +10,7 @@ #include "base/stl_util.h" #include "chrome/app/vector_icons/vector_icons.h" #include "chrome/browser/native_file_system/chrome_native_file_system_permission_context.h" +#include "chrome/browser/native_file_system/native_file_system_permission_context_factory.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_window.h" @@ -137,12 +138,12 @@ label->SetHorizontalAlignment(gfx::ALIGN_LEFT); label_layout->SetFlexForView(label, 1); auto button = views::CreateVectorToggleImageButton(this); - views::SetImageFromVectorIcon(button.get(), kCaretDownIcon, - ui::TableModel::kIconSize, icon_color); + views::SetImageFromVectorIconWithColor( + button.get(), kCaretDownIcon, ui::TableModel::kIconSize, icon_color); button->SetTooltipText( l10n_util::GetStringUTF16(IDS_NATIVE_FILE_SYSTEM_USAGE_EXPAND)); - views::SetToggledImageFromVectorIcon(button.get(), kCaretUpIcon, - ui::TableModel::kIconSize, icon_color); + views::SetToggledImageFromVectorIconWithColor( + button.get(), kCaretUpIcon, ui::TableModel::kIconSize, icon_color); button->SetToggledTooltipText( l10n_util::GetStringUTF16(IDS_NATIVE_FILE_SYSTEM_USAGE_COLLAPSE)); expand_collapse_button_ = label_container->AddChildView(std::move(button)); @@ -427,9 +428,12 @@ return; content::BrowserContext* profile = web_contents()->GetBrowserContext(); - ChromeNativeFileSystemPermissionContext:: - RevokeGrantsForOriginAndTabFromUIThread( - profile, origin_, - web_contents()->GetMainFrame()->GetProcess()->GetID(), - web_contents()->GetMainFrame()->GetRoutingID()); + auto* context = + NativeFileSystemPermissionContextFactory::GetForProfileIfExists(profile); + if (!context) + return; + + context->RevokeGrantsForOriginAndTab( + origin_, web_contents()->GetMainFrame()->GetProcess()->GetID(), + web_contents()->GetMainFrame()->GetRoutingID()); }
diff --git a/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc b/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc index 0a3d90a6..5ea8f88 100644 --- a/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc +++ b/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc
@@ -17,21 +17,51 @@ AppManagementShelfDelegate::AppManagementShelfDelegate( AppManagementPageHandler* page_handler) : page_handler_(page_handler) { - ChromeLauncherController::instance()->shelf_model()->AddObserver(this); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + shelf_model->AddObserver(this); } AppManagementShelfDelegate::~AppManagementShelfDelegate() { - ChromeLauncherController::instance()->shelf_model()->RemoveObserver(this); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + shelf_model->RemoveObserver(this); } bool AppManagementShelfDelegate::IsPinned(const std::string& app_id) { - return ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return false; + } + return launcher_controller->IsAppPinned(app_id); } bool AppManagementShelfDelegate::IsPolicyPinned( const std::string& app_id) const { - auto* shelf_item = - ChromeLauncherController::instance()->GetItem(ash::ShelfID(app_id)); + auto* launcher_controller = ChromeLauncherController::instance(); + + if (!launcher_controller) { + return false; + } + + auto* shelf_item = launcher_controller->GetItem(ash::ShelfID(app_id)); + // If the app does not exist on the launcher, it has not been pinned by // policy. return shelf_item && shelf_item->pinned_by_policy; @@ -39,21 +69,39 @@ void AppManagementShelfDelegate::SetPinned(const std::string& app_id, OptionalBool pinned) { + auto* launcher_controller = ChromeLauncherController::instance(); + + if (!launcher_controller) { + return; + } + if (pinned == OptionalBool::kTrue) { - ChromeLauncherController::instance()->PinAppWithID(app_id); + launcher_controller->PinAppWithID(app_id); } else if (pinned == OptionalBool::kFalse) { - ChromeLauncherController::instance()->UnpinAppWithID(app_id); + launcher_controller->UnpinAppWithID(app_id); } else { NOTREACHED(); } } void AppManagementShelfDelegate::ShelfItemAdded(int index) { - const std::string& app_id = ChromeLauncherController::instance() - ->shelf_model() - ->items()[index] - .id.app_id; - bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + if (index >= shelf_model->item_count()) { + // index out of bounds. + return; + } + + const std::string& app_id = shelf_model->items()[index].id.app_id; + bool is_pinned = launcher_controller->IsAppPinned(app_id); page_handler_->OnPinnedChanged(app_id, is_pinned); } @@ -68,11 +116,23 @@ void AppManagementShelfDelegate::ShelfItemChanged( int index, const ash::ShelfItem& old_item) { - const std::string& app_id = ChromeLauncherController::instance() - ->shelf_model() - ->items()[index] - .id.app_id; - bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + if (index >= shelf_model->item_count()) { + // index out of bounds. + return; + } + + const std::string& app_id = shelf_model->items()[index].id.app_id; + bool is_pinned = launcher_controller->IsAppPinned(app_id); page_handler_->OnPinnedChanged(app_id, is_pinned); }
diff --git a/chrome/browser/web_applications/BUILD.gn b/chrome/browser/web_applications/BUILD.gn index 3538802..3381563 100644 --- a/chrome/browser/web_applications/BUILD.gn +++ b/chrome/browser/web_applications/BUILD.gn
@@ -63,6 +63,7 @@ if (is_chromeos) { deps += [ "//ash/public/cpp:cpp", + "//chromeos/components/media_app_ui", "//chromeos/constants", "//components/arc:arc_base", "//components/arc/mojom",
diff --git a/chrome/browser/web_applications/extensions/BUILD.gn b/chrome/browser/web_applications/extensions/BUILD.gn index 66999b4..7fb53aa 100644 --- a/chrome/browser/web_applications/extensions/BUILD.gn +++ b/chrome/browser/web_applications/extensions/BUILD.gn
@@ -84,6 +84,7 @@ "bookmark_app_registrar_browsertest.cc", "system_web_app_manager_browsertest.cc", "system_web_app_manager_browsertest.h", + "system_web_app_manager_browsertest_chromeos.cc", "web_app_audio_focus_browsertest.cc", ] @@ -95,6 +96,7 @@ "//chrome/app/theme:chrome_unscaled_resources_grit", "//chrome/browser", "//chrome/browser/ui", + "//chrome/browser/web_applications", "//chrome/browser/web_applications:web_app_test_group", "//chrome/browser/web_applications:web_applications_on_extensions", "//chrome/browser/web_applications:web_applications_on_extensions_test_support", @@ -107,4 +109,11 @@ "//extensions/common", "//net:test_support", ] + + if (is_chromeos) { + deps += [ + "//chromeos/components/media_app_ui", + "//chromeos/constants", + ] + } }
diff --git a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc index 7af49ae1..b9773bb 100644 --- a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.cc
@@ -126,17 +126,36 @@ DISALLOW_COPY_AND_ASSIGN(TestWebUIControllerFactory); }; -SystemWebAppManagerBrowserTest::SystemWebAppManagerBrowserTest() - : factory_(std::make_unique<TestWebUIControllerFactory>()), - test_web_app_provider_creator_( - base::BindOnce(&SystemWebAppManagerBrowserTest::CreateWebAppProvider, - base::Unretained(this))) { +SystemWebAppManagerBrowserTest::SystemWebAppManagerBrowserTest( + bool install_mock) { scoped_feature_list_.InitWithFeatures({features::kSystemWebApps}, {}); - content::WebUIControllerFactory::RegisterFactory(factory_.get()); + if (install_mock) { + factory_ = std::make_unique<TestWebUIControllerFactory>(); + test_web_app_provider_creator_ = + std::make_unique<TestWebAppProviderCreator>(base::BindOnce( + &SystemWebAppManagerBrowserTest::CreateWebAppProvider, + base::Unretained(this))); + content::WebUIControllerFactory::RegisterFactory(factory_.get()); + } } SystemWebAppManagerBrowserTest::~SystemWebAppManagerBrowserTest() { - content::WebUIControllerFactory::UnregisterFactoryForTesting(factory_.get()); + if (factory_) { + content::WebUIControllerFactory::UnregisterFactoryForTesting( + factory_.get()); + } +} + +// static +const extensions::Extension* +SystemWebAppManagerBrowserTest::GetExtensionForAppBrowser(Browser* browser) { + return static_cast<extensions::HostedAppBrowserController*>( + browser->app_controller()) + ->GetExtensionForTesting(); +} + +SystemWebAppManager& SystemWebAppManagerBrowserTest::GetManager() { + return WebAppProvider::Get(browser()->profile())->system_web_app_manager(); } std::unique_ptr<KeyedService> @@ -165,18 +184,20 @@ Browser* SystemWebAppManagerBrowserTest::WaitForSystemAppInstallAndLaunch( SystemAppType system_app_type) { - Profile* profile = browser()->profile(); - // Wait for the System Web Apps to install. - base::RunLoop run_loop; - test_system_web_app_manager_->on_apps_synchronized().Post( - FROM_HERE, run_loop.QuitClosure()); - run_loop.Run(); + if (factory_) { + base::RunLoop run_loop; + GetManager().on_apps_synchronized().Post(FROM_HERE, run_loop.QuitClosure()); + run_loop.Run(); + } else { + GetManager().InstallSystemAppsForTesting(); + } base::Optional<AppId> app_id = - test_system_web_app_manager_->GetAppIdForSystemApp(system_app_type); + GetManager().GetAppIdForSystemApp(system_app_type); DCHECK(app_id.has_value()); + Profile* profile = browser()->profile(); const extensions::Extension* app = extensions::ExtensionRegistry::Get(profile)->enabled_extensions().GetByID( app_id.value()); @@ -187,11 +208,8 @@ // Test that System Apps install correctly with a manifest. IN_PROC_BROWSER_TEST_F(SystemWebAppManagerBrowserTest, Install) { - const extensions::Extension* app = - static_cast<extensions::HostedAppBrowserController*>( - WaitForSystemAppInstallAndLaunch(SystemAppType::SETTINGS) - ->app_controller()) - ->GetExtensionForTesting(); + const extensions::Extension* app = GetExtensionForAppBrowser( + WaitForSystemAppInstallAndLaunch(SystemAppType::SETTINGS)); EXPECT_EQ("Test System App", app->name()); EXPECT_EQ(SkColorSetRGB(0, 0xFF, 0), extensions::AppThemeColorInfo::GetThemeColor(app)); @@ -202,9 +220,7 @@ EXPECT_EQ(extensions::util::GetInstalledPwaForUrl( browser()->profile(), content::GetWebUIURL("test-system-app/")), app); - EXPECT_TRUE(WebAppProvider::Get(browser()->profile()) - ->system_web_app_manager() - .IsSystemWebApp(app->id())); + EXPECT_TRUE(GetManager().IsSystemWebApp(app->id())); } // Check the toolbar is not shown for system web apps for pages on the chrome://
diff --git a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h index 1d88faa..1dcba66 100644 --- a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h +++ b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h
@@ -15,6 +15,10 @@ class Browser; class KeyedService; +namespace extensions { +class Extension; +} + namespace web_app { class TestSystemWebAppManager; @@ -23,10 +27,23 @@ class SystemWebAppManagerBrowserTest : public InProcessBrowserTest { public: - SystemWebAppManagerBrowserTest(); + // Performs common initialization for testing SystemWebAppManager features. + // If true, |install_mock| installs a WebUIController that serves a mock + // System PWA, and ensures the WebAppProvider associated with the startup + // profile is a TestWebAppProviderCreator. + explicit SystemWebAppManagerBrowserTest(bool install_mock = true); + ~SystemWebAppManagerBrowserTest() override; - protected: + // Gets the Extension* from the HostedAppBrowserController associated with + // |browser|. + static const extensions::Extension* GetExtensionForAppBrowser( + Browser* browser); + + // Returns the SystemWebAppManager for browser()->profile(). This will be a + // TestSystemWebAppManager if initialized with |install_mock| true. + SystemWebAppManager& GetManager(); + Browser* WaitForSystemAppInstallAndLaunch(SystemAppType system_app_type); private: @@ -34,7 +51,7 @@ base::test::ScopedFeatureList scoped_feature_list_; std::unique_ptr<TestWebUIControllerFactory> factory_; - TestWebAppProviderCreator test_web_app_provider_creator_; + std::unique_ptr<TestWebAppProviderCreator> test_web_app_provider_creator_; TestSystemWebAppManager* test_system_web_app_manager_ = nullptr; DISALLOW_COPY_AND_ASSIGN(SystemWebAppManagerBrowserTest);
diff --git a/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest_chromeos.cc b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest_chromeos.cc new file mode 100644 index 0000000..928803ab --- /dev/null +++ b/chrome/browser/web_applications/extensions/system_web_app_manager_browsertest_chromeos.cc
@@ -0,0 +1,83 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/web_applications/extensions/system_web_app_manager_browsertest.h" + +#include "base/strings/utf_string_conversions.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/extensions/extension_util.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/web_applications/system_web_app_manager.h" +#include "chromeos/components/media_app_ui/url_constants.h" +#include "chromeos/constants/chromeos_features.h" +#include "content/public/browser/web_ui.h" +#include "content/public/test/test_navigation_observer.h" +#include "content/public/test/test_utils.h" +#include "extensions/common/extension.h" +#include "extensions/common/manifest.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/aura/window.h" + +namespace web_app { + +namespace { + +class SystemWebAppManagerBrowserTestChromeos + : public SystemWebAppManagerBrowserTest { + public: + SystemWebAppManagerBrowserTestChromeos() + : SystemWebAppManagerBrowserTest(false /* install_mock */) { + scoped_feature_list_.InitAndEnableFeature(chromeos::features::kMediaApp); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; +}; + +} // namespace + +// Test that the Media App installs and launches correctly. Runs some spot +// checks on the manifest. +IN_PROC_BROWSER_TEST_F(SystemWebAppManagerBrowserTestChromeos, MediaApp) { + Browser* app_browser = WaitForSystemAppInstallAndLaunch(SystemAppType::MEDIA); + const extensions::Extension* installed_app = + extensions::util::GetInstalledPwaForUrl( + browser()->profile(), + content::GetWebUIURL(chromeos::kChromeUIMediaAppHost)); + + EXPECT_TRUE(GetManager().IsSystemWebApp(installed_app->id())); + EXPECT_TRUE(installed_app->from_bookmark()); + + EXPECT_EQ("Media App", installed_app->name()); + EXPECT_EQ(base::ASCIIToUTF16("Media App"), + app_browser->window()->GetNativeWindow()->GetTitle()); + EXPECT_EQ(extensions::Manifest::EXTERNAL_COMPONENT, + installed_app->location()); + + // The installed app should match the opened app window. + EXPECT_EQ(installed_app, GetExtensionForAppBrowser(app_browser)); + content::WebContents* web_contents = + app_browser->tab_strip_model()->GetActiveWebContents(); + + // The opened window should be showing chrome://media-app with attached WebUI. + EXPECT_EQ(chromeos::kChromeUIMediaAppURL, web_contents->GetVisibleURL()); + + content::TestNavigationObserver observer(web_contents); + observer.WaitForNavigationFinished(); + EXPECT_EQ(chromeos::kChromeUIMediaAppURL, + web_contents->GetLastCommittedURL()); + + content::WebUI* web_ui = web_contents->GetCommittedWebUI(); + ASSERT_TRUE(web_ui); + EXPECT_TRUE(web_ui->GetController()); + + // A completed navigation could change the window title. Check again. + EXPECT_EQ(base::ASCIIToUTF16("Media App"), + app_browser->window()->GetNativeWindow()->GetTitle()); +} + +} // namespace web_app
diff --git a/chrome/browser/web_applications/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_app_manager.cc index f1cafc02..deb78f7 100644 --- a/chrome/browser/web_applications/system_web_app_manager.cc +++ b/chrome/browser/web_applications/system_web_app_manager.cc
@@ -31,6 +31,7 @@ #if defined(OS_CHROMEOS) #include "ash/public/cpp/app_list/internal_app_id_constants.h" #include "chrome/browser/chromeos/extensions/default_web_app_ids.h" +#include "chromeos/components/media_app_ui/url_constants.h" #include "chromeos/constants/chromeos_features.h" #endif // defined(OS_CHROMEOS) @@ -72,6 +73,10 @@ constexpr char kChromeTerminalPWAURL[] = "chrome://terminal/html/pwa.html"; infos[SystemAppType::TERMINAL].install_url = GURL(kChromeTerminalPWAURL); } + if (SystemWebAppManager::IsAppEnabled(SystemAppType::MEDIA)) { + constexpr char kChromeMediaAppURL[] = "chrome://media-app/pwa.html"; + infos[SystemAppType::MEDIA].install_url = {GURL(kChromeMediaAppURL)}; + } #endif // OS_CHROMEOS return infos; @@ -121,6 +126,8 @@ chromeos::features::kCameraSystemWebApp); case SystemAppType::TERMINAL: return base::FeatureList::IsEnabled(features::kTerminalSystemApp); + case SystemAppType::MEDIA: + return base::FeatureList::IsEnabled(chromeos::features::kMediaApp); } #else return false;
diff --git a/chrome/browser/web_applications/system_web_app_manager.h b/chrome/browser/web_applications/system_web_app_manager.h index 1609222..8ff8f01 100644 --- a/chrome/browser/web_applications/system_web_app_manager.h +++ b/chrome/browser/web_applications/system_web_app_manager.h
@@ -41,6 +41,7 @@ DISCOVER, CAMERA, TERMINAL, + MEDIA, }; // The configuration options for a System App.
diff --git a/chrome/browser/web_launch/web_launch_files_helper.cc b/chrome/browser/web_launch/web_launch_files_helper.cc index 7e3e9f5..2c6c25d 100644 --- a/chrome/browser/web_launch/web_launch_files_helper.cc +++ b/chrome/browser/web_launch/web_launch_files_helper.cc
@@ -23,30 +23,6 @@ #include "third_party/blink/public/mojom/native_file_system/native_file_system_directory_handle.mojom.h" #include "url/origin.h" -namespace { - -// Converts |paths| to |NativeFileSystemEntries|, which can be manipulated by -// |context|. Must be called on IO thread. -std::vector<blink::mojom::NativeFileSystemEntryPtr> GetEntries( - scoped_refptr<content::NativeFileSystemEntryFactory> entry_factory, - content::NativeFileSystemEntryFactory::BindingContext context, - std::vector<base::FilePath> paths) { - DCHECK_CURRENTLY_ON(content::BrowserThread::IO); - DCHECK(entry_factory); - - std::vector<blink::mojom::NativeFileSystemEntryPtr> launch_entries; - launch_entries.reserve(paths.size()); - - for (const auto& path : paths) { - launch_entries.push_back( - entry_factory->CreateFileEntryFromPath(context, path)); - } - - return launch_entries; -} - -} // namespace - namespace web_launch { WEB_CONTENTS_USER_DATA_KEY_IMPL(WebLaunchFilesHelper) @@ -93,23 +69,20 @@ web_contents->GetMainFrame()->GetProcess()->GetID(), web_contents->GetMainFrame()->GetRoutingID()); - base::PostTaskAndReplyWithResult( - FROM_HERE, {content::BrowserThread::IO}, - base::BindOnce(&GetEntries, std::move(entry_factory), std::move(context), - std::move(launch_paths)), - base::BindOnce(&WebLaunchFilesHelper::SetLaunchEntries, - weak_ptr_factory.GetWeakPtr())); + launch_entries_.reserve(launch_paths.size()); + for (const auto& path : launch_paths) { + launch_entries_.push_back( + entry_factory->CreateFileEntryFromPath(context, path)); + } + + // Asynchronously call MaybeSendLaunchEntries, since it may destroy |this|. + base::PostTask(FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&WebLaunchFilesHelper::MaybeSendLaunchEntries, + weak_ptr_factory.GetWeakPtr())); } + WebLaunchFilesHelper::~WebLaunchFilesHelper() = default; -void WebLaunchFilesHelper::SetLaunchEntries( - std::vector<blink::mojom::NativeFileSystemEntryPtr> launch_entries) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - - launch_entries_ = std::move(launch_entries); - MaybeSendLaunchEntries(); -} - void WebLaunchFilesHelper::MaybeSendLaunchEntries() { DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
diff --git a/chrome/browser/web_launch/web_launch_files_helper.h b/chrome/browser/web_launch/web_launch_files_helper.h index 454b8f0..fccfae3 100644 --- a/chrome/browser/web_launch/web_launch_files_helper.h +++ b/chrome/browser/web_launch/web_launch_files_helper.h
@@ -28,10 +28,9 @@ namespace web_launch { // A helper for sending launch paths to the renderer process. -// Launch files cannot be sent immediately for two reasons: -// 1) Creating NativeFileSystemFileEntries has to happen on the IO thread. -// 2) The data is stored on a document for |launch_url_|, which is not created -// until |launch_url_| is committed. +// Launch files cannot be sent immediately because the data is stored on a +// document for |launch_url_|, which is not created until |launch_url_| is +// committed. // // Note: The lifetime of this class is tied to the WebContents it is attached // to. However, in general it will be destroyed before the WebContents, when the @@ -54,10 +53,6 @@ void DidFinishNavigation(content::NavigationHandle* handle) override; private: - // Callback which fires when launch entries have been created. - void SetLaunchEntries( - std::vector<blink::mojom::NativeFileSystemEntryPtr> launch_entries); - // Sends the launch entries to the renderer if they have been created and the // renderer is ready to receive them. void MaybeSendLaunchEntries();
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn index c0e0887..3cf0e1a7 100644 --- a/chrome/common/BUILD.gn +++ b/chrome/common/BUILD.gn
@@ -590,6 +590,7 @@ "//device/vr/buildflags", "//extensions/buildflags", "//media:media_buildflags", + "//net:buildflags", "//ppapi/buildflags", "//printing/buildflags", "//rlz/buildflags",
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 3db08a52..362171b 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -340,6 +340,14 @@ "EnableAmbientAuthenticationInGuestSession", base::FEATURE_ENABLED_BY_DEFAULT}; +#if !BUILDFLAG(DISABLE_FTP_SUPPORT) +// Enables support for FTP URLs. When disabled ftp:// URLs will behave the same +// as any other URL scheme that's unknown to the browser. +// TODO(https://crbug.com/333943): FTP support is being phased out. +const base::Feature kEnableFtp{"EnableFtpSupport", + base::FEATURE_ENABLED_BY_DEFAULT}; +#endif + #if !defined(OS_ANDROID) // Upload enterprise cloud reporting without the extension. const base::Feature kEnterpriseReportingInBrowser{
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index 329cb9d..a305be4 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -16,6 +16,7 @@ #include "chrome/common/buildflags.h" #include "device/vr/buildflags/buildflags.h" #include "extensions/buildflags/buildflags.h" +#include "net/net_buildflags.h" #include "ppapi/buildflags/buildflags.h" #include "printing/buildflags/buildflags.h" #include "ui/base/buildflags.h" @@ -193,6 +194,11 @@ COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kEnableAmbientAuthenticationInIncognito; +#if !BUILDFLAG(DISABLE_FTP_SUPPORT) +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::Feature kEnableFtp; +#endif + #if !defined(OS_ANDROID) COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kEnterpriseReportingInBrowser;
diff --git a/chrome/common/extensions/api/autotest_private.idl b/chrome/common/extensions/api/autotest_private.idl index 1cddd72b..dc07467 100644 --- a/chrome/common/extensions/api/autotest_private.idl +++ b/chrome/common/extensions/api/autotest_private.idl
@@ -264,7 +264,14 @@ boolean isAnimating; boolean isVisible; }; - + + dictionary ArcAppTracingInfo { + boolean success; + double fps; + double commitDeviation; + double renderQuality; + }; + callback GetArcAppWindowInfoCallback = void (ArcAppWindowInfo info); callback LaunchArcAppCallback = void (boolean appLaunched); @@ -279,6 +286,8 @@ callback SetOverviewModeStateCallback = void(boolean finished); + callback ArcAppTracingCallback = void(ArcAppTracingInfo info); + callback WaitForDisplayRotationCallback = void (boolean success); dictionary App { @@ -614,6 +623,14 @@ static void getArcAppWindowInfo(DOMString packageName, GetArcAppWindowInfoCallback callback); + // Start ARC performance tracing for the active ARC app window. + // |callback|: Called when the operation has completed. + static void arcAppTracingStart(VoidCallback callback); + + // Stop ARC performance tracing if it was started and analyze results. + // |callback|: callback to deliver tracing results. + static void arcAppTracingStopAndAnalyze(ArcAppTracingCallback callback); + // Swap the windows in the split view. // |callback|: Called when the operation has completed. static void swapWindowsInSplitView(VoidCallback callback);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 7097bf2..2a248e2 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -295,6 +295,8 @@ sources += [ "../browser/chromeos/accessibility/speech_monitor.cc", "../browser/chromeos/accessibility/speech_monitor.h", + "../browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.cc", + "../browser/chromeos/arc/tracing/arc_app_performance_tracing_test_helper.h", "../browser/chromeos/ownership/fake_owner_settings_service.cc", "../browser/chromeos/ownership/fake_owner_settings_service.h", "../browser/chromeos/settings/scoped_cros_settings_test_helper.cc", @@ -5135,6 +5137,7 @@ "../browser/ui/app_list/search/arc/arc_app_shortcuts_search_provider_unittest.cc", "../browser/ui/app_list/search/arc/arc_playstore_search_provider_unittest.cc", "../browser/ui/app_list/search/common/file_icon_util_unittest.cc", + "../browser/ui/app_list/search/cros_action_history/cros_action_recorder_unittest.cc", "../browser/ui/app_list/search/launcher_search/launcher_search_icon_image_loader_unittest.cc", "../browser/ui/app_list/search/search_result_ranker/app_launch_event_logger_unittest.cc", "../browser/ui/app_list/search/search_result_ranker/app_launch_predictor_unittest.cc",
diff --git a/chrome/test/data/extensions/api_test/autotest_private/test.js b/chrome/test/data/extensions/api_test/autotest_private/test.js index 4b9e573..7252b3b 100644 --- a/chrome/test/data/extensions/api_test/autotest_private/test.js +++ b/chrome/test/data/extensions/api_test/autotest_private/test.js
@@ -497,6 +497,10 @@ }); }); }, + function arcAppTracingNoArcWindow() { + chrome.autotestPrivate.arcAppTracingStart(chrome.test.callbackFail( + 'Failed to start custom tracing.')); + }, ]; var arcEnabledTests = [ @@ -624,11 +628,63 @@ }, ]; +var arcPerformanceTracingTests = [ + function arcAppTracingNormal() { + chrome.autotestPrivate.arcAppTracingStart(async function() { + chrome.test.assertNoLastError(); + function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + // We generate 15 frames in test. + await sleep(250); + chrome.autotestPrivate.arcAppTracingStopAndAnalyze( + function(tracing) { + chrome.test.assertNoLastError(); + chrome.test.assertTrue(tracing.success); + // FPS is based on real time. Make sure it is positive. + chrome.test.assertTrue(tracing.fps > 0); + chrome.test.assertTrue(tracing.fps <= 60.0); + chrome.test.assertEq(216, Math.trunc(tracing.commitDeviation)); + chrome.test.assertEq(48, Math.trunc(100.0 * tracing.renderQuality)); + chrome.test.succeed(); + }); + }); + }, + function arcAppTracingStopWithoutStart() { + chrome.autotestPrivate.arcAppTracingStopAndAnalyze( + function(tracing) { + chrome.test.assertNoLastError(); + chrome.test.assertFalse(tracing.success); + chrome.test.assertEq(0, tracing.fps); + chrome.test.assertEq(0, tracing.commitDeviation); + chrome.test.assertEq(0, tracing.renderQuality); + chrome.test.succeed(); + }); + }, + function arcAppTracingDoubleStop() { + chrome.autotestPrivate.arcAppTracingStart(function() { + chrome.test.assertNoLastError(); + chrome.autotestPrivate.arcAppTracingStopAndAnalyze( + function(tracing) { + chrome.test.assertNoLastError(); + chrome.test.assertTrue(tracing.success); + chrome.autotestPrivate.arcAppTracingStopAndAnalyze( + function(tracing) { + chrome.test.assertNoLastError(); + chrome.test.assertFalse(tracing.success); + chrome.test.succeed(); + }); + }); + }); + }, +]; + var test_suites = { 'default': defaultTests, 'arcEnabled': arcEnabledTests, - 'enterprisePolicies': policyTests + 'enterprisePolicies': policyTests, + 'arcPerformanceTracing': arcPerformanceTracingTests }; chrome.test.getConfig(function(config) {
diff --git a/chrome/test/data/local_ntp/realbox_browsertest.js b/chrome/test/data/local_ntp/realbox_browsertest.js index 26fbcc1f..4129ea0f 100644 --- a/chrome/test/data/local_ntp/realbox_browsertest.js +++ b/chrome/test/data/local_ntp/realbox_browsertest.js
@@ -623,3 +623,30 @@ assertEquals(0, $(test.realbox.IDS.REALBOX_MATCHES).children.length); }; + +test.realbox.testPressEnterOnResult = function() { + test.realbox.realboxEl.value = 'hello world'; + test.realbox.realboxEl.dispatchEvent(new CustomEvent('input')); + + const matches = [test.realbox.getSearchMatch({supportsDeletion: true})]; + chrome.embeddedSearch.searchBox.onqueryautocompletedone( + {input: test.realbox.realboxEl.value, matches}); + + const matchEls = $(test.realbox.IDS.REALBOX_MATCHES).children; + assertEquals(1, matchEls.length); + + let clicked = false; + matchEls[0].onclick = () => clicked = true; + + const shiftEnter = new KeyboardEvent('keydown', { + bubbles: true, + cancelable: true, + key: 'Enter', + target: matchEls[0], + shiftKey: true, + }); + test.realbox.realboxEl.dispatchEvent(shiftEnter); + assertTrue(shiftEnter.defaultPrevented); + + assertTrue(clicked); +};
diff --git a/chromeos/components/media_app_ui/media_app_ui.cc b/chromeos/components/media_app_ui/media_app_ui.cc index 18f068b..e523899 100644 --- a/chromeos/components/media_app_ui/media_app_ui.cc +++ b/chromeos/components/media_app_ui/media_app_ui.cc
@@ -18,6 +18,9 @@ content::WebUIDataSource* source = content::WebUIDataSource::Create(kChromeUIMediaAppHost); source->SetDefaultResource(IDR_MEDIA_APP_INDEX_HTML); + source->AddResourcePath("pwa.html", IDR_MEDIA_APP_PWA_HTML); + source->AddResourcePath("manifest.json", IDR_MEDIA_APP_MANIFEST); + source->AddResourcePath("assets/app_icon_256.png", IDR_MEDIA_APP_ICON_256); return source; }
diff --git a/chromeos/components/media_app_ui/resources/manifest.json b/chromeos/components/media_app_ui/resources/manifest.json new file mode 100644 index 0000000..7fd92be --- /dev/null +++ b/chromeos/components/media_app_ui/resources/manifest.json
@@ -0,0 +1,15 @@ +{ + "name": "Media App", + "short_name": "Media App", + "start_url": "/", + "display": "standalone", + "theme_color": "#202124", + "background_color": "#3c4043", + "icons": [ + { + "src": "assets/app_icon_256.png", + "sizes": "256x256", + "type": "image/png" + } + ] +}
diff --git a/chromeos/components/media_app_ui/resources/pwa.html b/chromeos/components/media_app_ui/resources/pwa.html new file mode 100644 index 0000000..8cb86f24 --- /dev/null +++ b/chromeos/components/media_app_ui/resources/pwa.html
@@ -0,0 +1,6 @@ +<!-- Copyright 2019 The Chromium Authors. All rights reserved. + Use of this source code is governed by a BSD-style license that can be + found in the LICENSE file. --> +<!-- TODO(crbug/896575): Delete when manifest URL installs are implemented. --> +<!DOCTYPE html> +<link rel="manifest" href="manifest.json">
diff --git a/chromeos/resources/media_app_resources.grdp b/chromeos/resources/media_app_resources.grdp index e604bc30a..b11954b 100644 --- a/chromeos/resources/media_app_resources.grdp +++ b/chromeos/resources/media_app_resources.grdp
@@ -1,8 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <grit-part> + <!-- Privileged app host contents. --> <include name="IDR_MEDIA_APP_INDEX_HTML" file="../components/media_app_ui/resources/index.html" type="BINDATA" /> + <include name="IDR_MEDIA_APP_PWA_HTML" + file="../components/media_app_ui/resources/pwa.html" + type="BINDATA" /> + <include name="IDR_MEDIA_APP_MANIFEST" + file="../components/media_app_ui/resources/manifest.json" + type="BINDATA" /> + + <!-- Unprivileged guest contents. --> <include name="IDR_MEDIA_APP_APP_HTML" file="../components/media_app_ui/resources/app.html" type="BINDATA" /> @@ -17,6 +26,11 @@ <include name="IDR_MEDIA_APP_DROP_TARGET_MODULE_JS" file="../components/media_app_ui/resources/app/app/js/app_drop_target_module.js" type="BINDATA" /> + + <!-- Note the icon is fetched from the privileged origin. --> + <include name="IDR_MEDIA_APP_ICON_256" + file="../components/media_app_ui/resources/app/app/assets/app_icon_256.png" + type="BINDATA" /> </then> <else> <include name="IDR_MEDIA_APP_APP_JS" @@ -28,6 +42,11 @@ <include name="IDR_MEDIA_APP_DROP_TARGET_MODULE_JS" file="../components/media_app_ui/resources/mock/js/mock_module.js" type="BINDATA" /> + + <!-- Use a placeholder icon when enable_cros_media_app = false. --> + <include name="IDR_MEDIA_APP_ICON_256" + file="../../ui/file_manager/gallery/images/icon256.png" + type="BINDATA" /> </else> </if> </grit-part>
diff --git a/components/arc/session/arc_vm_client_adapter.cc b/components/arc/session/arc_vm_client_adapter.cc index ead6aeb..224dc335 100644 --- a/components/arc/session/arc_vm_client_adapter.cc +++ b/components/arc/session/arc_vm_client_adapter.cc
@@ -27,6 +27,7 @@ #include "base/system/sys_info.h" #include "base/task/post_task.h" #include "base/task/task_traits.h" +#include "base/threading/scoped_blocking_call.h" #include "base/threading/sequenced_task_runner_handle.h" #include "base/time/time.h" #include "chromeos/dbus/concierge_client.h" @@ -51,30 +52,66 @@ constexpr const char kRootFs[] = "system.raw.img"; constexpr const char kVendorImage[] = "vendor.raw.img"; +// A move-only class to hold status of the host file system. +class FileSystemStatus { + public: + FileSystemStatus(FileSystemStatus&& rhs) = default; + ~FileSystemStatus() = default; + FileSystemStatus& operator=(FileSystemStatus&& rhs) = default; + + bool is_host_rootfs_writable() const { return is_host_rootfs_writable_; } + const base::FilePath& system_image_path() const { return system_image_path_; } + const base::FilePath& vendor_image_path() const { return vendor_image_path_; } + const base::FilePath& guest_kernel_path() const { return guest_kernel_path_; } + const base::FilePath& fstab_path() const { return fstab_path_; } + + static FileSystemStatus GetFileSystemStatusBlocking() { + return FileSystemStatus(); + } + + private: + FileSystemStatus() + : is_host_rootfs_writable_(IsHostRootfsWritable()), + system_image_path_(SelectDlcOrBuiltin(base::FilePath(kRootFs))), + vendor_image_path_(SelectDlcOrBuiltin(base::FilePath(kVendorImage))), + guest_kernel_path_(SelectDlcOrBuiltin(base::FilePath(kKernel))), + fstab_path_(SelectDlcOrBuiltin(base::FilePath(kFstab))) {} + + static bool IsHostRootfsWritable() { + base::ScopedBlockingCall scoped_blocking_call( + FROM_HERE, base::BlockingType::MAY_BLOCK); + struct statvfs buf; + if (statvfs("/", &buf) < 0) { + PLOG(ERROR) << "statvfs() failed"; + return false; + } + const bool rw = !(buf.f_flag & ST_RDONLY); + VLOG(1) << "Host's rootfs is " << (rw ? "rw" : "ro"); + return rw; + } + + static base::FilePath SelectDlcOrBuiltin(const base::FilePath& file) { + const base::FilePath dlc_path = base::FilePath(kDlcPath).Append(file); + if (base::PathExists(dlc_path)) { + VLOG(1) << "arcvm-dlc will be used for " << file.value(); + return dlc_path; + } + return base::FilePath(kBuiltinPath).Append(file); + } + + bool is_host_rootfs_writable_; + base::FilePath system_image_path_; + base::FilePath vendor_image_path_; + base::FilePath guest_kernel_path_; + base::FilePath fstab_path_; + + DISALLOW_COPY_AND_ASSIGN(FileSystemStatus); +}; + chromeos::ConciergeClient* GetConciergeClient() { return chromeos::DBusThreadManager::Get()->GetConciergeClient(); } -bool IsHostRootfsWritable() { - struct statvfs buf; - if (statvfs("/", &buf) < 0) { - PLOG(ERROR) << "statvfs() failed"; - return false; - } - const bool rw = !(buf.f_flag & ST_RDONLY); - VLOG(1) << "Host's rootfs is " << (rw ? "rw" : "ro"); - return rw; -} - -base::FilePath SelectDlcOrBuiltin(const base::FilePath& file) { - const base::FilePath dlc_path = base::FilePath(kDlcPath).Append(file); - if (base::PathExists(dlc_path)) { - VLOG(1) << "arcvm-dlc will be used for " << file.value(); - return dlc_path; - } - return base::FilePath(kBuiltinPath).Append(file); -} - // TODO(pliard): Export host-side /data to the VM, and remove the function. vm_tools::concierge::CreateDiskImageRequest CreateArcDiskRequest( const std::string& user_id_hash, @@ -180,7 +217,8 @@ vm_tools::concierge::StartArcVmRequest CreateStartArcVmRequest( const std::string& user_id_hash, uint32_t cpus, - const std::string& disk_path, + const base::FilePath& data_disk_path, + const FileSystemStatus& file_system_status, std::vector<std::string> kernel_cmdline) { vm_tools::concierge::StartArcVmRequest request; @@ -188,7 +226,7 @@ request.set_owner_id(user_id_hash); request.add_params("root=/dev/vda"); - if (IsHostRootfsWritable()) + if (file_system_status.is_host_rootfs_writable()) request.add_params("rw"); request.add_params("init=/init"); for (auto& entry : kernel_cmdline) @@ -196,28 +234,27 @@ vm_tools::concierge::VirtualMachineSpec* vm = request.mutable_vm(); - vm->set_kernel(SelectDlcOrBuiltin(base::FilePath(kKernel)).value()); + vm->set_kernel(file_system_status.guest_kernel_path().value()); // Add / as /dev/vda. - vm->set_rootfs(SelectDlcOrBuiltin(base::FilePath(kRootFs)).value()); + vm->set_rootfs(file_system_status.system_image_path().value()); // Add /data as /dev/vdb. vm_tools::concierge::DiskImage* disk_image = request.add_disks(); - disk_image->set_path(disk_path); + disk_image->set_path(data_disk_path.value()); disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO); disk_image->set_writable(true); disk_image->set_do_mount(true); // Add /vendor as /dev/vdc. disk_image = request.add_disks(); - disk_image->set_path( - SelectDlcOrBuiltin(base::FilePath(kVendorImage)).value()); + disk_image->set_path(file_system_status.vendor_image_path().value()); disk_image->set_image_type(vm_tools::concierge::DISK_IMAGE_AUTO); disk_image->set_writable(false); disk_image->set_do_mount(true); // Add Android fstab. - request.set_fstab(SelectDlcOrBuiltin(base::FilePath(kFstab)).value()); + request.set_fstab(file_system_status.fstab_path().value()); // Add cpus. request.set_cpus(cpus); @@ -225,6 +262,8 @@ return request; } +// Gets a system property managed by crossystem. This function can be called +// only with base::MayBlock(). int GetSystemPropertyInt(const std::string& property) { std::string output; if (!base::GetAppOutput({kCrosSystemPath, property}, &output)) @@ -239,12 +278,11 @@ public chromeos::ConciergeClient::VmObserver, public chromeos::ConciergeClient::Observer { public: - // Initializing |is_dev_mode_| and |is_host_on_vm_| is not always very fast. - // Try to initialize them in the constructor which usually runs when the - // system is not busy. + // Initializing |is_host_on_vm_| and |is_dev_mode_| is not always very fast. + // Try to initialize them in the constructor and in StartMiniArc respectively. + // They usually run when the system is not busy. ArcVmClientAdapter() - : is_dev_mode_(GetSystemPropertyInt("cros_debug") == 1), - is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance() + : is_host_on_vm_(chromeos::system::StatisticsProvider::GetInstance() ->IsRunningOnVm()) { auto* client = GetConciergeClient(); client->AddVmObserver(this); @@ -292,9 +330,14 @@ StartArcMiniContainerRequest_PlayStoreAutoUpdate_AUTO_UPDATE_OFF) { play_store_auto_update_ = false; } - base::SequencedTaskRunnerHandle::Get()->PostTask( - FROM_HERE, base::BindOnce(std::move(callback), true)); - should_notify_observers_ = true; + base::PostTaskAndReplyWithResult( + FROM_HERE, + {base::ThreadPool(), base::MayBlock(), + base::TaskPriority::USER_VISIBLE}, + base::BindOnce( + []() { return GetSystemPropertyInt("cros_debug") == 1; }), + base::BindOnce(&ArcVmClientAdapter::OnIsDevMode, + weak_factory_.GetWeakPtr(), std::move(callback))); } void UpgradeArc(const UpgradeArcContainerRequest& request, @@ -332,6 +375,14 @@ void ConciergeServiceRestarted() override {} private: + void OnIsDevMode(chromeos::VoidDBusMethodCallback callback, + bool is_dev_mode) { + base::SequencedTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), true)); + is_dev_mode_ = is_dev_mode; + should_notify_observers_ = true; + } + void OnConciergeStarted(chromeos::VoidDBusMethodCallback callback, bool success) { if (!success) { @@ -342,7 +393,9 @@ VLOG(1) << "Concierge service started for arcvm."; base::PostTaskAndReplyWithResult( - FROM_HERE, {base::ThreadPool(), base::MayBlock()}, + FROM_HERE, + {base::ThreadPool(), base::MayBlock(), + base::TaskPriority::USER_VISIBLE}, base::BindOnce(&base::SysInfo::AmountOfFreeDiskSpace, base::FilePath(kHomeDirectory)), base::BindOnce(&ArcVmClientAdapter::CreateDiskImageAfterSizeCheck, @@ -388,10 +441,26 @@ VLOG(1) << "Disk image for arcvm ready. status=" << response.status() << ", disk=" << response.disk_path(); + base::PostTaskAndReplyWithResult( + FROM_HERE, + {base::ThreadPool(), base::MayBlock(), + base::TaskPriority::USER_VISIBLE}, + base::BindOnce(&FileSystemStatus::GetFileSystemStatusBlocking), + base::BindOnce(&ArcVmClientAdapter::OnFileSystemStatus, + weak_factory_.GetWeakPtr(), std::move(callback), + base::FilePath(response.disk_path()))); + } + + void OnFileSystemStatus(chromeos::VoidDBusMethodCallback callback, + const base::FilePath& data_disk_path, + FileSystemStatus file_system_status) { + VLOG(2) << "Got file system status"; + DCHECK(is_dev_mode_); std::vector<std::string> kernel_cmdline = GenerateKernelCmdline( - lcd_density_, play_store_auto_update_, is_dev_mode_, is_host_on_vm_); - auto start_request = CreateStartArcVmRequest( - user_id_hash_, cpus_, response.disk_path(), std::move(kernel_cmdline)); + lcd_density_, play_store_auto_update_, *is_dev_mode_, is_host_on_vm_); + auto start_request = + CreateStartArcVmRequest(user_id_hash_, cpus_, data_disk_path, + file_system_status, std::move(kernel_cmdline)); GetConciergeClient()->StartArcVm( start_request, base::BindOnce(&ArcVmClientAdapter::OnStartArcVmReply, @@ -470,7 +539,7 @@ VLOG(1) << "OnArcVmServerProxyJobStopped result=" << result; } - const bool is_dev_mode_; + base::Optional<bool> is_dev_mode_; // True when the *host* is running on a VM. const bool is_host_on_vm_;
diff --git a/components/autofill/core/browser/autofill_metrics.cc b/components/autofill/core/browser/autofill_metrics.cc index 2441b10..9e40dc2 100644 --- a/components/autofill/core/browser/autofill_metrics.cc +++ b/components/autofill/core/browser/autofill_metrics.cc
@@ -927,6 +927,13 @@ } // static +void AutofillMetrics::LogCardUnmaskPreflightDuration( + const base::TimeDelta& duration) { + base::UmaHistogramLongTimes("Autofill.BetterAuth.CardUnmaskPreflightDuration", + duration); +} + +// static void AutofillMetrics::LogUnmaskPromptEvent(UnmaskPromptEvent event) { UMA_HISTOGRAM_ENUMERATION("Autofill.UnmaskPrompt.Events", event, NUM_UNMASK_PROMPT_EVENTS);
diff --git a/components/autofill/core/browser/autofill_metrics.h b/components/autofill/core/browser/autofill_metrics.h index 4cac565..bf71f97 100644 --- a/components/autofill/core/browser/autofill_metrics.h +++ b/components/autofill/core/browser/autofill_metrics.h
@@ -1037,6 +1037,10 @@ // GetDetailsForGetRealPan). static void LogCardUnmaskPreflightCalled(); + // Logs the duration of the PaymentsClient::GetUnmaskDetails() call (aka + // GetDetailsForGetRealPan). + static void LogCardUnmaskPreflightDuration(const base::TimeDelta& duration); + // Logs |event| to the unmask prompt events histogram. static void LogUnmaskPromptEvent(UnmaskPromptEvent event);
diff --git a/components/autofill/core/browser/autofill_metrics_unittest.cc b/components/autofill/core/browser/autofill_metrics_unittest.cc index 56417a3..81d944b 100644 --- a/components/autofill/core/browser/autofill_metrics_unittest.cc +++ b/components/autofill/core/browser/autofill_metrics_unittest.cc
@@ -37,6 +37,7 @@ #include "components/autofill/core/browser/test_autofill_client.h" #include "components/autofill/core/browser/test_autofill_driver.h" #include "components/autofill/core/browser/test_autofill_manager.h" +#include "components/autofill/core/browser/test_autofill_tick_clock.h" #include "components/autofill/core/browser/test_form_data_importer.h" #include "components/autofill/core/browser/test_form_structure.h" #include "components/autofill/core/browser/test_personal_data_manager.h" @@ -4290,6 +4291,8 @@ features::kAutofillCreditCardAuthentication); std::string preflight_call_metric = "Autofill.BetterAuth.CardUnmaskPreflightCalled"; + std::string preflight_latency_metric = + "Autofill.BetterAuth.CardUnmaskPreflightDuration"; // Set up our form data. FormData form; @@ -4314,6 +4317,7 @@ form.fields[0]); // If no masked server cards are available, then no preflight call is made. histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); } { @@ -4328,6 +4332,7 @@ form.fields[0]); // If user is not verifiable, then no preflight call is made. histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); } { @@ -4342,6 +4347,7 @@ form.fields[0]); // If no masked server cards are available, then no preflight call is made. histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); } { @@ -4358,8 +4364,10 @@ // user is eligible for FIDO authentication (except iOS). #if defined(OS_IOS) histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); #else histogram_tester.ExpectTotalCount(preflight_call_metric, 1); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 1); #endif } @@ -4377,8 +4385,10 @@ // user is eligible for FIDO authentication (except iOS). #if defined(OS_IOS) histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); #else histogram_tester.ExpectTotalCount(preflight_call_metric, 1); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 1); #endif } } @@ -7562,6 +7572,10 @@ // Verify that we correctly log metrics tracking the duration of form fill. // TODO(crbug.com/1009364) Test is flake on many builders. TEST_F(AutofillMetricsTest, FormFillDuration) { + base::TimeTicks now = AutofillTickClock::NowTicks(); + TestAutofillTickClock test_clock; + test_clock.SetNowTicks(now); + // Load a fillable form. FormData form; form.name = ASCIIToUTF16("TestForm"); @@ -7603,6 +7617,10 @@ SCOPED_TRACE("Test 1"); base::HistogramTester histogram_tester; autofill_manager_->OnFormsSeen(forms, AutofillTickClock::NowTicks()); + base::TimeTicks parse_time = autofill_manager_->form_structures() + .begin() + ->second->form_parsed_timestamp(); + test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17)); autofill_manager_->OnFormSubmitted(form, false, SubmissionSource::FORM_SUBMISSION); @@ -7629,6 +7647,7 @@ autofill_manager_->OnTextFieldDidChange( form, form.fields.front(), gfx::RectF(), parse_time + base::TimeDelta::FromMicroseconds(3)); + test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17)); autofill_manager_->OnFormSubmitted(form, false, SubmissionSource::FORM_SUBMISSION); @@ -7656,6 +7675,7 @@ ->second->form_parsed_timestamp(); autofill_manager_->OnDidFillAutofillFormData( form, parse_time + base::TimeDelta::FromMicroseconds(5)); + test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17)); autofill_manager_->OnFormSubmitted(form, false, SubmissionSource::FORM_SUBMISSION); @@ -7689,6 +7709,7 @@ autofill_manager_->OnTextFieldDidChange( form, form.fields.front(), gfx::RectF(), parse_time + base::TimeDelta::FromMicroseconds(3)); + test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17)); autofill_manager_->OnFormSubmitted(form, false, SubmissionSource::FORM_SUBMISSION); @@ -7720,6 +7741,7 @@ autofill_manager_->OnTextFieldDidChange( form, form.fields.front(), gfx::RectF(), parse_time + base::TimeDelta::FromMicroseconds(3)); + test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17)); autofill_manager_->OnFormSubmitted(form, false, SubmissionSource::FORM_SUBMISSION); @@ -7748,6 +7770,7 @@ if (kv.second->form_parsed_timestamp() > parse_time) parse_time = kv.second->form_parsed_timestamp(); } + test_clock.SetNowTicks(parse_time + base::TimeDelta::FromMicroseconds(17)); autofill_manager_->OnFormSubmitted(second_form, false, SubmissionSource::FORM_SUBMISSION);
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager.cc b/components/autofill/core/browser/payments/credit_card_access_manager.cc index cd7d3d8..5e9a1ee 100644 --- a/components/autofill/core/browser/payments/credit_card_access_manager.cc +++ b/components/autofill/core/browser/payments/credit_card_access_manager.cc
@@ -25,6 +25,7 @@ #include "components/autofill/core/browser/metrics/credit_card_form_event_logger.h" #include "components/autofill/core/browser/payments/payments_client.h" #include "components/autofill/core/browser/personal_data_manager.h" +#include "components/autofill/core/common/autofill_tick_clock.h" #include "components/strings/grit/components_strings.h" #include "ui/base/l10n/l10n_util.h" @@ -216,6 +217,7 @@ base::BindOnce(&CreditCardAccessManager::OnDidGetUnmaskDetails, weak_ptr_factory_.GetWeakPtr()), personal_data_manager_->app_locale()); + preflight_call_timestamp_ = AutofillTickClock::NowTicks(); AutofillMetrics::LogCardUnmaskPreflightCalled(); } } @@ -223,6 +225,10 @@ void CreditCardAccessManager::OnDidGetUnmaskDetails( AutofillClient::PaymentsRpcResult result, AutofillClient::UnmaskDetails& unmask_details) { + // Log latency for preflight call. + AutofillMetrics::LogCardUnmaskPreflightDuration( + AutofillTickClock::NowTicks() - preflight_call_timestamp_); + unmask_details_request_in_progress_ = false; unmask_details_.offer_fido_opt_in = unmask_details.offer_fido_opt_in; unmask_details_.unmask_auth_method = unmask_details.unmask_auth_method;
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager.h b/components/autofill/core/browser/payments/credit_card_access_manager.h index 70d70d29..96dc2f43 100644 --- a/components/autofill/core/browser/payments/credit_card_access_manager.h +++ b/components/autofill/core/browser/payments/credit_card_access_manager.h
@@ -181,6 +181,9 @@ // For logging metrics. May be NULL for tests. CreditCardFormEventLogger* form_event_logger_; + // Timestamp used for metrics. + base::TimeTicks preflight_call_timestamp_; + // Meant for histograms recorded in FullCardRequest. base::TimeTicks form_parsed_timestamp_;
diff --git a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc index 4bd82313..b48f0bd 100644 --- a/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc +++ b/components/autofill/core/browser/payments/credit_card_access_manager_unittest.cc
@@ -516,6 +516,8 @@ TEST_F(CreditCardAccessManagerTest, CardUnmaskPreflightCalledMetric) { std::string preflight_call_metric = "Autofill.BetterAuth.CardUnmaskPreflightCalled"; + std::string preflight_latency_metric = + "Autofill.BetterAuth.CardUnmaskPreflightDuration"; { // Create local card and set user as eligible for FIDO auth. @@ -532,6 +534,7 @@ // If only local cards are available, then no preflight call is made. histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); } { @@ -549,6 +552,7 @@ // If user is not verifiable, then no preflight call is made. histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); } { @@ -568,8 +572,10 @@ // eligible for FIDO authentication, except on iOS. #if defined(OS_IOS) histogram_tester.ExpectTotalCount(preflight_call_metric, 0); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 0); #else histogram_tester.ExpectTotalCount(preflight_call_metric, 1); + histogram_tester.ExpectTotalCount(preflight_latency_metric, 1); #endif } }
diff --git a/components/content_settings/core/common/cookie_settings_base.cc b/components/content_settings/core/common/cookie_settings_base.cc index 1d37bb35..83791658d 100644 --- a/components/content_settings/core/common/cookie_settings_base.cc +++ b/components/content_settings/core/common/cookie_settings_base.cc
@@ -8,6 +8,7 @@ #include "base/debug/task_trace.h" #include "base/feature_list.h" #include "base/logging.h" +#include "build/build_config.h" #include "components/content_settings/core/common/features.h" #include "net/base/net_errors.h" #include "net/base/static_cookie_policy.h" @@ -71,9 +72,11 @@ bool CookieSettingsBase::IsCookieAccessAllowed( const GURL& url, const GURL& first_party_url) const { - DCHECK(!base::FeatureList::IsEnabled(kImprovedCookieControls) || - !first_party_url.is_empty() || url.is_empty()) - << url; +#if !defined(OS_IOS) + // IOS uses this method with an empty |first_party_url| but we don't have + // content settings on IOS, so it does not matter. + DCHECK(!first_party_url.is_empty() || url.is_empty()) << url; +#endif ContentSetting setting; GetCookieSetting(url, first_party_url, nullptr, &setting); return IsAllowed(setting); @@ -85,17 +88,15 @@ const base::Optional<url::Origin>& top_frame_origin) const { // TODO(crbug.com/988398): top_frame_origin is not yet always available. // Ensure that the DCHECK always passes and remove the FeatureList check. - if (!base::FeatureList::IsEnabled(kImprovedCookieControls) && - !base::FeatureList::IsEnabled( - kImprovedCookieControlsForThirdPartyCookieBlocking)) { - return IsCookieAccessAllowed(url, site_for_cookies); - } - DCHECK(top_frame_origin || site_for_cookies.is_empty()) + DCHECK((!base::FeatureList::IsEnabled(kImprovedCookieControls) && + !base::FeatureList::IsEnabled( + kImprovedCookieControlsForThirdPartyCookieBlocking)) || + top_frame_origin || site_for_cookies.is_empty()) << url << " " << site_for_cookies; ContentSetting setting; GetCookieSettingInternal( - url, top_frame_origin ? top_frame_origin->GetURL() : GURL(), + url, top_frame_origin ? top_frame_origin->GetURL() : site_for_cookies, IsThirdPartyRequest(url, site_for_cookies), nullptr, &setting); return IsAllowed(setting); }
diff --git a/components/exo/client_controlled_shell_surface_unittest.cc b/components/exo/client_controlled_shell_surface_unittest.cc index 5d72514..dc075bb 100644 --- a/components/exo/client_controlled_shell_surface_unittest.cc +++ b/components/exo/client_controlled_shell_surface_unittest.cc
@@ -1029,12 +1029,12 @@ split_view_controller->SnapWindow(window1, ash::SplitViewController::LEFT); state1->set_bounds_locally(true); window1->SetBounds(split_view_controller->GetSnappedWindowBoundsInScreen( - window1, ash::SplitViewController::LEFT)); + ash::SplitViewController::LEFT)); state1->set_bounds_locally(false); EXPECT_EQ(window_state1->GetStateType(), ash::WindowStateType::kLeftSnapped); EXPECT_EQ(shell_surface1->GetWidget()->GetWindowBoundsInScreen(), split_view_controller->GetSnappedWindowBoundsInScreen( - window1, ash::SplitViewController::LEFT)); + ash::SplitViewController::LEFT)); EXPECT_TRUE(HasBackdrop()); split_view_controller->EndSplitView(); @@ -1042,12 +1042,12 @@ split_view_controller->SnapWindow(window1, ash::SplitViewController::RIGHT); state1->set_bounds_locally(true); window1->SetBounds(split_view_controller->GetSnappedWindowBoundsInScreen( - window1, ash::SplitViewController::RIGHT)); + ash::SplitViewController::RIGHT)); state1->set_bounds_locally(false); EXPECT_EQ(window_state1->GetStateType(), ash::WindowStateType::kRightSnapped); EXPECT_EQ(shell_surface1->GetWidget()->GetWindowBoundsInScreen(), split_view_controller->GetSnappedWindowBoundsInScreen( - window1, ash::SplitViewController::RIGHT)); + ash::SplitViewController::RIGHT)); EXPECT_TRUE(HasBackdrop()); }
diff --git a/components/favicon/content/content_favicon_driver_unittest.cc b/components/favicon/content/content_favicon_driver_unittest.cc index 5dac5cea..501e3f7 100644 --- a/components/favicon/content/content_favicon_driver_unittest.cc +++ b/components/favicon/content/content_favicon_driver_unittest.cc
@@ -15,6 +15,7 @@ #include "components/favicon/core/test/mock_favicon_service.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/common/favicon_url.h" +#include "content/public/test/navigation_simulator.h" #include "content/public/test/test_renderer_host.h" #include "content/public/test/web_contents_tester.h" #include "testing/gmock/include/gmock/gmock.h" @@ -80,8 +81,6 @@ ContentFaviconDriver::FromWebContents(web_contents()); web_contents_tester()->NavigateAndCommit(page_url); static_cast<content::WebContentsObserver*>(favicon_driver) - ->DocumentOnLoadCompletedInMainFrame(); - static_cast<content::WebContentsObserver*>(favicon_driver) ->DidUpdateFaviconURL(candidates); base::RunLoop().RunUntilIdle(); } @@ -106,7 +105,10 @@ TEST_F(ContentFaviconDriverTest, ShouldNotCauseImageDownload) { ContentFaviconDriver* favicon_driver = ContentFaviconDriver::FromWebContents(web_contents()); - web_contents_tester()->NavigateAndCommit(kPageURL); + auto navigation = content::NavigationSimulator::CreateBrowserInitiated( + kPageURL, web_contents()); + navigation->SetKeepLoading(true); + navigation->Commit(); static_cast<content::WebContentsObserver*>(favicon_driver) ->DidUpdateFaviconURL({content::FaviconURL( kIconURL, content::FaviconURL::IconType::kFavicon, kEmptyIconSizes)});
diff --git a/components/omnibox/browser/DEPS b/components/omnibox/browser/DEPS index e060145..5c03891 100644 --- a/components/omnibox/browser/DEPS +++ b/components/omnibox/browser/DEPS
@@ -28,6 +28,7 @@ "+components/variations", "+components/vector_icons", "+content/public/browser", + "+content/public/common", "+extensions/common/constants.h", "+net", "+services/network/public/cpp",
diff --git a/components/omnibox/browser/autocomplete_controller.cc b/components/omnibox/browser/autocomplete_controller.cc index b80fc63a..68446166 100644 --- a/components/omnibox/browser/autocomplete_controller.cc +++ b/components/omnibox/browser/autocomplete_controller.cc
@@ -74,9 +74,8 @@ // enter one of SEARCH_SUGGEST or NAVSUGGEST. if (provider) { if (provider->type() == AutocompleteProvider::TYPE_ZERO_SUGGEST && - (match != AutocompleteMatchType::SEARCH_SUGGEST_PERSONALIZED)) { - DCHECK((match == AutocompleteMatchType::SEARCH_SUGGEST) || - (match == AutocompleteMatchType::NAVSUGGEST)); + (match == AutocompleteMatchType::SEARCH_SUGGEST || + match == AutocompleteMatchType::NAVSUGGEST)) { // We abuse this subtype and use it to for zero-suggest suggestions that // aren't personalized by the server. That is, it indicates either // client-side most-likely URL suggestions or server-side suggestions @@ -266,8 +265,8 @@ if (provider_types & AutocompleteProvider::TYPE_SHORTCUTS) providers_.push_back(new ShortcutsProvider(provider_client_.get())); if (provider_types & AutocompleteProvider::TYPE_ZERO_SUGGEST) { - zero_suggest_provider_ = ZeroSuggestProvider::Create( - provider_client_.get(), history_url_provider_, this); + zero_suggest_provider_ = + ZeroSuggestProvider::Create(provider_client_.get(), this); if (zero_suggest_provider_) providers_.push_back(zero_suggest_provider_); }
diff --git a/components/omnibox/browser/location_bar_model_impl.cc b/components/omnibox/browser/location_bar_model_impl.cc index 6d18ad3..07620e4 100644 --- a/components/omnibox/browser/location_bar_model_impl.cc +++ b/components/omnibox/browser/location_bar_model_impl.cc
@@ -18,8 +18,10 @@ #include "components/omnibox/common/omnibox_features.h" #include "components/prefs/pref_service.h" #include "components/search_engines/template_url_service.h" +#include "components/security_state/core/features.h" #include "components/security_state/core/security_state.h" #include "components/strings/grit/components_strings.h" +#include "content/public/common/origin_util.h" #include "net/cert/cert_status_flags.h" #include "net/cert/x509_certificate.h" #include "net/ssl/ssl_connection_status_flags.h" @@ -179,6 +181,18 @@ const gfx::VectorIcon& LocationBarModelImpl::GetVectorIcon() const { #if (!defined(OS_ANDROID) || BUILDFLAG(ENABLE_VR)) && !defined(OS_IOS) auto* const icon_override = delegate_->GetVectorIconOverride(); + GURL url = GetURL(); + bool http_danger_warning_enabled = false; + if (base::FeatureList::IsEnabled( + security_state::features::kMarkHttpAsFeature)) { + std::string parameter = base::GetFieldTrialParamValueByFeature( + security_state::features::kMarkHttpAsFeature, + security_state::features::kMarkHttpAsFeatureParameterName); + if (parameter == + security_state::features::kMarkHttpAsParameterDangerWarning) { + http_danger_warning_enabled = true; + } + } if (icon_override) return *icon_override; @@ -187,7 +201,18 @@ switch (GetSecurityLevel()) { case security_state::NONE: + // Show a danger triangle icon on HTTPS pages with passive mixed content + // when kMarkHttpAsParameterDangerWarning is enabled. + if (http_danger_warning_enabled && url.SchemeIsCryptographic()) { + return omnibox::kNotSecureWarningIcon; + } + return omnibox::kHttpIcon; case security_state::WARNING: + // When kMarkHttpAsParameterDangerWarning is enabled, show a danger + // triangle icon unless the page has a non-HTTPS secure origin. + if (http_danger_warning_enabled && !content::IsOriginSecure(url)) { + return omnibox::kNotSecureWarningIcon; + } return omnibox::kHttpIcon; case security_state::EV_SECURE: case security_state::SECURE:
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc index e6aa8f9..82beb9d5e 100644 --- a/components/omnibox/browser/omnibox_edit_model.cc +++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -1077,7 +1077,9 @@ // off). // TODO(hfung): Remove this when crbug/271590 is fixed. if (client_->CurrentPageExists() && !user_input_in_progress_) { - input_ = AutocompleteInput(url_for_editing_, GetPageClassification(), + // Send the textfield contents exactly as-is, as otherwise the verbatim + // match can be wrong. The full page URL is anyways in set_current_url(). + input_ = AutocompleteInput(view_->GetText(), GetPageClassification(), client_->GetSchemeClassifier()); input_.set_current_url(client_->GetURL()); input_.set_current_title(client_->GetTitle()); @@ -1513,16 +1515,9 @@ (!popup_model() || !popup_model()->has_selected_match())) *alternate_nav_url = result().alternate_nav_url(); } else { - LocationBarModel* location_bar_model = controller()->GetLocationBarModel(); - base::string16 text_for_match_generation = - (user_input_in_progress() || - location_bar_model->GetDisplaySearchTerms(nullptr)) - ? view_->GetText() - : url_for_editing_; - client_->GetAutocompleteClassifier()->Classify( - MaybePrependKeyword(text_for_match_generation), is_keyword_selected(), - true, GetPageClassification(), match, alternate_nav_url); + MaybePrependKeyword(view_->GetText()), is_keyword_selected(), true, + GetPageClassification(), match, alternate_nav_url); } }
diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc index c343828..cfa4be7 100644 --- a/components/omnibox/browser/zero_suggest_provider.cc +++ b/components/omnibox/browser/zero_suggest_provider.cc
@@ -29,8 +29,9 @@ #include "components/omnibox/browser/autocomplete_input.h" #include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/autocomplete_match_classification.h" +#include "components/omnibox/browser/autocomplete_provider_client.h" #include "components/omnibox/browser/autocomplete_provider_listener.h" -#include "components/omnibox/browser/history_url_provider.h" +#include "components/omnibox/browser/omnibox_field_trial.h" #include "components/omnibox/browser/omnibox_pref_names.h" #include "components/omnibox/browser/remote_suggestions_service.h" #include "components/omnibox/browser/search_provider.h" @@ -192,9 +193,8 @@ // static ZeroSuggestProvider* ZeroSuggestProvider::Create( AutocompleteProviderClient* client, - HistoryURLProvider* history_url_provider, AutocompleteProviderListener* listener) { - return new ZeroSuggestProvider(client, history_url_provider, listener); + return new ZeroSuggestProvider(client, listener); } // static @@ -230,7 +230,7 @@ permanent_text_ = input.text(); current_query_ = input.current_url().spec(); current_title_ = input.current_title(); - current_url_match_ = MatchForCurrentURL(); + current_text_match_ = MatchForCurrentText(); TemplateURLRef::SearchTermsArgs search_terms_args; search_terms_args.page_classification = current_page_classification_; @@ -334,10 +334,8 @@ ZeroSuggestProvider::ZeroSuggestProvider( AutocompleteProviderClient* client, - HistoryURLProvider* history_url_provider, AutocompleteProviderListener* listener) : BaseSearchProvider(AutocompleteProvider::TYPE_ZERO_SUGGEST, client), - history_url_provider_(history_url_provider), listener_(listener), result_type_running_(NONE) { // Record whether remote zero suggest is possible for this user / profile. @@ -542,10 +540,10 @@ // URL suggestions to users who are not in the personalized field trial for // zero query suggestions. if (IsNTPPage(current_page_classification_) || - !current_url_match_.destination_url.is_valid()) { + !current_text_match_.destination_url.is_valid()) { return; } - matches_.push_back(current_url_match_); + matches_.push_back(current_text_match_); int relevance = 600; if (num_results > 0) { UMA_HISTOGRAM_COUNTS_1M( @@ -569,12 +567,12 @@ if (num_results == 0) return; - // Do not add the default URL match if we're on the NTP to prevent + // Do not add the default text match if we're on the NTP to prevent // chrome-native://newtab or chrome://newtab from showing up on the list of // suggestions. if (!IsNTPPage(current_page_classification_) && - current_url_match_.destination_url.is_valid()) { - matches_.push_back(current_url_match_); + current_text_match_.destination_url.is_valid()) { + matches_.push_back(current_text_match_); } for (MatchMap::const_iterator it(map.begin()); it != map.end(); ++it) @@ -587,7 +585,7 @@ } } -AutocompleteMatch ZeroSuggestProvider::MatchForCurrentURL() { +AutocompleteMatch ZeroSuggestProvider::MatchForCurrentText() { // The placeholder suggestion for the current URL has high relevance so // that it is in the first suggestion slot and inline autocompleted. It // gets dropped as soon as the user types something. @@ -597,9 +595,15 @@ (base::FeatureList::IsEnabled(omnibox::kDisplayTitleForCurrentUrl)) ? current_title_ : base::string16(); - return VerbatimMatchForURL(client(), tmp, GURL(current_query_), description, - history_url_provider_, - results_.verbatim_relevance); + + // We pass a nullptr as the |history_url_provider| parameter now to force + // VerbatimMatch to do a classification, since the text can be a search query. + // TODO(tommycli): Simplify this - probably just bypass VerbatimMatchForURL. + AutocompleteMatch match = VerbatimMatchForURL( + client(), tmp, GURL(current_query_), description, + /*history_url_provider=*/nullptr, results_.verbatim_relevance); + match.provider = this; + return match; } bool ZeroSuggestProvider::AllowZeroSuggestSuggestions(
diff --git a/components/omnibox/browser/zero_suggest_provider.h b/components/omnibox/browser/zero_suggest_provider.h index 049b782..f06fe213 100644 --- a/components/omnibox/browser/zero_suggest_provider.h +++ b/components/omnibox/browser/zero_suggest_provider.h
@@ -20,7 +20,6 @@ #include "third_party/metrics_proto/omnibox_event.pb.h" class AutocompleteProviderListener; -class HistoryURLProvider; namespace base { class Value; @@ -55,7 +54,6 @@ // Creates and returns an instance of this provider. static ZeroSuggestProvider* Create(AutocompleteProviderClient* client, - HistoryURLProvider* history_url_provider, AutocompleteProviderListener* listener); // Registers a preference used to cache zero suggest results. @@ -83,7 +81,6 @@ FRIEND_TEST_ALL_PREFIXES(ZeroSuggestProviderTest, TestStartWillStopForSomeInput); ZeroSuggestProvider(AutocompleteProviderClient* client, - HistoryURLProvider* history_url_provider, AutocompleteProviderListener* listener); ~ZeroSuggestProvider() override; @@ -146,10 +143,10 @@ // received. void ConvertResultsToAutocompleteMatches(); - // Returns an AutocompleteMatch for the current URL. The match should be in + // Returns an AutocompleteMatch for the current text. The match should be in // the top position so that pressing enter has the effect of reloading the // page. - AutocompleteMatch MatchForCurrentURL(); + AutocompleteMatch MatchForCurrentText(); // When the user is in the Most Visited field trial, we ask the TopSites // service for the most visited URLs. It then calls back to this function to @@ -180,9 +177,6 @@ ResultType TypeOfResultToRun(const GURL& current_url, const GURL& suggest_url); - // Used for efficiency when creating the verbatim match. Can be null. - HistoryURLProvider* history_url_provider_; - AutocompleteProviderListener* listener_; // The result type that is currently being processed by provider. @@ -209,8 +203,9 @@ // Loader used to retrieve results. std::unique_ptr<network::SimpleURLLoader> loader_; - // Suggestion for the current URL. - AutocompleteMatch current_url_match_; + // The verbatim match for the current text, whether it's a URL or search query + // (which can occur for Query in Omnibox / Query Refinements). + AutocompleteMatch current_text_match_; // Contains suggest and navigation results as well as relevance parsed from // the response for the most recent zero suggest input URL.
diff --git a/components/omnibox/browser/zero_suggest_provider_unittest.cc b/components/omnibox/browser/zero_suggest_provider_unittest.cc index c4cacd4..f332002 100644 --- a/components/omnibox/browser/zero_suggest_provider_unittest.cc +++ b/components/omnibox/browser/zero_suggest_provider_unittest.cc
@@ -187,7 +187,7 @@ turl_model->GetDefaultSearchProvider()->GetEngineType( turl_model->search_terms_data())); - provider_ = ZeroSuggestProvider::Create(client_.get(), nullptr, this); + provider_ = ZeroSuggestProvider::Create(client_.get(), this); } void ZeroSuggestProviderTest::OnProviderUpdate(bool updated_matches) {
diff --git a/components/printing/common/BUILD.gn b/components/printing/common/BUILD.gn index a6698e1..0500aa6 100644 --- a/components/printing/common/BUILD.gn +++ b/components/printing/common/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//mojo/public/tools/bindings/mojom.gni") +import("//printing/buildflags/buildflags.gni") static_library("common") { sources = [ @@ -35,4 +36,8 @@ public_deps = [ "//mojo/public/mojom/base", ] + + if (enable_print_preview) { + enabled_features = [ "enable_print_preview" ] + } }
diff --git a/components/printing/common/print.mojom b/components/printing/common/print.mojom index d1b00877..9166f8d0 100644 --- a/components/printing/common/print.mojom +++ b/components/printing/common/print.mojom
@@ -14,8 +14,18 @@ // Render process interface exposed to the browser to handle most of the // printing grunt work for RenderView. interface PrintRenderFrame { - // Tells the RenderFrame to initiate print preview for the entire - // document. Optionally provides a |print_renderer| to render print documents. + // Tells the RenderFrame to switch the CSS to print media type, render every + // requested page using the print preview document's frame/node, and then + // switch the CSS back to display media type. + PrintForSystemDialog(); + + // Tells the RenderFrame to initiate print preview for the entire document. + // Optionally provides a |print_renderer| to render print documents. + [EnableIf=enable_print_preview] InitiatePrintPreview(associated PrintRenderer? print_renderer, bool has_selection); + + // Tells the RenderFrame that the print preview dialog was closed. + [EnableIf=enable_print_preview] + OnPrintPreviewDialogClosed(); };
diff --git a/components/printing/common/print_messages.h b/components/printing/common/print_messages.h index f9f5d1c..200288ee 100644 --- a/components/printing/common/print_messages.h +++ b/components/printing/common/print_messages.h
@@ -366,9 +366,6 @@ // Tells the RenderFrame to switch the CSS to print media type, renders every // requested pages and switch back the CSS to display media type. IPC_MESSAGE_ROUTED0(PrintMsg_PrintPages) - -// Like PrintMsg_PrintPages, but using the print preview document's frame/node. -IPC_MESSAGE_ROUTED0(PrintMsg_PrintForSystemDialog) #endif // Print content of an out-of-process subframe. @@ -387,9 +384,6 @@ // called multiple times as the user updates settings. IPC_MESSAGE_ROUTED1(PrintMsg_PrintPreview, base::DictionaryValue /* settings */) - -// Tells the RenderFrame that print preview dialog was closed. -IPC_MESSAGE_ROUTED0(PrintMsg_ClosePrintPreviewDialog) #endif // Messages sent from the renderer to the browser.
diff --git a/components/printing/renderer/print_render_frame_helper.cc b/components/printing/renderer/print_render_frame_helper.cc index 4c0553a..656bb69e 100644 --- a/components/printing/renderer/print_render_frame_helper.cc +++ b/components/printing/renderer/print_render_frame_helper.cc
@@ -1155,12 +1155,9 @@ bool handled = true; IPC_BEGIN_MESSAGE_MAP(PrintRenderFrameHelper, message) IPC_MESSAGE_HANDLER(PrintMsg_PrintPages, OnPrintPages) - IPC_MESSAGE_HANDLER(PrintMsg_PrintForSystemDialog, OnPrintForSystemDialog) #if BUILDFLAG(ENABLE_PRINT_PREVIEW) IPC_MESSAGE_HANDLER(PrintMsg_PrintPreview, OnPrintPreview) IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone) - IPC_MESSAGE_HANDLER(PrintMsg_ClosePrintPreviewDialog, - OnClosePrintPreviewDialog) #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) IPC_MESSAGE_HANDLER(PrintMsg_PrintFrameContent, OnPrintFrameContent) IPC_MESSAGE_HANDLER(PrintMsg_SetPrintingEnabled, OnSetPrintingEnabled) @@ -1180,15 +1177,32 @@ void PrintRenderFrameHelper::BindPrintRenderFrameReceiver( mojo::PendingAssociatedReceiver<mojom::PrintRenderFrame> receiver) { - print_render_frame_receiver_.Bind(std::move(receiver)); + receivers_.Add(this, std::move(receiver)); } +void PrintRenderFrameHelper::PrintForSystemDialog() { + ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr()); + if (ipc_nesting_level_ > 1) + return; + blink::WebLocalFrame* frame = print_preview_context_.source_frame(); + if (!frame) { + NOTREACHED(); + return; + } + auto weak_this = weak_ptr_factory_.GetWeakPtr(); + Print(frame, print_preview_context_.source_node(), + PrintRequestType::kRegular); + if (weak_this) + frame->DispatchAfterPrintEvent(); + // WARNING: |this| may be gone at this point. Do not do any more work here and + // just return. +} + +#if BUILDFLAG(ENABLE_PRINT_PREVIEW) void PrintRenderFrameHelper::InitiatePrintPreview( mojom::PrintRendererAssociatedPtrInfo print_renderer, bool has_selection) { -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr()); - if (ipc_nesting_level_ > 1) return; @@ -1208,9 +1222,14 @@ RequestPrintPreview(has_selection ? PRINT_PREVIEW_USER_INITIATED_SELECTION : PRINT_PREVIEW_USER_INITIATED_ENTIRE_FRAME); -#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) } +void PrintRenderFrameHelper::OnPrintPreviewDialogClosed() { + ScopedIPC scoped_ipc(weak_ptr_factory_.GetWeakPtr()); + print_preview_context_.source_frame()->DispatchAfterPrintEvent(); +} +#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) + void PrintRenderFrameHelper::OnPrintPages() { if (ipc_nesting_level_ > 1) return; @@ -1231,23 +1250,6 @@ // just return. } -void PrintRenderFrameHelper::OnPrintForSystemDialog() { - if (ipc_nesting_level_ > 1) - return; - blink::WebLocalFrame* frame = print_preview_context_.source_frame(); - if (!frame) { - NOTREACHED(); - return; - } - auto weak_this = weak_ptr_factory_.GetWeakPtr(); - Print(frame, print_preview_context_.source_node(), - PrintRequestType::kRegular); - if (weak_this) - frame->DispatchAfterPrintEvent(); - // WARNING: |this| may be gone at this point. Do not do any more work here and - // just return. -} - void PrintRenderFrameHelper::GetPageSizeAndContentAreaFromPageLayout( const PageSizeMargins& page_layout_in_points, gfx::Size* page_size, @@ -1549,12 +1551,6 @@ is_printing_enabled_ = enabled; } -#if BUILDFLAG(ENABLE_PRINT_PREVIEW) -void PrintRenderFrameHelper::OnClosePrintPreviewDialog() { - print_preview_context_.source_frame()->DispatchAfterPrintEvent(); -} -#endif - void PrintRenderFrameHelper::OnPrintFrameContent( const PrintMsg_PrintFrame_Params& params) { if (ipc_nesting_level_ > 1)
diff --git a/components/printing/renderer/print_render_frame_helper.h b/components/printing/renderer/print_render_frame_helper.h index 624a138e..aca69e7 100644 --- a/components/printing/renderer/print_render_frame_helper.h +++ b/components/printing/renderer/print_render_frame_helper.h
@@ -19,7 +19,7 @@ #include "components/printing/common/print.mojom.h" #include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_frame_observer_tracker.h" -#include "mojo/public/cpp/bindings/associated_receiver.h" +#include "mojo/public/cpp/bindings/associated_receiver_set.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "printing/buildflags/buildflags.h" #include "printing/common/metafile_utils.h" @@ -212,16 +212,18 @@ mojo::PendingAssociatedReceiver<mojom::PrintRenderFrame> receiver); // printing::mojom::PrintRenderFrame: + void PrintForSystemDialog() override; +#if BUILDFLAG(ENABLE_PRINT_PREVIEW) void InitiatePrintPreview( mojom::PrintRendererAssociatedPtrInfo print_renderer, bool has_selection) override; + void OnPrintPreviewDialogClosed() override; +#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) // Message handlers --------------------------------------------------------- void OnPrintPages(); - void OnPrintForSystemDialog(); #if BUILDFLAG(ENABLE_PRINT_PREVIEW) void OnPrintPreview(const base::DictionaryValue& settings); - void OnClosePrintPreviewDialog(); #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW) void OnPrintFrameContent(const PrintMsg_PrintFrame_Params& params); void OnPrintingDone(bool success); @@ -426,8 +428,7 @@ // etc.). mojom::PrintRendererAssociatedPtr print_renderer_; - mojo::AssociatedReceiver<mojom::PrintRenderFrame> - print_render_frame_receiver_{this}; + mojo::AssociatedReceiverSet<mojom::PrintRenderFrame> receivers_; // Keeps track of the state of print preview between messages. // TODO(vitalybuka): Create PrintPreviewContext when needed and delete after
diff --git a/components/printing/test/print_render_frame_helper_browsertest.cc b/components/printing/test/print_render_frame_helper_browsertest.cc index 5469a90..7272746f 100644 --- a/components/printing/test/print_render_frame_helper_browsertest.cc +++ b/components/printing/test/print_render_frame_helper_browsertest.cc
@@ -271,7 +271,7 @@ } void OnClosePrintPreviewDialog() { - GetPrintRenderFrameHelper()->OnClosePrintPreviewDialog(); + GetPrintRenderFrameHelper()->OnPrintPreviewDialogClosed(); } #endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
diff --git a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm index 17683b7..8c6527a 100644 --- a/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm +++ b/components/remote_cocoa/app_shim/select_file_dialog_bridge.mm
@@ -234,7 +234,9 @@ [dialog setCanSelectHiddenExtension:YES]; } } else { - NSOpenPanel* open_dialog = base::mac::ObjCCastStrict<NSOpenPanel>(dialog); + // This does not use ObjCCast because the underlying object could be a + // non-exported AppKit type (https://crbug.com/995476). + NSOpenPanel* open_dialog = static_cast<NSOpenPanel*>(dialog); if (type_ == SelectFileDialogType::kOpenMultiFile) [open_dialog setAllowsMultipleSelection:YES]; @@ -394,7 +396,6 @@ index = 1; } } else { - CHECK([panel_ isKindOfClass:[NSOpenPanel class]]); NSArray* urls = [static_cast<NSOpenPanel*>(panel_) URLs]; for (NSURL* url in urls) if ([url isFileURL])
diff --git a/components/safe_browsing/android/BUILD.gn b/components/safe_browsing/android/BUILD.gn index ce629d76..f4558a1 100644 --- a/components/safe_browsing/android/BUILD.gn +++ b/components/safe_browsing/android/BUILD.gn
@@ -45,6 +45,7 @@ "//components/safe_browsing/db:database_manager", "//components/safe_browsing/db:v4_get_hash_protocol_manager", "//components/safe_browsing/db:v4_protocol_manager_util", + "//components/safe_browsing/realtime:url_lookup_service", "//components/variations", "//content/public/browser", "//net",
diff --git a/components/safe_browsing/android/remote_database_manager.cc b/components/safe_browsing/android/remote_database_manager.cc index 876f60b..18198cf 100644 --- a/components/safe_browsing/android/remote_database_manager.cc +++ b/components/safe_browsing/android/remote_database_manager.cc
@@ -90,6 +90,11 @@ db_manager_->CancelCheck(client_); } +RealTimeUrlLookupService* +RemoteSafeBrowsingDatabaseManager::GetRealTimeUrlLookupService() { + return rt_url_lookup_service_.get(); +} + // // RemoteSafeBrowsingDatabaseManager methods // @@ -234,7 +239,7 @@ const GURL& url, Client* client) { DCHECK_CURRENTLY_ON(BrowserThread::IO); - NOTREACHED(); + // TODO(crbug.com/1014202): Add local high confidence allowlist. return AsyncMatch::NO_MATCH; } @@ -331,6 +336,10 @@ const V4ProtocolConfig& config) { VLOG(1) << "RemoteSafeBrowsingDatabaseManager starting"; SafeBrowsingDatabaseManager::StartOnIOThread(url_loader_factory, config); + + rt_url_lookup_service_ = + std::make_unique<RealTimeUrlLookupService>(url_loader_factory); + enabled_ = true; } @@ -348,6 +357,8 @@ } enabled_ = false; + rt_url_lookup_service_.reset(); + SafeBrowsingDatabaseManager::StopOnIOThread(shutdown); }
diff --git a/components/safe_browsing/android/remote_database_manager.h b/components/safe_browsing/android/remote_database_manager.h index e499763..c1e84447 100644 --- a/components/safe_browsing/android/remote_database_manager.h +++ b/components/safe_browsing/android/remote_database_manager.h
@@ -17,6 +17,7 @@ #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "components/safe_browsing/db/database_manager.h" +#include "components/safe_browsing/realtime/url_lookup_service.h" #include "url/gurl.h" namespace safe_browsing { @@ -62,6 +63,7 @@ scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, const V4ProtocolConfig& config) override; void StopOnIOThread(bool shutdown) override; + RealTimeUrlLookupService* GetRealTimeUrlLookupService() override; // // RemoteSafeBrowsingDatabaseManager implementation @@ -76,6 +78,8 @@ base::flat_set<content::ResourceType> resource_types_to_check_; + std::unique_ptr<RealTimeUrlLookupService> rt_url_lookup_service_; + friend class base::RefCountedThreadSafe<RemoteSafeBrowsingDatabaseManager>; DISALLOW_COPY_AND_ASSIGN(RemoteSafeBrowsingDatabaseManager); }; // class RemoteSafeBrowsingDatabaseManager
diff --git a/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc b/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc index 52f8ba0..aab4125 100644 --- a/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc +++ b/components/safe_browsing/browser/safe_browsing_url_checker_impl.cc
@@ -455,7 +455,7 @@ OnUrlResult(url, SB_THREAT_TYPE_SAFE, ThreatMetadata()); } - // TODO(vakh): Log |response| to chrome://safe-browsing + // TODO(crbug.com/1013370): Log |response| to chrome://safe-browsing } } // namespace safe_browsing
diff --git a/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc b/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc index 8493ccd..02a40d28 100644 --- a/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc +++ b/components/safe_browsing/triggers/ad_sampler_trigger_unittest.cc
@@ -64,17 +64,7 @@ // Returns the final RenderFrameHost after navigation commits. RenderFrameHost* NavigateFrame(const std::string& url, RenderFrameHost* frame) { - GURL gurl(url); - auto navigation_simulator = - NavigationSimulator::CreateRendererInitiated(gurl, frame); - navigation_simulator->Commit(); - RenderFrameHost* final_frame_host = - navigation_simulator->GetFinalRenderFrameHost(); - // Call the trigger's FinishLoad event handler directly since it doesn't - // happen as part of the navigation. - safe_browsing::AdSamplerTrigger::FromWebContents(web_contents()) - ->DidFinishLoad(final_frame_host, gurl); - return final_frame_host; + return NavigationSimulator::NavigateAndCommitFromDocument(GURL(url), frame); } // Returns the final RenderFrameHost after navigation commits.
diff --git a/components/safe_browsing/web_ui/BUILD.gn b/components/safe_browsing/web_ui/BUILD.gn index 1f3de09..5406e15 100644 --- a/components/safe_browsing/web_ui/BUILD.gn +++ b/components/safe_browsing/web_ui/BUILD.gn
@@ -19,6 +19,7 @@ "//components/safe_browsing:buildflags", "//components/safe_browsing:csd_proto", "//components/safe_browsing:features", + "//components/safe_browsing:realtimeapi_proto", "//components/safe_browsing/browser:network_context", "//components/safe_browsing/browser:referrer_chain_provider", "//components/safe_browsing/common:safe_browsing_prefs",
diff --git a/components/safe_browsing/web_ui/resources/safe_browsing.html b/components/safe_browsing/web_ui/resources/safe_browsing.html index 89194bb..545a263b 100644 --- a/components/safe_browsing/web_ui/resources/safe_browsing.html +++ b/components/safe_browsing/web_ui/resources/safe_browsing.html
@@ -25,6 +25,7 @@ <tab id="csbrr">ClientSafeBrowsingReportRequests</tab> <tab id="download-protection">Download Protection</tab> <tab id="password-protection">Password Protection</tab> + <tab id="rt-lookup">RT Lookup</tab> <tab id="referrer-chain">Referrer Chain</tab> <tab id="log">Log Messages</tab> </tabs> @@ -88,6 +89,10 @@ <table id="pg-ping-list" class="request-response"></table> </tabpanel> <tabpanel> + <h2>RT Lookup Pings</h2> + <table id="rt-lookup-ping-list" class="request-response"></table> + </tabpanel> + <tabpanel> <h2>Referrer Chain</h2> <form id="get-referrer-chain-form"> <input type="text" id="referrer-chain-url">
diff --git a/components/safe_browsing/web_ui/resources/safe_browsing.js b/components/safe_browsing/web_ui/resources/safe_browsing.js index 4722efb..a94d693 100644 --- a/components/safe_browsing/web_ui/resources/safe_browsing.js +++ b/components/safe_browsing/web_ui/resources/safe_browsing.js
@@ -89,6 +89,24 @@ addPGResponse(result); }); + cr.sendWithPromise('getRTLookupPings', []) + .then((rtLookupPings) => { rtLookupPings + .forEach(function (rtLookupPing) { + addRTLookupPing(rtLookupPing); + })}); + cr.addWebUIListener('rt-lookup-pings-update', function(result) { + addRTLookupPing(result); + }); + + cr.sendWithPromise('getRTLookupResponses', []) + .then((rtLookupResponses) => { rtLookupResponses + .forEach(function (rtLookupResponse) { + addRTLookupResponse(rtLookupResponse); + })}); + cr.addWebUIListener('rt-lookup-responses-update', function(result) { + addRTLookupResponse(result); + }); + cr.sendWithPromise('getLogMessages', []) .then((logMessages) => { logMessages.forEach(function (message) { addLogMessage(message); @@ -204,36 +222,40 @@ appendChildWithInnerText(logDiv, eventFormatted); } - function addPGPingRow(token) { - var row = $('pg-ping-list').insertRow(); + function insertTokenToTable(tableId, token) { + var row = $(tableId).insertRow(); row.className = 'content'; - row.id = 'pg-ping-list-' + token; + row.id = tableId + '-' + token; row.insertCell().className = 'content'; row.insertCell().className = 'content'; } - function addPGPing(result) { + function addResultToTable(tableId, result, position) { var token = result[0]; var request = result[1]; - if ($('pg-ping-list-'+token) == undefined) { - addPGPingRow(token); + if ($(tableId + '-' + token) == undefined) { + insertTokenToTable(tableId, token); } - var cell = $('pg-ping-list-'+token).cells[0]; + var cell = $(tableId + '-' + token).cells[position]; appendChildWithInnerText(cell, request); } + function addPGPing(result) { + addResultToTable('pg-ping-list', result, 0); + } + function addPGResponse(result) { - var token = result[0]; - var response = result[1]; + addResultToTable('pg-ping-list', result, 1); + } - if ($('pg-ping-list-'+token) == undefined) { - addPGPingRow(token); - } + function addRTLookupPing(result) { + addResultToTable('rt-lookup-ping-list', result, 0); + } - var cell = $('pg-ping-list-'+token).cells[1]; - appendChildWithInnerText(cell, response); + function addRTLookupResponse(result) { + addResultToTable('rt-lookup-ping-list', result, 1); } function addLogMessage(result) {
diff --git a/components/safe_browsing/web_ui/safe_browsing_ui.cc b/components/safe_browsing/web_ui/safe_browsing_ui.cc index fe951b82..1d41efc 100644 --- a/components/safe_browsing/web_ui/safe_browsing_ui.cc +++ b/components/safe_browsing/web_ui/safe_browsing_ui.cc
@@ -176,6 +176,36 @@ std::map<int, LoginReputationClientResponse>().swap(pg_responses_); } +int WebUIInfoSingleton::AddToRTLookupPings(const RTLookupRequest request) { + if (!HasListener()) + return -1; + + for (auto* webui_listener : webui_instances_) + webui_listener->NotifyRTLookupPingJsListener(rt_lookup_pings_.size(), + request); + + rt_lookup_pings_.push_back(request); + + return rt_lookup_pings_.size() - 1; +} + +void WebUIInfoSingleton::AddToRTLookupResponses( + int token, + const RTLookupResponse response) { + if (!HasListener()) + return; + + for (auto* webui_listener : webui_instances_) + webui_listener->NotifyRTLookupResponseJsListener(token, response); + + rt_lookup_responses_[token] = response; +} + +void WebUIInfoSingleton::ClearRTLookupPings() { + std::vector<RTLookupRequest>().swap(rt_lookup_pings_); + std::map<int, RTLookupResponse>().swap(rt_lookup_responses_); +} + void WebUIInfoSingleton::LogMessage(const std::string& message) { if (!HasListener()) return; @@ -213,6 +243,7 @@ ClearClientDownloadResponsesReceived(); ClearPGEvents(); ClearPGPings(); + ClearRTLookupPings(); ClearLogMessages(); } } @@ -942,6 +973,53 @@ return std::move(population_dict); } +base::Value SerializeRTThreatInfo( + const RTLookupResponse::ThreatInfo& threat_info) { + base::DictionaryValue threat_info_dict; + std::string threat_type; + switch (threat_info.threat_type()) { + case RTLookupResponse::ThreatInfo::THREAT_TYPE_UNSPECIFIED: + threat_type = "THREAT_TYPE_UNSPECIFIED"; + break; + case RTLookupResponse::ThreatInfo::WEB_MALWARE: + threat_type = "WEB_MALWARE"; + break; + case RTLookupResponse::ThreatInfo::SOCIAL_ENGINEERING: + threat_type = "SOCIAL_ENGINEERING"; + break; + case RTLookupResponse::ThreatInfo::UNWANTED_SOFTWARE: + threat_type = "UNWANTED_SOFTWARE"; + break; + case RTLookupResponse::ThreatInfo::UNCLEAR_BILLING: + threat_type = "UNCLEAR_BILLING"; + break; + } + threat_info_dict.SetKey("threat_type", base::Value(threat_type)); + + threat_info_dict.SetKey( + "cache_duration_sec", + base::Value(static_cast<double>(threat_info.cache_duration_sec()))); + + threat_info_dict.SetKey("cache_expression", + base::Value(threat_info.cache_expression())); + + std::string verdict_type; + switch (threat_info.verdict_type()) { + case RTLookupResponse::ThreatInfo::VERDICT_TYPE_UNSPECIFIED: + verdict_type = "VERDICT_TYPE_UNSPECIFIED"; + break; + case RTLookupResponse::ThreatInfo::SAFE: + verdict_type = "SAFE"; + break; + case RTLookupResponse::ThreatInfo::DANGEROUS: + verdict_type = "DANGEROUS"; + break; + } + threat_info_dict.SetKey("verdict_type", base::Value(verdict_type)); + + return std::move(threat_info_dict); +} + base::Value SerializeDomFeatures(const DomFeatures& dom_features) { base::DictionaryValue dom_features_dict; auto feature_map = std::make_unique<base::ListValue>(); @@ -1053,6 +1131,52 @@ return response_serialized; } +std::string SerializeRTLookupPing(const RTLookupRequest& request) { + base::DictionaryValue request_dict; + + request_dict.SetKey("url", base::Value(request.url())); + request_dict.SetKey("population", + SerializeChromeUserPopulation(request.population())); + + std::string lookupType; + switch (request.lookup_type()) { + case RTLookupRequest::LOOKUP_TYPE_UNSPECIFIED: + lookupType = "LOOKUP_TYPE_UNSPECIFIED"; + break; + case RTLookupRequest::NAVIGATION: + lookupType = "NAVIGATION"; + break; + case RTLookupRequest::DOWNLOAD: + lookupType = "DOWNLOAD"; + break; + } + + request_dict.SetKey("lookup_type", base::Value(lookupType)); + + std::string request_serialized; + JSONStringValueSerializer serializer(&request_serialized); + serializer.set_pretty_print(true); + serializer.Serialize(request_dict); + return request_serialized; +} + +std::string SerializeRTLookupResponse(const RTLookupResponse& response) { + base::DictionaryValue response_dict; + + base::ListValue threat_info_list; + for (const RTLookupResponse::ThreatInfo& threat_info : + response.threat_info()) { + threat_info_list.Append(SerializeRTThreatInfo(threat_info)); + } + response_dict.SetKey("threat_infos", std::move(threat_info_list)); + + std::string response_serialized; + JSONStringValueSerializer serializer(&response_serialized); + serializer.set_pretty_print(true); + serializer.Serialize(response_dict); + return response_serialized; +} + base::Value SerializeLogMessage(const base::Time& timestamp, const std::string& message) { base::DictionaryValue result; @@ -1324,6 +1448,45 @@ ResolveJavascriptCallback(base::Value(callback_id), responses_sent); } +void SafeBrowsingUIHandler::GetRTLookupPings(const base::ListValue* args) { + const std::vector<RTLookupRequest> requests = + WebUIInfoSingleton::GetInstance()->rt_lookup_pings(); + + base::ListValue pings_sent; + for (size_t request_index = 0; request_index < requests.size(); + request_index++) { + base::ListValue ping_entry; + ping_entry.Append(base::Value(int(request_index))); + ping_entry.Append( + base::Value(SerializeRTLookupPing(requests[request_index]))); + pings_sent.Append(std::move(ping_entry)); + } + + AllowJavascript(); + std::string callback_id; + args->GetString(0, &callback_id); + ResolveJavascriptCallback(base::Value(callback_id), pings_sent); +} + +void SafeBrowsingUIHandler::GetRTLookupResponses(const base::ListValue* args) { + const std::map<int, RTLookupResponse> responses = + WebUIInfoSingleton::GetInstance()->rt_lookup_responses(); + + base::ListValue responses_sent; + for (const auto& token_and_response : responses) { + base::ListValue response_entry; + response_entry.Append(base::Value(token_and_response.first)); + response_entry.Append( + base::Value(SerializeRTLookupResponse(token_and_response.second))); + responses_sent.Append(std::move(response_entry)); + } + + AllowJavascript(); + std::string callback_id; + args->GetString(0, &callback_id); + ResolveJavascriptCallback(base::Value(callback_id), responses_sent); +} + void SafeBrowsingUIHandler::GetReferrerChain(const base::ListValue* args) { std::string url_string; args->GetString(1, &url_string); @@ -1431,6 +1594,28 @@ FireWebUIListener("pg-responses-update", response_list); } +void SafeBrowsingUIHandler::NotifyRTLookupPingJsListener( + int token, + const RTLookupRequest& request) { + base::ListValue request_list; + request_list.Append(base::Value(token)); + request_list.Append(base::Value(SerializeRTLookupPing(request))); + + AllowJavascript(); + FireWebUIListener("rt-lookup-pings-update", request_list); +} + +void SafeBrowsingUIHandler::NotifyRTLookupResponseJsListener( + int token, + const RTLookupResponse& response) { + base::ListValue response_list; + response_list.Append(base::Value(token)); + response_list.Append(base::Value(SerializeRTLookupResponse(response))); + + AllowJavascript(); + FireWebUIListener("rt-lookup-responses-update", response_list); +} + void SafeBrowsingUIHandler::NotifyLogMessageJsListener( const base::Time& timestamp, const std::string& message) { @@ -1486,6 +1671,14 @@ base::BindRepeating(&SafeBrowsingUIHandler::GetPGResponses, base::Unretained(this))); web_ui()->RegisterMessageCallback( + "getRTLookupPings", + base::BindRepeating(&SafeBrowsingUIHandler::GetRTLookupPings, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "getRTLookupResponses", + base::BindRepeating(&SafeBrowsingUIHandler::GetRTLookupResponses, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( "getLogMessages", base::BindRepeating(&SafeBrowsingUIHandler::GetLogMessages, base::Unretained(this)));
diff --git a/components/safe_browsing/web_ui/safe_browsing_ui.h b/components/safe_browsing/web_ui/safe_browsing_ui.h index d854ef9..77d791b 100644 --- a/components/safe_browsing/web_ui/safe_browsing_ui.h +++ b/components/safe_browsing/web_ui/safe_browsing_ui.h
@@ -9,6 +9,7 @@ #include "base/macros.h" #include "components/safe_browsing/browser/safe_browsing_network_context.h" #include "components/safe_browsing/proto/csd.pb.h" +#include "components/safe_browsing/proto/realtimeapi.pb.h" #include "components/safe_browsing/proto/webui.pb.h" #include "components/sync/protocol/user_event_specifics.pb.h" #include "content/public/browser/web_ui_controller.h" @@ -83,6 +84,14 @@ // currently open chrome://safe-browsing tab was opened. void GetPGResponses(const base::ListValue* args); + // Get the real time lookup pings that have been sent since the oldest + // currently open chrome://safe-browsing tab was opened. + void GetRTLookupPings(const base::ListValue* args); + + // Get the real time lookup responses that have been received since the oldest + // currently open chrome://safe-browsing tab was opened. + void GetRTLookupResponses(const base::ListValue* args); + // Get the current referrer chain for a given URL. void GetReferrerChain(const base::ListValue* args); @@ -132,6 +141,15 @@ int token, const LoginReputationClientResponse& response); + // Called when any new real time lookup pings are sent while one or more + // WebUI tabs are open. + void NotifyRTLookupPingJsListener(int token, const RTLookupRequest& request); + + // Called when any new real time lookup responses are received while one or + // more WebUI tabs are open. + void NotifyRTLookupResponseJsListener(int token, + const RTLookupResponse& response); + // Called when any new log messages are received while one or more WebUI tabs // are open. void NotifyLogMessageJsListener(const base::Time& timestamp, @@ -218,6 +236,17 @@ // Clear the list of sent PhishGuard pings and responses. void ClearPGPings(); + // Add the new ping to |rt_lookup_pings_|. Returns a token that can be used in + // |AddToRTLookupResponses| to correlate a ping and response. + int AddToRTLookupPings(const RTLookupRequest request); + + // Add the new response to |rt_lookup_responses_| and send it to all the open + // chrome://safe-browsing tabs. + void AddToRTLookupResponses(int token, const RTLookupResponse response); + + // Clear the list of sent RT Lookup pings and responses. + void ClearRTLookupPings(); + // Log an arbitrary message. Frequently used for debugging. void LogMessage(const std::string& message); @@ -286,6 +315,18 @@ return pg_responses_; } + // Get the list of real time lookup pings since the oldest currently open + // chrome://safe-browsing tab was opened. + const std::vector<RTLookupRequest>& rt_lookup_pings() const { + return rt_lookup_pings_; + } + + // Get the list of real time lookup pings since the oldest currently open + // chrome://safe-browsing tab was opened. + const std::map<int, RTLookupResponse>& rt_lookup_responses() const { + return rt_lookup_responses_; + } + ReferrerChainProvider* referrer_chain_provider() { return referrer_chain_provider_; } @@ -350,6 +391,14 @@ // chrome://safe-browsing tab was opened. std::map<int, LoginReputationClientResponse> pg_responses_; + // List of real time lookup pings sent since the oldest currently open + // chrome://safe-browsing tab was opened. + std::vector<RTLookupRequest> rt_lookup_pings_; + + // List of real time lookup responses received since the oldest currently open + // chrome://safe-browsing tab was opened. + std::map<int, RTLookupResponse> rt_lookup_responses_; + // List of WebUI listener objects. "SafeBrowsingUIHandler*" cannot be const, // due to being used by functions that call AllowJavascript(), which is not // marked const.
diff --git a/components/update_client/BUILD.gn b/components/update_client/BUILD.gn index de3d06b..f46cf4ff 100644 --- a/components/update_client/BUILD.gn +++ b/components/update_client/BUILD.gn
@@ -3,6 +3,7 @@ # found in the LICENSE file. import("//net/features.gni") +import("//testing/libfuzzer/fuzzer_test.gni") source_set("network_impl") { sources = [ @@ -241,3 +242,25 @@ "//third_party/re2", ] } + +fuzzer_test("update_client_protocol_serializer_fuzzer") { + sources = [ + "protocol_serializer_fuzzer.cc", + ] + deps = [ + ":update_client", + "//base:base", + ] + seed_corpus = "fuzzer_corpuses/protocol_serializer/" +} + +fuzzer_test("update_client_protocol_parser_fuzzer") { + sources = [ + "protocol_parser_fuzzer.cc", + ] + deps = [ + ":update_client", + "//base:base", + ] + seed_corpus = "fuzzer_corpuses/protocol_parser/" +}
diff --git a/components/update_client/fuzzer_corpuses/protocol_parser/71c7a20b152d0a5299354db9bc32294e4a6ce406 b/components/update_client/fuzzer_corpuses/protocol_parser/71c7a20b152d0a5299354db9bc32294e4a6ce406 new file mode 100644 index 0000000..d0f28ced --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_parser/71c7a20b152d0a5299354db9bc32294e4a6ce406
@@ -0,0 +1,11 @@ + {"response":{ + "protocol":"3.1", + "app":[ + {"appid":"12345", + "status":"ok", + "updatecheck":{ + "status":"noupdate" + } + } + ] + }})"; \ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_parser/7f2f77459d57bd3da2abcdccf6dbe9f33105d0d2 b/components/update_client/fuzzer_corpuses/protocol_parser/7f2f77459d57bd3da2abcdccf6dbe9f33105d0d2 new file mode 100644 index 0000000..4b508327 --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_parser/7f2f77459d57bd3da2abcdccf6dbe9f33105d0d2
@@ -0,0 +1,11 @@ + {"response":{ + "protocol":"3.1", + "app":[ + {"appid":"12345", + "status":"ok", + "updatecheck":{ + "status":"noupdate" + } + } + ] + }} \ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/12ec209260d35248c3b28ba7417e013f2f2323f5 b/components/update_client/fuzzer_corpuses/protocol_serializer/12ec209260d35248c3b28ba7417e013f2f2323f5 new file mode 100644 index 0000000..45cbd4f --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_serializer/12ec209260d35248c3b28ba7417e013f2f2323f5
@@ -0,0 +1 @@ +{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","app":[{"appid":"id1","attr1":"1","attr2":"2","brand":"brand1","cohort":"c1","cohorthint":"ch1","cohortname":"cn1","disabled":[{"reason":0},{"reason":1}],"enabled":false,"installedby":"location1","installsource":"source1","packages":{"package":[{"fp":"fp1"}]},"ping":{"ping_freshness":"{5e9079b0-c2fb-4df2-8ca5-babfa37dde7d}","rd":1234},"updatecheck":{"updatedisabled":true},"version":"1.0"},{"appid":"id2","event":[{"a":1,"b":"2"},{"error":0}],"version":"2.0"}],"arch":"x64","dedup":"cr","dlpref":"cacheable","extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{2ee4b711-e978-4477-9301-ae0382a18b08}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}}
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/53901ce8ac03225d61e5852f548a7d1a8c7ccb87 b/components/update_client/fuzzer_corpuses/protocol_serializer/53901ce8ac03225d61e5852f548a7d1a8c7ccb87 new file mode 100644 index 0000000..a4ede55 --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_serializer/53901ce8ac03225d61e5852f548a7d1a8c7ccb87
@@ -0,0 +1 @@ +{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{73c3b42c-a2c6-4d73-a8dc-61f2b84cbecf}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}} \ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/7353c2d34a737bac0ea9dcb9a85cb768e4cfe914 b/components/update_client/fuzzer_corpuses/protocol_serializer/7353c2d34a737bac0ea9dcb9a85cb768e4cfe914 new file mode 100644 index 0000000..5fda1d3 --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_serializer/7353c2d34a737bac0ea9dcb9a85cb768e4cfe914
@@ -0,0 +1,4 @@ +{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","app":[{"appid":"id1","attr1":"1","attr2":"2","brand":"brand1","cohort":"c1","cohorthint":"ch1","cohortname":"cn1","disabled":[{"reason":0},{"reason":1}],"enabled":false,"installedby":"location1","installsource":"source1","packages":{"package":[{"fp":"fp1"}]},"ping":{"ping_freshness":"{5e9079b0-c2fb-4df2-8ca5-babfa37dde7d}","rd":1234},"updatecheck":{"updatedisabled":true},"version":"1.0"},{"appid":"id2","event":[{"a":1,"b":"2"},{"error":0}],"version":"2.0"}],"arch":"x64","dedup":"cr","dlpref":"cacheable","extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{2ee4b711-e978-4477-9301-ae0382a18b08}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}} +{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{8e064853-a382-4ee4-a8e6-927284eb91fe}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}} +{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{73c3b42c-a2c6-4d73-a8dc-61f2b84cbecf}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}} +{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","domainjoined":true,"extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{4f6c2ca7-9c84-40d6-9c9b-c9b2260a4655}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}}
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/82e93965bf304af1f407a14cf4e0303a20d74fe8 b/components/update_client/fuzzer_corpuses/protocol_serializer/82e93965bf304af1f407a14cf4e0303a20d74fe8 new file mode 100644 index 0000000..9b1d04a --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_serializer/82e93965bf304af1f407a14cf4e0303a20d74fe8
@@ -0,0 +1 @@ +{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","domainjoined":true,"extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{4f6c2ca7-9c84-40d6-9c9b-c9b2260a4655}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}} \ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/d198d0d9901925d6bd35cbe76fe83c40d1185f64 b/components/update_client/fuzzer_corpuses/protocol_serializer/d198d0d9901925d6bd35cbe76fe83c40d1185f64 new file mode 100644 index 0000000..717cc6a --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_serializer/d198d0d9901925d6bd35cbe76fe83c40d1185f64
@@ -0,0 +1 @@ +{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{8e064853-a382-4ee4-a8e6-927284eb91fe}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}} \ No newline at end of file
diff --git a/components/update_client/fuzzer_corpuses/protocol_serializer/da2ebcaffec0bce69352b0a3d8e94ecb5fc83fb1 b/components/update_client/fuzzer_corpuses/protocol_serializer/da2ebcaffec0bce69352b0a3d8e94ecb5fc83fb1 new file mode 100644 index 0000000..1c223ae --- /dev/null +++ b/components/update_client/fuzzer_corpuses/protocol_serializer/da2ebcaffec0bce69352b0a3d8e94ecb5fc83fb1
@@ -0,0 +1,3 @@ +{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{8e064853-a382-4ee4-a8e6-927284eb91fe}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}} +{"request":{"@os":"linux","@updater":"","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","hw":{"physmemory":188},"lang":"","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodversion":"","protocol":"3.1","requestid":"{73c3b42c-a2c6-4d73-a8dc-61f2b84cbecf}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterversion":""}} +{"request":{"@os":"linux","@updater":"prod_id","acceptformat":"crx2,crx3","arch":"x64","dedup":"cr","dlpref":"cacheable","domainjoined":true,"extra":"params","hw":{"physmemory":188},"lang":"lang","nacl_arch":"x86-64","os":{"arch":"x86_64","platform":"OS","version":"4.19.37-5+deb10u2rodete2-amd64"},"prodchannel":"channel","prodversion":"1.0","protocol":"3.1","requestid":"{4f6c2ca7-9c84-40d6-9c9b-c9b2260a4655}","sessionid":"{15160585-8ADE-4D3C-839B-1281A6035D1F}","updaterchannel":"channel","updaterversion":"1.0"}} \ No newline at end of file
diff --git a/components/update_client/protocol_parser_fuzzer.cc b/components/update_client/protocol_parser_fuzzer.cc new file mode 100644 index 0000000..74deec7 --- /dev/null +++ b/components/update_client/protocol_parser_fuzzer.cc
@@ -0,0 +1,24 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <stddef.h> +#include <stdint.h> + +#include <fuzzer/FuzzedDataProvider.h> + +#include "components/update_client/protocol_handler.h" +#include "components/update_client/protocol_parser.h" + +namespace update_client { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + update_client::ProtocolHandlerFactoryJSON factory; + std::unique_ptr<ProtocolParser> parser = factory.CreateParser(); + + // Try parsing as a Response. + const std::string response(reinterpret_cast<const char*>(data), size); + parser->Parse(response); + + return 0; +} +} // namespace update_client
diff --git a/components/update_client/protocol_serializer_fuzzer.cc b/components/update_client/protocol_serializer_fuzzer.cc new file mode 100644 index 0000000..51cb900 --- /dev/null +++ b/components/update_client/protocol_serializer_fuzzer.cc
@@ -0,0 +1,52 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <stddef.h> +#include <stdint.h> + +#include <fuzzer/FuzzedDataProvider.h> + +#include "base/command_line.h" +#include "base/json/json_reader.h" +#include "components/update_client/protocol_handler.h" +#include "components/update_client/protocol_serializer.h" + +struct Environment { + Environment() { CHECK(base::CommandLine::Init(0, nullptr)); } +}; + +namespace update_client { +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + static Environment env; + + // Independently, try serializing a Request. + base::flat_map<std::string, std::string> additional_attributes; + std::map<std::string, std::string> updater_state_attributes; + std::vector<protocol_request::App> apps; + + // Share |data| between |MakeProtocolRequest| args + FuzzedDataProvider data_provider(data, size); + const size_t max_arg_size = size / 7; + protocol_request::Request request = MakeProtocolRequest( + data_provider.ConsumeRandomLengthString(max_arg_size) /* session_id */, + data_provider.ConsumeRandomLengthString(max_arg_size) /* prod_id */, + data_provider.ConsumeRandomLengthString( + max_arg_size) /* browser_version */, + data_provider.ConsumeRandomLengthString(max_arg_size) /* lang */, + data_provider.ConsumeRandomLengthString(max_arg_size) /* channel */, + data_provider.ConsumeRandomLengthString(max_arg_size) /* os_long_name */, + data_provider.ConsumeRandomLengthString( + max_arg_size) /* download_preference */, + additional_attributes, &updater_state_attributes, std::move(apps)); + + update_client::ProtocolHandlerFactoryJSON factory; + std::unique_ptr<ProtocolSerializer> serializer = factory.CreateSerializer(); + std::string request_serialized = serializer->Serialize(request); + + // Any request we serialize should be valid JSON. + base::JSONReader json_reader; + CHECK(json_reader.Read(request_serialized)); + return 0; +} +} // namespace update_client
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index 74ef7a1..22576a8f 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -187,6 +187,7 @@ "//services/viz/public/cpp/gpu", "//services/viz/public/mojom", "//skia", + "//skia/public/mojom", "//sql", "//storage/browser", "//storage/common",
diff --git a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc index c01d63f..c1a71df 100644 --- a/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc +++ b/content/browser/accessibility/ax_platform_node_textrangeprovider_win_browsertest.cc
@@ -1549,7 +1549,7 @@ /*expected_count*/ 2); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word, /*count*/ -1, - /*expected_text*/ L"frame\n", + /*expected_text*/ L"frame", /*expected_count*/ -1); EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT( text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character, @@ -1737,9 +1737,14 @@ AssertMoveByUnitForMarkup(TextUnit_Word, "a <a>link with multiple words</a> and text after.", - {L"a ", L"link ", L"with ", L"multiple ", L"words ", + {L"a ", L"link ", L"with ", L"multiple ", L"words", L"and ", L"text ", L"after."}); + AssertMoveByUnitForMarkup(TextUnit_Word, + "a <span aria-hidden='true'>span with ignored " + "text</span> and text after.", + {L"a ", L"and ", L"text ", L"after."}); + // AssertMoveByUnitForMarkup( // TextUnit_Word, "<ul><li>item one</li><li>item two</li></ul>", // {L"* ", L"item ", L"one\n", L"* ", L"item ", L"two"});
diff --git a/content/browser/frame_host/popup_menu_helper_mac.h b/content/browser/frame_host/popup_menu_helper_mac.h index 7c6f6a8b..837455ff 100644 --- a/content/browser/frame_host/popup_menu_helper_mac.h +++ b/content/browser/frame_host/popup_menu_helper_mac.h
@@ -13,6 +13,7 @@ #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "content/common/content_export.h" +#include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_observer.h" #include "ui/gfx/geometry/rect.h" @@ -71,15 +72,15 @@ Delegate* delegate_; // Weak. Owns |this|. - ScopedObserver<RenderWidgetHost, RenderWidgetHostObserver> observer_; + ScopedObserver<RenderWidgetHost, RenderWidgetHostObserver> observer_{this}; base::WeakPtr<RenderFrameHostImpl> render_frame_host_; - WebMenuRunner* menu_runner_; - bool popup_was_hidden_; + WebMenuRunner* menu_runner_ = nil; + bool popup_was_hidden_ = false; // Controls whether messages can be pumped during the menu fade. std::unique_ptr<base::ScopedPumpMessagesInPrivateModes> pump_in_fade_; - base::WeakPtrFactory<PopupMenuHelper> weak_ptr_factory_; + base::WeakPtrFactory<PopupMenuHelper> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(PopupMenuHelper); };
diff --git a/content/browser/frame_host/popup_menu_helper_mac.mm b/content/browser/frame_host/popup_menu_helper_mac.mm index ba2758b..8060f37 100644 --- a/content/browser/frame_host/popup_menu_helper_mac.mm +++ b/content/browser/frame_host/popup_menu_helper_mac.mm
@@ -28,12 +28,8 @@ PopupMenuHelper::PopupMenuHelper(Delegate* delegate, RenderFrameHost* render_frame_host) : delegate_(delegate), - observer_(this), render_frame_host_( - static_cast<RenderFrameHostImpl*>(render_frame_host)->GetWeakPtr()), - menu_runner_(nil), - popup_was_hidden_(false), - weak_ptr_factory_(this) { + static_cast<RenderFrameHostImpl*>(render_frame_host)->GetWeakPtr()) { RenderWidgetHost* widget_host = render_frame_host->GetRenderViewHost()->GetWidget(); observer_.Add(widget_host);
diff --git a/content/browser/frame_host/render_frame_host_delegate.h b/content/browser/frame_host/render_frame_host_delegate.h index 10ddb8e..76a3c67 100644 --- a/content/browser/frame_host/render_frame_host_delegate.h +++ b/content/browser/frame_host/render_frame_host_delegate.h
@@ -11,6 +11,7 @@ #include <vector> #include "base/i18n/rtl.h" +#include "base/optional.h" #include "build/build_config.h" #include "components/viz/common/surfaces/surface_id.h" #include "content/browser/webui/web_ui_impl.h" @@ -31,6 +32,7 @@ #include "third_party/blink/public/common/frame/blocked_navigation_types.h" #include "third_party/blink/public/common/mediastream/media_stream_request.h" #include "third_party/blink/public/mojom/devtools/console_message.mojom.h" +#include "third_party/skia/include/core/SkColor.h" #include "ui/accessibility/ax_mode.h" #include "ui/base/window_open_disposition.h" @@ -449,6 +451,11 @@ virtual RenderFrameHostImpl* GetMainFrameForInnerDelegate( FrameTreeNode* frame_tree_node); + // Notifies that the given frame has changed theme color. + virtual void OnThemeColorChanged(RenderFrameHostImpl* source, + const base::Optional<SkColor>& theme_color) { + } + protected: virtual ~RenderFrameHostDelegate() {} };
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 1c48427..b18bc83 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1219,6 +1219,13 @@ return parent_; } +std::vector<RenderFrameHost*> RenderFrameHostImpl::GetFramesInSubtree() { + std::vector<RenderFrameHost*> frame_hosts; + for (FrameTreeNode* node : frame_tree_->SubtreeNodes(frame_tree_node())) + frame_hosts.push_back(node->current_frame_host()); + return frame_hosts; +} + bool RenderFrameHostImpl::IsDescendantOf(RenderFrameHost* ancestor) { if (!ancestor || !static_cast<RenderFrameHostImpl*>(ancestor)->child_count()) return false; @@ -3056,13 +3063,18 @@ } void RenderFrameHostImpl::RequestTextSurroundingSelection( - TextSurroundingSelectionCallback callback, + blink::mojom::Frame::GetTextSurroundingSelectionCallback callback, int max_length) { DCHECK(!callback.is_null()); GetAssociatedFrameRemote()->GetTextSurroundingSelection(max_length, std::move(callback)); } +void RenderFrameHostImpl::SendInterventionReport(const std::string& id, + const std::string& message) { + GetAssociatedFrameRemote()->SendInterventionReport(id, message); +} + void RenderFrameHostImpl::AllowBindings(int bindings_flags) { // Never grant any bindings to browser plugin guests. if (GetProcess()->IsForGuestsOnly()) { @@ -3375,6 +3387,11 @@ UpdateFrameFrozenState(); } +void RenderFrameHostImpl::DidChangeThemeColor( + const base::Optional<SkColor>& theme_color) { + delegate_->OnThemeColorChanged(this, theme_color); +} + void RenderFrameHostImpl::SetCommitCallbackInterceptorForTesting( CommitCallbackInterceptor* interceptor) { // This DCHECK's aims to avoid unexpected replacement of an interceptor. @@ -4592,9 +4609,10 @@ [](RenderFrameHostImpl* frame, mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver) { - NativeFileSystemManagerImpl::BindReceiverFromUIThread( - static_cast<StoragePartitionImpl*>( - frame->GetProcess()->GetStoragePartition()), + auto* storage_partition = static_cast<StoragePartitionImpl*>( + frame->GetProcess()->GetStoragePartition()); + auto* manager = storage_partition->GetNativeFileSystemManager(); + manager->BindReceiver( NativeFileSystemManagerImpl::BindingContext( frame->GetLastCommittedOrigin(), frame->GetLastCommittedURL(), frame->GetProcess()->GetID(), frame->GetRoutingID()),
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index fc20d45..bd2c63f 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -106,6 +106,7 @@ #include "third_party/blink/public/platform/web_sudden_termination_disabler_type.h" #include "third_party/blink/public/web/web_text_direction.h" #include "third_party/blink/public/web/web_tree_scope_type.h" +#include "third_party/skia/include/core/SkColor.h" #include "ui/accessibility/ax_action_handler.h" #include "ui/accessibility/ax_mode.h" #include "ui/accessibility/ax_node_data.h" @@ -242,6 +243,7 @@ RenderProcessHost* GetProcess() override; RenderWidgetHostView* GetView() override; RenderFrameHostImpl* GetParent() override; + std::vector<RenderFrameHost*> GetFramesInSubtree() override; bool IsDescendantOf(RenderFrameHost*) override; int GetFrameTreeNodeId() override; base::UnguessableToken GetDevToolsFrameToken() override; @@ -281,8 +283,10 @@ size_t GetProxyCount() override; bool HasSelection() override; void RequestTextSurroundingSelection( - TextSurroundingSelectionCallback callback, + blink::mojom::Frame::GetTextSurroundingSelectionCallback callback, int max_length) override; + void SendInterventionReport(const std::string& id, + const std::string& message) override; void AllowBindings(int binding_flags) override; int GetEnabledBindings() override; void DisableBeforeUnloadHangMonitorForTesting() override; @@ -1011,6 +1015,7 @@ // mojom::FrameHost: void VisibilityChanged(blink::mojom::FrameVisibility) override; + void DidChangeThemeColor(const base::Optional<SkColor>& theme_color) override; blink::mojom::FrameVisibility visibility() const { return visibility_; }
diff --git a/content/browser/native_file_system/native_file_system_directory_handle_impl.cc b/content/browser/native_file_system/native_file_system_directory_handle_impl.cc index 047eb865..6307267 100644 --- a/content/browser/native_file_system/native_file_system_directory_handle_impl.cc +++ b/content/browser/native_file_system/native_file_system_directory_handle_impl.cc
@@ -83,7 +83,7 @@ void NativeFileSystemDirectoryHandleImpl::GetFile(const std::string& basename, bool create, GetFileCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); storage::FileSystemURL child_url; blink::mojom::NativeFileSystemErrorPtr get_child_url_result = @@ -130,7 +130,7 @@ const std::string& basename, bool create, GetDirectoryCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); storage::FileSystemURL child_url; blink::mojom::NativeFileSystemErrorPtr get_child_url_result = @@ -175,7 +175,7 @@ void NativeFileSystemDirectoryHandleImpl::GetEntries( GetEntriesCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DoFileSystemOperation( FROM_HERE, &FileSystemOperationRunner::ReadDirectory, @@ -190,7 +190,7 @@ const std::string& basename, bool recurse, RemoveEntryCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); storage::FileSystemURL child_url; blink::mojom::NativeFileSystemErrorPtr get_child_url_result = @@ -212,7 +212,7 @@ void NativeFileSystemDirectoryHandleImpl::Transfer( mojo::PendingReceiver<NativeFileSystemTransferToken> token) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); manager()->CreateTransferToken(*this, std::move(token)); } @@ -220,7 +220,7 @@ void NativeFileSystemDirectoryHandleImpl::GetFileWithWritePermission( const storage::FileSystemURL& child_url, GetFileCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED); @@ -237,7 +237,7 @@ const storage::FileSystemURL& url, GetFileCallback callback, base::File::Error result) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result != base::File::FILE_OK) { std::move(callback).Run(native_file_system_error::FromFileError(result), @@ -253,7 +253,7 @@ void NativeFileSystemDirectoryHandleImpl::GetDirectoryWithWritePermission( const storage::FileSystemURL& child_url, GetDirectoryCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED); @@ -270,7 +270,7 @@ const storage::FileSystemURL& url, GetDirectoryCallback callback, base::File::Error result) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result != base::File::FILE_OK) { std::move(callback).Run(native_file_system_error::FromFileError(result), @@ -288,7 +288,7 @@ base::File::Error result, std::vector<filesystem::mojom::DirectoryEntry> file_list, bool has_more) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result != base::File::FILE_OK) { DCHECK(!has_more); @@ -325,7 +325,7 @@ const storage::FileSystemURL& url, bool recurse, RemoveEntryCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED);
diff --git a/content/browser/native_file_system/native_file_system_directory_handle_impl.h b/content/browser/native_file_system/native_file_system_directory_handle_impl.h index 3e63dac..21f71bbd 100644 --- a/content/browser/native_file_system/native_file_system_directory_handle_impl.h +++ b/content/browser/native_file_system/native_file_system_directory_handle_impl.h
@@ -20,8 +20,8 @@ // owned by the NativeFileSystemManagerImpl instance passed in to the // constructor. // -// This class is not thread safe, all methods should be called on the same -// sequence as storage::FileSystemContext, which today always is the IO thread. +// This class is not thread safe, all methods must be called from the same +// sequence. class NativeFileSystemDirectoryHandleImpl : public NativeFileSystemHandleBase, public blink::mojom::NativeFileSystemDirectoryHandle {
diff --git a/content/browser/native_file_system/native_file_system_file_handle_impl.cc b/content/browser/native_file_system/native_file_system_file_handle_impl.cc index 24b5a877..b574e25c 100644 --- a/content/browser/native_file_system/native_file_system_file_handle_impl.cc +++ b/content/browser/native_file_system/native_file_system_file_handle_impl.cc
@@ -7,7 +7,9 @@ #include "base/guid.h" #include "base/logging.h" #include "base/strings/stringprintf.h" +#include "base/task/post_task.h" #include "content/browser/native_file_system/native_file_system_error.h" +#include "content/public/browser/browser_task_traits.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "net/base/mime_util.h" #include "storage/browser/blob/blob_data_builder.h" @@ -54,7 +56,8 @@ } void NativeFileSystemFileHandleImpl::AsBlob(AsBlobCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (GetReadPermissionStatus() != PermissionStatus::GRANTED) { std::move(callback).Run(native_file_system_error::FromStatus( NativeFileSystemStatus::kPermissionDenied), @@ -77,7 +80,7 @@ void NativeFileSystemFileHandleImpl::CreateFileWriter( bool keep_existing_data, CreateFileWriterCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); RunWithWritePermission( base::BindOnce(&NativeFileSystemFileHandleImpl::CreateFileWriterImpl, @@ -92,16 +95,52 @@ void NativeFileSystemFileHandleImpl::Transfer( mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken> token) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); manager()->CreateTransferToken(*this, std::move(token)); } +namespace { + +void CreateBlobOnIOThread( + scoped_refptr<storage::FileSystemContext> file_system_context, + const scoped_refptr<ChromeBlobStorageContext>& blob_context, + mojo::PendingReceiver<blink::mojom::Blob> blob_receiver, + const storage::FileSystemURL& url, + const std::string& blob_uuid, + const std::string& content_type, + const base::File::Info& info) { + DCHECK_CURRENTLY_ON(BrowserThread::IO); + + auto blob_builder = std::make_unique<storage::BlobDataBuilder>(blob_uuid); + // Only append if the file has data. + if (info.size > 0) { + // Use AppendFileSystemFile here, since we're streaming the file directly + // from the file system backend, and the file thus might not actually be + // backed by a file on disk. + blob_builder->AppendFileSystemFile(url.ToGURL(), 0, info.size, + info.last_modified, + std::move(file_system_context)); + } + blob_builder->set_content_type(content_type); + + std::unique_ptr<BlobDataHandle> blob_handle = + blob_context->context()->AddFinishedBlob(std::move(blob_builder)); + + // Since the blob we're creating doesn't depend on other blobs, and doesn't + // require blob memory/disk quota, creating the blob can't fail. + DCHECK(!blob_handle->IsBroken()); + + BlobImpl::Create(std::move(blob_handle), std::move(blob_receiver)); +} + +} // namespace + void NativeFileSystemFileHandleImpl::DidGetMetaDataForBlob( AsBlobCallback callback, base::File::Error result, const base::File::Info& info) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result != base::File::FILE_OK) { std::move(callback).Run(native_file_system_error::FromFileError(result), @@ -110,17 +149,7 @@ } std::string uuid = base::GenerateGUID(); - auto blob_builder = std::make_unique<storage::BlobDataBuilder>(uuid); - - // Only append if the file has data. - if (info.size > 0) { - // Use AppendFileSystemFile here, since we're streaming the file directly - // from the file system backend, and the file thus might not actually be - // backed by a file on disk. - blob_builder->AppendFileSystemFile(url().ToGURL(), 0, info.size, - info.last_modified, - file_system_context()); - } + std::string content_type; base::FilePath::StringType extension = url().path().Extension(); if (!extension.empty()) { @@ -130,34 +159,33 @@ // however that method can potentially block and thus can't be called from // the IO thread. if (net::GetWellKnownMimeTypeFromExtension(extension.substr(1), &mime_type)) - blob_builder->set_content_type(mime_type); + content_type = std::move(mime_type); } + // TODO(https://crbug.com/962306): Consider some kind of fallback type when + // the above mime type detection fails. - std::unique_ptr<BlobDataHandle> blob_handle = - blob_context()->AddFinishedBlob(std::move(blob_builder)); - if (blob_handle->IsBroken()) { - std::move(callback).Run( - native_file_system_error::FromStatus( - NativeFileSystemStatus::kOperationFailed, "Failed to create blob."), - nullptr); - return; - } - - std::string content_type = blob_handle->content_type(); mojo::PendingRemote<blink::mojom::Blob> blob_remote; - BlobImpl::Create(std::move(blob_handle), - blob_remote.InitWithNewPipeAndPassReceiver()); + mojo::PendingReceiver<blink::mojom::Blob> blob_receiver = + blob_remote.InitWithNewPipeAndPassReceiver(); std::move(callback).Run( native_file_system_error::Ok(), blink::mojom::SerializedBlob::New(uuid, content_type, info.size, std::move(blob_remote))); + + base::PostTask( + FROM_HERE, {BrowserThread::IO}, + base::BindOnce(&CreateBlobOnIOThread, + base::WrapRefCounted(file_system_context()), + base::WrapRefCounted(manager()->blob_context()), + std::move(blob_receiver), url(), std::move(uuid), + std::move(content_type), info)); } void NativeFileSystemFileHandleImpl::CreateFileWriterImpl( bool keep_existing_data, CreateFileWriterCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED); @@ -175,7 +203,7 @@ int count, bool keep_existing_data, CreateFileWriterCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(count >= 0); DCHECK(max_swap_files_ >= 0); @@ -247,7 +275,7 @@ bool keep_existing_data, CreateFileWriterCallback callback, base::File::Error result) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result == base::File::FILE_ERROR_EXISTS) { // Creation attempt failed. We need to find an unused filename. CreateSwapFile(count + 1, keep_existing_data, std::move(callback)); @@ -291,7 +319,7 @@ storage::IsolatedContext::ScopedFSHandle swap_file_system, CreateFileWriterCallback callback, base::File::Error result) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result != base::File::FILE_OK) { DLOG(ERROR) << "Error Creating Swap File, status: " << base::File::ErrorToString(result)
diff --git a/content/browser/native_file_system/native_file_system_file_handle_impl.h b/content/browser/native_file_system/native_file_system_file_handle_impl.h index b4a90ec3..1bc285c6 100644 --- a/content/browser/native_file_system/native_file_system_file_handle_impl.h +++ b/content/browser/native_file_system/native_file_system_file_handle_impl.h
@@ -21,13 +21,8 @@ // owned by the NativeFileSystemManagerImpl instance passed in to the // constructor. // -// This class is not thread safe, all methods should be called on the IO thread. -// The link to the IO thread is due to its dependencies on both the blob system -// (via storage::BlobStorageContext) and the file system backends (via -// storage::FileSystemContext and storage::FileSystemOperationRunner, which both -// expect some of their methods to always be called on the IO thread). -// See https://crbug.com/957249 for some thoughts about the blob system aspect -// of this. +// This class is not thread safe, all methods must be called from the same +// sequence. class CONTENT_EXPORT NativeFileSystemFileHandleImpl : public NativeFileSystemHandleBase, public blink::mojom::NativeFileSystemFileHandle {
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl.cc b/content/browser/native_file_system/native_file_system_file_writer_impl.cc index fc97c20..5a50abd 100644 --- a/content/browser/native_file_system/native_file_system_file_writer_impl.cc +++ b/content/browser/native_file_system/native_file_system_file_writer_impl.cc
@@ -14,6 +14,7 @@ #include "crypto/secure_hash.h" #include "storage/browser/blob/blob_storage_context.h" #include "storage/browser/fileapi/file_system_operation_runner.h" +#include "third_party/blink/public/common/blob/blob_utils.h" #include "third_party/blink/public/mojom/blob/blob.mojom.h" #include "third_party/blink/public/mojom/native_file_system/native_file_system_error.mojom.h" @@ -119,7 +120,7 @@ uint64_t offset, mojo::PendingRemote<blink::mojom::Blob> data, WriteCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); RunWithWritePermission( base::BindOnce(&NativeFileSystemFileWriterImpl::WriteImpl, @@ -136,7 +137,7 @@ uint64_t offset, mojo::ScopedDataPipeConsumerHandle stream, WriteStreamCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); RunWithWritePermission( base::BindOnce(&NativeFileSystemFileWriterImpl::WriteStreamImpl, @@ -151,7 +152,7 @@ void NativeFileSystemFileWriterImpl::Truncate(uint64_t length, TruncateCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); RunWithWritePermission( base::BindOnce(&NativeFileSystemFileWriterImpl::TruncateImpl, @@ -164,7 +165,7 @@ } void NativeFileSystemFileWriterImpl::Close(CloseCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); RunWithWritePermission( base::BindOnce(&NativeFileSystemFileWriterImpl::CloseImpl, @@ -180,7 +181,7 @@ uint64_t offset, mojo::PendingRemote<blink::mojom::Blob> data, WriteCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED); @@ -193,39 +194,38 @@ return; } - blob_context()->GetBlobDataFromBlobRemote( - std::move(data), - base::BindOnce(&NativeFileSystemFileWriterImpl::DoWriteBlob, - weak_factory_.GetWeakPtr(), std::move(callback), offset)); -} + MojoCreateDataPipeOptions options; + options.struct_size = sizeof(MojoCreateDataPipeOptions); + options.flags = MOJO_CREATE_DATA_PIPE_FLAG_NONE; + options.element_num_bytes = 1; + options.capacity_num_bytes = + blink::BlobUtils::GetDataPipeCapacity(blink::BlobUtils::kUnknownSize); -void NativeFileSystemFileWriterImpl::DoWriteBlob( - WriteCallback callback, - uint64_t position, - std::unique_ptr<BlobDataHandle> blob) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - if (!blob) { + mojo::ScopedDataPipeProducerHandle producer_handle; + mojo::ScopedDataPipeConsumerHandle consumer_handle; + MojoResult rv = + mojo::CreateDataPipe(&options, &producer_handle, &consumer_handle); + if (rv != MOJO_RESULT_OK) { std::move(callback).Run( native_file_system_error::FromStatus( - NativeFileSystemStatus::kInvalidArgument, "Blob does not exist"), + NativeFileSystemStatus::kOperationFailed, + "Internal read error: failed to create mojo data pipe."), /*bytes_written=*/0); return; } - DoFileSystemOperation( - FROM_HERE, &FileSystemOperationRunner::Write, - base::BindRepeating(&NativeFileSystemFileWriterImpl::DidWrite, - weak_factory_.GetWeakPtr(), - base::Owned(new WriteState{std::move(callback)})), - swap_url(), std::move(blob), position); + // TODO(mek): We can do this transformation from Blob to DataPipe in the + // renderer, and simplify the mojom exposed interface. + mojo::Remote<blink::mojom::Blob> blob(std::move(data)); + blob->ReadAll(std::move(producer_handle), mojo::NullRemote()); + WriteStreamImpl(offset, std::move(consumer_handle), std::move(callback)); } void NativeFileSystemFileWriterImpl::WriteStreamImpl( uint64_t offset, mojo::ScopedDataPipeConsumerHandle stream, WriteStreamCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED); @@ -250,7 +250,7 @@ base::File::Error result, int64_t bytes, bool complete) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(state); state->bytes_written += bytes; @@ -263,7 +263,7 @@ void NativeFileSystemFileWriterImpl::TruncateImpl(uint64_t length, TruncateCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED); @@ -286,7 +286,7 @@ } void NativeFileSystemFileWriterImpl::CloseImpl(CloseCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(GetWritePermissionStatus(), blink::mojom::PermissionStatus::GRANTED); if (is_closed()) { @@ -332,6 +332,8 @@ return; } + DCHECK_CALLED_ON_VALID_SEQUENCE(file_writer->sequence_checker_); + auto item = std::make_unique<NativeFileSystemWriteItem>(); item->target_file_path = file_writer->url().path(); item->full_path = file_writer->swap_url().path(); @@ -373,7 +375,7 @@ void NativeFileSystemFileWriterImpl::DidPassAfterWriteCheck( CloseCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // If the move operation succeeds, the path pointing to the swap file // will not exist anymore. // In case of error, the swap file URL will point to a valid filesystem @@ -389,7 +391,7 @@ void NativeFileSystemFileWriterImpl::DidSwapFileBeforeClose( CloseCallback callback, base::File::Error result) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result != base::File::FILE_OK) { state_ = State::kCloseError; DLOG(ERROR) << "Swap file move operation failed source: " @@ -421,7 +423,7 @@ void NativeFileSystemFileWriterImpl::DidAnnotateFile( CloseCallback callback, quarantine::mojom::QuarantineFileResult result) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); state_ = State::kClosed; if (result != quarantine::mojom::QuarantineFileResult::OK && @@ -441,6 +443,7 @@ void NativeFileSystemFileWriterImpl::ComputeHashForSwapFile( HashCallback callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_EQ(swap_url().type(), storage::kFileSystemTypeNativeLocal); base::PostTaskAndReplyWithResult( FROM_HERE, {base::ThreadPool(), base::MayBlock()},
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl.h b/content/browser/native_file_system/native_file_system_file_writer_impl.h index 6f14648..797cb4a 100644 --- a/content/browser/native_file_system/native_file_system_file_writer_impl.h +++ b/content/browser/native_file_system/native_file_system_file_writer_impl.h
@@ -23,13 +23,8 @@ // owned by the NativeFileSystemManagerImpl instance passed in to the // constructor. // -// This class is not thread safe, all methods should be called on the IO thread. -// The link to the IO thread is due to its dependencies on both the blob system -// (via storage::BlobStorageContext) and the file system backends (via -// storage::FileSystemContext and storage::FileSystemOperationRunner, which both -// expect some of their methods to always be called on the IO thread). -// See https://crbug.com/957249 for some thoughts about the blob system aspect -// of this. +// This class is not thread safe, all methods must be called from the same +// sequence. class CONTENT_EXPORT NativeFileSystemFileWriterImpl : public NativeFileSystemHandleBase, public blink::mojom::NativeFileSystemFileWriter { @@ -76,9 +71,6 @@ void WriteImpl(uint64_t offset, mojo::PendingRemote<blink::mojom::Blob> data, WriteCallback callback); - void DoWriteBlob(WriteCallback callback, - uint64_t position, - std::unique_ptr<storage::BlobDataHandle> blob); void WriteStreamImpl(uint64_t offset, mojo::ScopedDataPipeConsumerHandle stream, WriteStreamCallback callback);
diff --git a/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc b/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc index 6d102d6..dc9292a7 100644 --- a/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc +++ b/content/browser/native_file_system/native_file_system_file_writer_impl_unittest.cc
@@ -280,13 +280,17 @@ ::testing::Bool()); TEST_F(NativeFileSystemFileWriterImplTest, WriteInvalidBlob) { + // This test primarily verifies behavior of the browser process in the + // presence of a compromised renderer process. The situation this tests for + // normally can't occur. As such it doesn't really matter what status the + // write operation returns, the important part is that nothing crashes. + mojo::PendingRemote<blink::mojom::Blob> blob; ignore_result(blob.InitWithNewPipeAndPassReceiver()); uint64_t bytes_written; NativeFileSystemStatus result = WriteBlobSync(0, std::move(blob), &bytes_written); - EXPECT_EQ(result, NativeFileSystemStatus::kInvalidArgument); EXPECT_EQ(bytes_written, 0u); result = CloseSync();
diff --git a/content/browser/native_file_system/native_file_system_handle_base.cc b/content/browser/native_file_system/native_file_system_handle_base.cc index 6300265..58e4de8 100644 --- a/content/browser/native_file_system/native_file_system_handle_base.cc +++ b/content/browser/native_file_system/native_file_system_handle_base.cc
@@ -137,6 +137,7 @@ } NativeFileSystemHandleBase::~NativeFileSystemHandleBase() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // It is fine to remove an observer that never was added, so no need to check // for URL type and/or the same grant being used for read and write access. handle_state_.read_grant->RemoveObserver(this); @@ -145,11 +146,13 @@ NativeFileSystemHandleBase::PermissionStatus NativeFileSystemHandleBase::GetReadPermissionStatus() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return handle_state_.read_grant->GetStatus(); } NativeFileSystemHandleBase::PermissionStatus NativeFileSystemHandleBase::GetWritePermissionStatus() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); UpdateUsage(); // It is not currently possible to have write only handles, so first check the // read permission status. See also: @@ -164,6 +167,7 @@ void NativeFileSystemHandleBase::DoGetPermissionStatus( bool writable, base::OnceCallback<void(PermissionStatus)> callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::move(callback).Run(writable ? GetWritePermissionStatus() : GetReadPermissionStatus()); } @@ -172,6 +176,7 @@ bool writable, base::OnceCallback<void(blink::mojom::NativeFileSystemErrorPtr, PermissionStatus)> callback) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); PermissionStatus current_status = writable ? GetWritePermissionStatus() : GetReadPermissionStatus(); // If we already have a valid permission status, just return that. Also just @@ -210,6 +215,7 @@ base::OnceCallback<void(blink::mojom::NativeFileSystemErrorPtr, PermissionStatus)> callback, NativeFileSystemPermissionGrant::PermissionRequestOutcome outcome) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); using Outcome = NativeFileSystemPermissionGrant::PermissionRequestOutcome; switch (outcome) { case Outcome::kInvalidFrame: @@ -241,6 +247,7 @@ } void NativeFileSystemHandleBase::UpdateUsage() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!usage_indicator_tracker_) return; bool is_readable = @@ -258,6 +265,7 @@ } void NativeFileSystemHandleBase::OnPermissionStatusChanged() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); UpdateUsage(); }
diff --git a/content/browser/native_file_system/native_file_system_handle_base.h b/content/browser/native_file_system/native_file_system_handle_base.h index 9fc8355d2..025e80ed 100644 --- a/content/browser/native_file_system/native_file_system_handle_base.h +++ b/content/browser/native_file_system/native_file_system_handle_base.h
@@ -8,6 +8,7 @@ #include <vector> #include "base/memory/weak_ptr.h" +#include "base/sequence_checker.h" #include "base/threading/sequence_bound.h" #include "content/browser/native_file_system/native_file_system_manager_impl.h" #include "content/common/content_export.h" @@ -19,7 +20,6 @@ namespace storage { class FileSystemContext; class FileSystemOperationRunner; -class BlobStorageContext; } // namespace storage namespace content { @@ -29,10 +29,10 @@ // such as permission requests. Instances of this class should be owned by the // NativeFileSystemManagerImpl instance passed in to the constructor. // -// This class is not thread safe, all methods should only be called on the IO -// thread. This is because code interacts directly with the file system backends -// (via storage::FileSystemContext and store::FileSystemOperationRunner, which -// both expect some of their methods to only be called on the IO thread). +// This class is not thread safe, all methods must be called from the same +// sequence. That sequence also has to be the same sequence on which the +// NativeFileSystemPermissionContext expects to be interacted with, which +// is the UI thread. class CONTENT_EXPORT NativeFileSystemHandleBase : public NativeFileSystemPermissionGrant::Observer { public: @@ -83,9 +83,6 @@ storage::FileSystemContext* file_system_context() { return manager()->context(); } - storage::BlobStorageContext* blob_context() { - return manager()->blob_context(); - } virtual base::WeakPtr<NativeFileSystemHandleBase> AsWeakPtr() = 0; @@ -113,6 +110,7 @@ storage::FileSystemOperationRunner::*method)(MethodArgs...), base::OnceCallback<void(CallbackArgs...)> callback, ArgsMinusCallback&&... args) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Wrap the passed in callback in one that posts a task back to the current // sequence. auto wrapped_callback = base::BindOnce( @@ -151,6 +149,7 @@ storage::FileSystemOperationRunner::*method)(MethodArgs...), base::RepeatingCallback<void(CallbackArgs...)> callback, ArgsMinusCallback&&... args) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Wrap the passed in callback in one that posts a task back to the current // sequence. auto wrapped_callback = base::BindRepeating( @@ -179,6 +178,8 @@ std::move(wrapped_callback))); } + SEQUENCE_CHECKER(sequence_checker_); + private: void DidRequestPermission( bool writable, @@ -207,6 +208,7 @@ base::OnceCallback<void(CallbackArgType)> callback, base::OnceCallback<void(CallbackArgType)> no_permission_callback, CallbackArgType callback_arg) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DoRequestPermission( /*writable=*/true, base::BindOnce(
diff --git a/content/browser/native_file_system/native_file_system_manager_impl.cc b/content/browser/native_file_system/native_file_system_manager_impl.cc index ebe2a19..7b3b4c47 100644 --- a/content/browser/native_file_system/native_file_system_manager_impl.cc +++ b/content/browser/native_file_system/native_file_system_manager_impl.cc
@@ -37,6 +37,7 @@ using PermissionStatus = NativeFileSystemPermissionGrant::PermissionStatus; using SensitiveDirectoryResult = NativeFileSystemPermissionContext::SensitiveDirectoryResult; +using storage::FileSystemContext; namespace { @@ -147,49 +148,49 @@ } NativeFileSystemManagerImpl::~NativeFileSystemManagerImpl() { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); } void NativeFileSystemManagerImpl::BindReceiver( const BindingContext& binding_context, mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver) { DCHECK(base::FeatureList::IsEnabled(blink::features::kNativeFileSystemAPI)); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - DCHECK_CURRENTLY_ON(BrowserThread::IO); - - DCHECK(network::IsOriginPotentiallyTrustworthy(binding_context.origin)); - receivers_.Add(this, std::move(receiver), binding_context); -} - -// static -void NativeFileSystemManagerImpl::BindReceiverFromUIThread( - StoragePartitionImpl* storage_partition, - const BindingContext& binding_context, - mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); if (!network::IsOriginPotentiallyTrustworthy(binding_context.origin)) { mojo::ReportBadMessage("Native File System access from Unsecure Origin"); return; } - auto* manager = storage_partition->GetNativeFileSystemManager(); - base::PostTask(FROM_HERE, {BrowserThread::IO}, - base::BindOnce(&NativeFileSystemManagerImpl::BindReceiver, - base::Unretained(manager), binding_context, - std::move(receiver))); + receivers_.Add(this, std::move(receiver), binding_context); } void NativeFileSystemManagerImpl::GetSandboxedFileSystem( GetSandboxedFileSystemCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); - url::Origin origin = receivers_.current_context().origin; + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - context()->OpenFileSystem( - origin.GetURL(), storage::kFileSystemTypeTemporary, - storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, - base::BindOnce(&NativeFileSystemManagerImpl::DidOpenSandboxedFileSystem, - weak_factory_.GetWeakPtr(), receivers_.current_context(), - std::move(callback))); + auto response_callback = base::BindOnce( + [](base::WeakPtr<NativeFileSystemManagerImpl> manager, + const BindingContext& binding_context, + GetSandboxedFileSystemCallback callback, + scoped_refptr<base::SequencedTaskRunner> task_runner, const GURL& root, + const std::string& fs_name, base::File::Error result) { + task_runner->PostTask( + FROM_HERE, + base::BindOnce( + &NativeFileSystemManagerImpl::DidOpenSandboxedFileSystem, + std::move(manager), binding_context, std::move(callback), root, + fs_name, result)); + }, + weak_factory_.GetWeakPtr(), receivers_.current_context(), + std::move(callback), base::SequencedTaskRunnerHandle::Get()); + + GURL origin = receivers_.current_context().origin.GetURL(); + base::PostTask(FROM_HERE, {BrowserThread::IO}, + base::BindOnce(&FileSystemContext::OpenFileSystem, context(), + origin, storage::kFileSystemTypeTemporary, + storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, + std::move(response_callback))); } void NativeFileSystemManagerImpl::ChooseEntries( @@ -197,7 +198,7 @@ std::vector<blink::mojom::ChooseFileSystemEntryAcceptsOptionPtr> accepts, bool include_accepts_all, ChooseEntriesCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); const BindingContext& context = receivers_.current_context(); // ChooseEntries API is only available to windows, as we need a frame to @@ -229,7 +230,7 @@ base::BindOnce(&NativeFileSystemManagerImpl::DidChooseEntries, weak_factory_.GetWeakPtr(), context, options, std::move(callback)), - base::CreateSingleThreadTaskRunner({BrowserThread::IO}))); + base::SequencedTaskRunnerHandle::Get())); } blink::mojom::NativeFileSystemEntryPtr @@ -245,7 +246,7 @@ NativeFileSystemManagerImpl::CreateDirectoryEntryFromPath( const BindingContext& binding_context, const base::FilePath& directory_path) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto url = CreateFileSystemURLFromPath(binding_context.origin, directory_path); @@ -296,7 +297,7 @@ const BindingContext& binding_context, const storage::FileSystemURL& url, const SharedHandleState& handle_state) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(url.is_valid()); DCHECK_EQ(url.mount_type() == storage::kFileSystemTypeIsolated, handle_state.file_system.is_valid()) @@ -314,7 +315,7 @@ const BindingContext& binding_context, const storage::FileSystemURL& url, const SharedHandleState& handle_state) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(url.is_valid()); DCHECK_EQ(url.mount_type() == storage::kFileSystemTypeIsolated, handle_state.file_system.is_valid()) @@ -334,7 +335,7 @@ const storage::FileSystemURL& url, const storage::FileSystemURL& swap_url, const SharedHandleState& handle_state) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); mojo::PendingRemote<blink::mojom::NativeFileSystemFileWriter> result; mojo::PendingReceiver<blink::mojom::NativeFileSystemFileWriter> @@ -369,7 +370,7 @@ void NativeFileSystemManagerImpl::ResolveTransferToken( mojo::PendingRemote<blink::mojom::NativeFileSystemTransferToken> token, ResolvedTokenCallback callback) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); mojo::Remote<blink::mojom::NativeFileSystemTransferToken> token_remote( std::move(token)); @@ -383,6 +384,8 @@ const base::SequenceBound<storage::FileSystemOperationRunner>& NativeFileSystemManagerImpl::operation_runner() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!operation_runner_) { operation_runner_ = context()->CreateSequenceBoundFileSystemOperationRunner(); @@ -396,7 +399,7 @@ const GURL& root, const std::string& filesystem_name, base::File::Error result) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (result != base::File::FILE_OK) { std::move(callback).Run(native_file_system_error::FromFileError(result), @@ -422,6 +425,8 @@ ChooseEntriesCallback callback, blink::mojom::NativeFileSystemErrorPtr result, std::vector<base::FilePath> entries) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (result->status != NativeFileSystemStatus::kOk) { std::move(callback).Run( std::move(result), @@ -453,6 +458,7 @@ ChooseEntriesCallback callback, std::vector<base::FilePath> entries, SensitiveDirectoryResult result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); base::UmaHistogramEnumeration( "NativeFileSystemAPI.SensitiveDirectoryAccessResult", result); @@ -473,7 +479,7 @@ base::BindOnce(&NativeFileSystemManagerImpl::DidChooseEntries, weak_factory_.GetWeakPtr(), binding_context, options, std::move(callback)), - base::CreateSingleThreadTaskRunner({BrowserThread::IO}))); + base::SequencedTaskRunnerHandle::Get())); return; } @@ -521,6 +527,7 @@ const base::FilePath& path, ChooseEntriesCallback callback, bool success) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::vector<blink::mojom::NativeFileSystemEntryPtr> result_entries; if (!success) { std::move(callback).Run( @@ -541,6 +548,7 @@ const base::FilePath& path, ChooseEntriesCallback callback, NativeFileSystemPermissionContext::PermissionStatus permission) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); base::UmaHistogramEnumeration( "NativeFileSystemAPI.ConfirmReadDirectoryResult", permission); @@ -563,7 +571,7 @@ bool is_directory, mojo::PendingReceiver<blink::mojom::NativeFileSystemTransferToken> receiver) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto token_impl = std::make_unique<NativeFileSystemTransferTokenImpl>( url, handle_state, @@ -576,7 +584,7 @@ void NativeFileSystemManagerImpl::RemoveToken( const base::UnguessableToken& token) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); size_t count_removed = transfer_tokens_.erase(token); DCHECK_EQ(1u, count_removed); @@ -586,7 +594,7 @@ mojo::Remote<blink::mojom::NativeFileSystemTransferToken>, ResolvedTokenCallback callback, const base::UnguessableToken& token) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto it = transfer_tokens_.find(token); if (it == transfer_tokens_.end()) { @@ -600,7 +608,7 @@ NativeFileSystemManagerImpl::CreateFileSystemURLFromPath( const url::Origin& origin, const base::FilePath& path) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto* isolated_context = storage::IsolatedContext::GetInstance(); DCHECK(isolated_context); @@ -625,7 +633,7 @@ const BindingContext& binding_context, const base::FilePath& file_path, NativeFileSystemPermissionContext::UserAction user_action) { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto url = CreateFileSystemURLFromPath(binding_context.origin, file_path); scoped_refptr<NativeFileSystemPermissionGrant> read_grant, write_grant;
diff --git a/content/browser/native_file_system/native_file_system_manager_impl.h b/content/browser/native_file_system/native_file_system_manager_impl.h index 5f54a98..1138f36 100644 --- a/content/browser/native_file_system/native_file_system_manager_impl.h +++ b/content/browser/native_file_system/native_file_system_manager_impl.h
@@ -44,8 +44,8 @@ // NativeFileSystemDirectoryHandleImpl and NativeFileSystemTransferTokenImpl // instances for a specific storage partition. // -// This class is not thread safe, it is constructed on the UI thread, and after -// that all methods should be called on the IO thread. +// This class is not thread safe, it must be constructed and used on the UI +// thread only. class CONTENT_EXPORT NativeFileSystemManagerImpl : public NativeFileSystemEntryFactory, public blink::mojom::NativeFileSystemManager { @@ -85,11 +85,6 @@ const BindingContext& binding_context, mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver); - static void BindReceiverFromUIThread( - StoragePartitionImpl* storage_partition, - const BindingContext& binding_context, - mojo::PendingReceiver<blink::mojom::NativeFileSystemManager> receiver); - // blink::mojom::NativeFileSystemManager: void GetSandboxedFileSystem(GetSandboxedFileSystemCallback callback) override; void ChooseEntries( @@ -155,12 +150,10 @@ ResolvedTokenCallback callback); storage::FileSystemContext* context() { - DCHECK_CURRENTLY_ON(BrowserThread::IO); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return context_.get(); } - storage::BlobStorageContext* blob_context() { - return blob_context_->context(); - } + ChromeBlobStorageContext* blob_context() { return blob_context_.get(); } const base::SequenceBound<storage::FileSystemOperationRunner>& operation_runner(); @@ -245,6 +238,8 @@ writer_receiver, bool has_transient_user_activation); + SEQUENCE_CHECKER(sequence_checker_); + const scoped_refptr<storage::FileSystemContext> context_; const scoped_refptr<ChromeBlobStorageContext> blob_context_; base::SequenceBound<storage::FileSystemOperationRunner> operation_runner_;
diff --git a/content/browser/renderer_host/clipboard_host_impl.cc b/content/browser/renderer_host/clipboard_host_impl.cc index efc7f21..4932d48 100644 --- a/content/browser/renderer_host/clipboard_host_impl.cc +++ b/content/browser/renderer_host/clipboard_host_impl.cc
@@ -165,6 +165,32 @@ pickle, ui::ClipboardFormatType::GetWebCustomDataType()); } +void ClipboardHostImpl::WriteRawData(const base::string16& format, + mojo_base::BigBuffer data) { + // Windows / X11 clipboards enter an unrecoverable state after registering + // some amount of unique formats, and there's no way to un-register these + // formats. For these clipboards, use a conservative limit to avoid + // registering too many formats, as: + // (1) Other native applications may also register clipboard formats. + // (2) |registered_formats| only persists over one Chrome Clipboard session. + // (3) Chrome also registers other clipboard formats. + // + // The limit is based on Windows, which has the smallest limit, at 0x4000. + // Windows represents clipboard formats using values in 0xC000 - 0xFFFF. + // Therefore, Windows supports at most 0x4000 registered formats. Reference: + // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-registerclipboardformata + static constexpr int kMaxWindowsClipboardFormats = 0x4000; + static constexpr int kMaxRegisteredFormats = kMaxWindowsClipboardFormats / 4; + static base::NoDestructor<std::set<base::string16>> registered_formats; + if (!base::Contains(*registered_formats, format)) { + if (registered_formats->size() >= kMaxRegisteredFormats) + return; + registered_formats->emplace(format); + } + + clipboard_writer_->WriteData(format, std::move(data)); +} + void ClipboardHostImpl::WriteBookmark(const std::string& url, const base::string16& title) { clipboard_writer_->WriteBookmark(title, url);
diff --git a/content/browser/renderer_host/clipboard_host_impl.h b/content/browser/renderer_host/clipboard_host_impl.h index 432389d..b16345d 100644 --- a/content/browser/renderer_host/clipboard_host_impl.h +++ b/content/browser/renderer_host/clipboard_host_impl.h
@@ -11,6 +11,7 @@ #include "base/macros.h" #include "build/build_config.h" #include "content/common/content_export.h" +#include "mojo/public/cpp/base/big_buffer.h" #include "mojo/public/cpp/bindings/receiver.h" #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h" #include "ui/base/clipboard/clipboard.h" @@ -62,6 +63,7 @@ void WriteSmartPasteMarker() override; void WriteCustomData( const base::flat_map<base::string16, base::string16>& data) override; + void WriteRawData(const base::string16&, mojo_base::BigBuffer) override; void WriteBookmark(const std::string& url, const base::string16& title) override; void WriteImage(const SkBitmap& bitmap) override;
diff --git a/content/browser/renderer_host/direct_manipulation_helper_win.cc b/content/browser/renderer_host/direct_manipulation_helper_win.cc index 6ce09b9f7..fe416c89 100644 --- a/content/browser/renderer_host/direct_manipulation_helper_win.cc +++ b/content/browser/renderer_host/direct_manipulation_helper_win.cc
@@ -268,7 +268,9 @@ if (has_animation_observer_) RemoveAnimationObserver(); compositor_ = nullptr; - event_handler_->SetDirectManipulationHelper(nullptr); + + if (event_handler_) + event_handler_->SetDirectManipulationHelper(nullptr); HRESULT hr; if (viewport_) {
diff --git a/content/browser/renderer_interface_binders.cc b/content/browser/renderer_interface_binders.cc index b34b84a..7eaedb5 100644 --- a/content/browser/renderer_interface_binders.cc +++ b/content/browser/renderer_interface_binders.cc
@@ -115,14 +115,16 @@ // This code path is only for workers, hence always pass in // MSG_ROUTING_NONE as frame ID. Frames themselves go through // RenderFrameHostImpl instead. - NativeFileSystemManagerImpl::BindReceiverFromUIThread( - static_cast<StoragePartitionImpl*>(host->GetStoragePartition()), + auto* storage_partition = + static_cast<StoragePartitionImpl*>(host->GetStoragePartition()); + auto* manager = storage_partition->GetNativeFileSystemManager(); + manager->BindReceiver( NativeFileSystemManagerImpl::BindingContext( origin, - // TODO(https://crbug.com/989323): Obtain and use a better URL - // for workers instead of the origin as source url. This URL - // will be used for SafeBrowsing checks and for the Quarantine - // Service. + // TODO(https://crbug.com/989323): Obtain and use a better + // URL for workers instead of the origin as source url. + // This URL will be used for SafeBrowsing checks and for + // the Quarantine Service. origin.GetURL(), host->GetID(), MSG_ROUTING_NONE), std::move(receiver)); }));
diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc index 5277980..cb787299 100644 --- a/content/browser/site_per_process_browsertest.cc +++ b/content/browser/site_per_process_browsertest.cc
@@ -1823,10 +1823,18 @@ DCHECK_EQ(filter->last_rect().y(), 0); } +#if defined(OS_MACOSX) || defined(OS_LINUX) +// Flaky timeout. https://crbug.com/1014155 +#define MAYBE_KeyboardScrollBubblingFromOOPIF \ + DISABLED_KeyboardScrollBubblingFromOOPIF +#else +#define MAYBE_KeyboardScrollBubblingFromOOPIF KeyboardScrollBubblingFromOOPIF +#endif + // Tests that scrolling with the keyboard will bubble unused scroll to the // OOPIF's parent. IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, - KeyboardScrollBubblingFromOOPIF) { + MAYBE_KeyboardScrollBubblingFromOOPIF) { GURL main_url(embedded_test_server()->GetURL( "a.com", "/frame_tree/page_with_iframe_in_scrollable_div.html")); EXPECT_TRUE(NavigateToURL(shell(), main_url));
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc index e9e7bfa6..98da3ab 100644 --- a/content/browser/web_contents/web_contents_impl.cc +++ b/content/browser/web_contents/web_contents_impl.cc
@@ -903,8 +903,6 @@ IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(WebContentsImpl, message, render_frame_host) IPC_MESSAGE_HANDLER(FrameHostMsg_DomOperationResponse, OnDomOperationResponse) - IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeThemeColor, - OnThemeColorChanged) IPC_MESSAGE_HANDLER(FrameHostMsg_DidFinishLoad, OnDidFinishLoad) IPC_MESSAGE_HANDLER(FrameHostMsg_DidLoadResourceFromMemoryCache, OnDidLoadResourceFromMemoryCache) @@ -4629,8 +4627,9 @@ return false; } -void WebContentsImpl::OnThemeColorChanged(RenderFrameHostImpl* source, - base::Optional<SkColor> theme_color) { +void WebContentsImpl::OnThemeColorChanged( + RenderFrameHostImpl* source, + const base::Optional<SkColor>& theme_color) { if (source != GetMainFrame()) { // Only the main frame may control the theme. return;
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h index c60ee5225..e85e078 100644 --- a/content/browser/web_contents/web_contents_impl.h +++ b/content/browser/web_contents/web_contents_impl.h
@@ -636,6 +636,8 @@ int context_id) override; RenderFrameHostImpl* GetMainFrameForInnerDelegate( FrameTreeNode* frame_tree_node) override; + void OnThemeColorChanged(RenderFrameHostImpl* source, + const base::Optional<SkColor>& theme_color) override; // RenderViewHostDelegate ---------------------------------------------------- RenderViewHostDelegateView* GetDelegateView() override; @@ -1282,8 +1284,6 @@ const base::string16& user_input); // IPC message handlers. - void OnThemeColorChanged(RenderFrameHostImpl* source, - base::Optional<SkColor> theme_color); void OnDidLoadResourceFromMemoryCache( RenderFrameHostImpl* source, const GURL& url,
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc index ad7cd58..83aa880 100644 --- a/content/browser/web_contents/web_contents_impl_browsertest.cc +++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -4178,4 +4178,162 @@ histogram_tester.ExpectBucketCount(kMaxFrameCountUMA, /* bucket */ 3, /* count */ 1); } + +namespace { + +class LoadingObserver : public WebContentsObserver { + public: + explicit LoadingObserver(WebContents* web_contents) + : WebContentsObserver(web_contents) {} + + std::vector<std::string>& GetEvents() { return events_; } + + void DidStartNavigation(NavigationHandle* navigation_handle) override { + events_.push_back("DidStartNavigation"); + } + + void DidFinishNavigation(NavigationHandle* navigation_handle) override { + events_.push_back("DidFinishNavigation"); + } + + void DidStartLoading() override { events_.push_back("DidStartLoading"); } + + void DidStopLoading() override { + events_.push_back("DidStopLoading"); + run_loop_.Quit(); + } + + void DocumentAvailableInMainFrame() override { + events_.push_back("DocumentAvailableInMainFrame"); + } + + void DocumentOnLoadCompletedInMainFrame() override { + events_.push_back("DocumentOnLoadCompletedInMainFrame"); + } + + void DOMContentLoaded(RenderFrameHost* render_frame_host) override { + events_.push_back("DOMContentLoaded"); + } + + void DidFinishLoad(RenderFrameHost* render_frame_host, + const GURL& url) override { + events_.push_back("DidFinishLoad"); + } + + void DidFailLoad(RenderFrameHost* render_frame_host, + const GURL& url, + int error_code, + const base::string16& error_description) override { + events_.push_back("DidFailLoad"); + } + + void Wait() { run_loop_.Run(); } + + private: + std::vector<std::string> events_; + base::RepeatingClosure completion_callback_; + base::RunLoop run_loop_; +}; + +} // namespace + +// These tests provide a reference points for simulating the navigation events +// for unittests. +// +// Keep in sync with TestRenderFrameHostTest.LoadingCallbacksOrder_*. +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, + LoadingCallbacksOrder_CrossDocumentNavigation) { + ASSERT_TRUE(embedded_test_server()->Start()); + WebContentsImpl* web_contents = + static_cast<WebContentsImpl*>(shell()->web_contents()); + + LoadingObserver loading_observer(web_contents); + + GURL url = embedded_test_server()->GetURL("a.com", "/title1.html"); + EXPECT_TRUE(NavigateToURL(shell(), url)); + loading_observer.Wait(); + + EXPECT_THAT(loading_observer.GetEvents(), + testing::ElementsAre( + "DidStartLoading", "DidStartNavigation", + "DidFinishNavigation", "DocumentAvailableInMainFrame", + "DOMContentLoaded", "DocumentOnLoadCompletedInMainFrame", + "DidFinishLoad", "DidStopLoading")); +} + +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, + LoadingCallbacksOrder_SameDocumentNavigation) { + ASSERT_TRUE(embedded_test_server()->Start()); + WebContentsImpl* web_contents = + static_cast<WebContentsImpl*>(shell()->web_contents()); + + GURL url1 = embedded_test_server()->GetURL("a.com", "/title1.html"); + GURL url2 = embedded_test_server()->GetURL("a.com", "/title1.html#foo"); + + LoadingObserver loading_observer1(web_contents); + EXPECT_TRUE(NavigateToURL(shell(), url1)); + loading_observer1.Wait(); + + LoadingObserver loading_observer2(web_contents); + EXPECT_TRUE(NavigateToURL(shell(), url2)); + loading_observer2.Wait(); + + EXPECT_THAT(loading_observer2.GetEvents(), + testing::ElementsAre("DidStartLoading", "DidStartNavigation", + "DidFinishNavigation", "DidStopLoading")); +} + +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, + LoadingCallbacksOrder_AbortedNavigation) { + const char kPageURL[] = "/controlled_page_load.html"; + net::test_server::ControllableHttpResponse response(embedded_test_server(), + kPageURL); + ASSERT_TRUE(embedded_test_server()->Start()); + + GURL url = embedded_test_server()->GetURL("a.com", kPageURL); + WebContentsImpl* web_contents = + static_cast<WebContentsImpl*>(shell()->web_contents()); + + LoadingObserver loading_observer(web_contents); + shell()->LoadURL(url); + response.WaitForRequest(); + response.Send(net::HttpStatusCode::HTTP_NO_CONTENT); + response.Done(); + + loading_observer.Wait(); + + EXPECT_THAT(loading_observer.GetEvents(), + testing::ElementsAre("DidStartLoading", "DidStartNavigation", + "DidFinishNavigation", "DidStopLoading")); +} + +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, + LoadingCallbacksOrder_ErrorPage) { + const char kPageURL[] = "/controlled_page_load.html"; + net::test_server::ControllableHttpResponse response(embedded_test_server(), + kPageURL); + ASSERT_TRUE(embedded_test_server()->Start()); + + GURL url = embedded_test_server()->GetURL("a.com", kPageURL); + WebContentsImpl* web_contents = + static_cast<WebContentsImpl*>(shell()->web_contents()); + + LoadingObserver loading_observer(web_contents); + shell()->LoadURL(url); + response.WaitForRequest(); + response.Send(net::HttpStatusCode::HTTP_REQUEST_TIMEOUT); + response.Done(); + + loading_observer.Wait(); + + EXPECT_THAT(loading_observer.GetEvents(), + testing::ElementsAre( + "DidStartLoading", "DidStartNavigation", + "DidFinishNavigation", "DocumentAvailableInMainFrame", + "DOMContentLoaded", "DidFinishLoad", "DidStartNavigation", + "DidFinishNavigation", "DocumentAvailableInMainFrame", + "DOMContentLoaded", "DocumentOnLoadCompletedInMainFrame", + "DidFinishLoad", "DidStopLoading")); +} + } // namespace content
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc index 3f7b9ab..0249698 100644 --- a/content/browser/web_contents/web_contents_impl_unittest.cc +++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -3260,8 +3260,7 @@ // Theme color changes should not propagate past the WebContentsImpl before // the first visually non-empty paint has occurred. - rfh->OnMessageReceived( - FrameHostMsg_DidChangeThemeColor(rfh->GetRoutingID(), SK_ColorRED)); + rfh->DidChangeThemeColor(SK_ColorRED); EXPECT_EQ(SK_ColorRED, contents()->GetThemeColor()); EXPECT_EQ(base::nullopt, observer.last_theme_color()); @@ -3274,8 +3273,7 @@ EXPECT_EQ(SK_ColorRED, observer.last_theme_color()); // Additional changes made by the web contents should propagate as well. - rfh->OnMessageReceived( - FrameHostMsg_DidChangeThemeColor(rfh->GetRoutingID(), SK_ColorGREEN)); + rfh->DidChangeThemeColor(SK_ColorGREEN); EXPECT_EQ(SK_ColorGREEN, contents()->GetThemeColor()); EXPECT_EQ(SK_ColorGREEN, observer.last_theme_color());
diff --git a/content/common/frame.mojom b/content/common/frame.mojom index 03d5268b..0742f40c 100644 --- a/content/common/frame.mojom +++ b/content/common/frame.mojom
@@ -22,6 +22,7 @@ import "services/network/public/mojom/url_loader_factory.mojom"; import "services/service_manager/public/mojom/interface_provider.mojom"; import "services/viz/public/mojom/compositing/surface_id.mojom"; +import "skia/public/mojom/skcolor.mojom"; import "third_party/blink/public/mojom/blob/blob_url_store.mojom"; import "third_party/blink/public/mojom/commit_result/commit_result.mojom"; import "third_party/blink/public/mojom/devtools/console_message.mojom"; @@ -566,4 +567,7 @@ // Evicts the page from the back/forward cache due to e.g., JavaScript // execution. EvictFromBackForwardCache(); + + // Notifies the browser that the current frame has changed theme color. + DidChangeThemeColor(skia.mojom.SkColor? theme_color); };
diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index 8b981c5a..0fc4073 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h
@@ -1328,10 +1328,6 @@ bool /* out - success */, base::string16 /* out - This is ignored.*/) -// Notify browser the theme color has been changed. -IPC_MESSAGE_ROUTED1(FrameHostMsg_DidChangeThemeColor, - base::Optional<SkColor> /* theme_color */) - // Register a new handler for URL requests with the given scheme. IPC_MESSAGE_ROUTED4(FrameHostMsg_RegisterProtocolHandler, std::string /* scheme */,
diff --git a/content/public/browser/native_file_system_entry_factory.h b/content/public/browser/native_file_system_entry_factory.h index 3666fc7..d7c42af 100644 --- a/content/public/browser/native_file_system_entry_factory.h +++ b/content/public/browser/native_file_system_entry_factory.h
@@ -16,10 +16,11 @@ namespace content { -// Exposes methods for creating NativeFileSystemEntries. +// Exposes methods for creating NativeFileSystemEntries. All these methods need +// to be called on the UI thread. class CONTENT_EXPORT NativeFileSystemEntryFactory : public base::RefCountedThreadSafe<NativeFileSystemEntryFactory, - BrowserThread::DeleteOnIOThread> { + BrowserThread::DeleteOnUIThread> { public: // Context from which a created handle is going to be used. This is used for // security and permission checks. Pass in MSG_ROUTING_NONE as frame_id if @@ -56,7 +57,7 @@ const base::FilePath& directory_path) = 0; protected: - friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>; + friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; friend class base::DeleteHelper<NativeFileSystemEntryFactory>; virtual ~NativeFileSystemEntryFactory() {} };
diff --git a/content/public/browser/native_file_system_permission_context.h b/content/public/browser/native_file_system_permission_context.h index 4de15bac..1e763f101 100644 --- a/content/public/browser/native_file_system_permission_context.h +++ b/content/public/browser/native_file_system_permission_context.h
@@ -14,7 +14,7 @@ // Entry point to an embedder implemented permission context for the Native File // System API. Instances of this class can be retrieved via a BrowserContext. -// All these methods should always be called on the same sequence. +// All these methods must always be called on the UI thread. class NativeFileSystemPermissionContext { public: // The type of action a user took that resulted in needing a permission grant
diff --git a/content/public/browser/native_file_system_permission_grant.h b/content/public/browser/native_file_system_permission_grant.h index 9ecadec..1433641 100644 --- a/content/public/browser/native_file_system_permission_grant.h +++ b/content/public/browser/native_file_system_permission_grant.h
@@ -25,7 +25,7 @@ // // NativeFileSystemPermissionGrant instances are not thread safe, and should // only be used (and referenced) on the same sequence as the PermssionContext -// that created them. +// that created them, i.e. the UI thread. class CONTENT_EXPORT NativeFileSystemPermissionGrant : public base::RefCounted<NativeFileSystemPermissionGrant> { public:
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h index 9a8caf0..e0f9cda 100644 --- a/content/public/browser/render_frame_host.h +++ b/content/public/browser/render_frame_host.h
@@ -27,6 +27,7 @@ #include "third_party/blink/public/common/frame/sandbox_flags.h" #include "third_party/blink/public/common/scheduler/web_scheduler_tracked_feature.h" #include "third_party/blink/public/mojom/devtools/console_message.mojom.h" +#include "third_party/blink/public/mojom/frame/frame.mojom.h" #include "third_party/blink/public/mojom/loader/pause_subresource_loading_handle.mojom-forward.h" #include "third_party/blink/public/platform/web_sudden_termination_disabler_type.h" #include "ui/accessibility/ax_tree_id.h" @@ -126,6 +127,13 @@ // current RenderFrameHost. virtual RenderFrameHost* GetParent() = 0; + // Returns a vector of all RenderFrameHosts in the subtree rooted at |this|. + // The results may be in different processes. + // TODO(https://crbug.com/1013740): Consider exposing a way for the browser + // process to run a function across a subtree in all renderers rather than + // exposing the RenderFrameHosts of the frames here. + virtual std::vector<RenderFrameHost*> GetFramesInSubtree() = 0; + // Returns whether or not this RenderFrameHost is a descendant of |ancestor|. // This is equivalent to check that |ancestor| is reached by iterating on // GetParent(). @@ -289,14 +297,14 @@ virtual bool HasSelection() = 0; // Text surrounding selection. - typedef base::OnceCallback<void(const base::string16& content, - uint32_t start_offset, - uint32_t end_offset)> - TextSurroundingSelectionCallback; virtual void RequestTextSurroundingSelection( - TextSurroundingSelectionCallback callback, + blink::mojom::Frame::GetTextSurroundingSelectionCallback callback, int max_length) = 0; + // Generates an intervention report in this frame. + virtual void SendInterventionReport(const std::string& id, + const std::string& message) = 0; + // Tell the render frame to enable a set of javascript bindings. The argument // should be a combination of values from BindingsPolicy. virtual void AllowBindings(int binding_flags) = 0;
diff --git a/content/renderer/navigation_state.cc b/content/renderer/navigation_state.cc index d32bfe45..ac6023f 100644 --- a/content/renderer/navigation_state.cc +++ b/content/renderer/navigation_state.cc
@@ -87,8 +87,7 @@ per_navigation_mojo_interface_commit_callback, std::unique_ptr<NavigationClient> navigation_client, bool was_initiated_in_this_frame) - : request_committed_(false), - was_within_same_document_(false), + : was_within_same_document_(false), was_initiated_in_this_frame_(was_initiated_in_this_frame), is_content_initiated_(is_content_initiated), common_params_(std::move(common_params)),
diff --git a/content/renderer/navigation_state.h b/content/renderer/navigation_state.h index 5d3b40d..af75943 100644 --- a/content/renderer/navigation_state.h +++ b/content/renderer/navigation_state.h
@@ -57,11 +57,9 @@ const mojom::CommitNavigationParams& commit_params() const { return *commit_params_; } - bool request_committed() const { return request_committed_; } bool uses_per_navigation_mojo_interface() const { return navigation_client_.get(); } - void set_request_committed(bool value) { request_committed_ = value; } void set_was_within_same_document(bool value) { was_within_same_document_ = value; } @@ -106,7 +104,6 @@ std::unique_ptr<NavigationClient> navigation_client, bool was_initiated_in_this_frame); - bool request_committed_; bool was_within_same_document_; // Indicates whether the navigation was initiated by the same RenderFrame
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index db30b901..4b2e423 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -4316,16 +4316,10 @@ // NOTE: Do not call back into JavaScript here, since this call is made from a // V8 security check. - // If the request hasn't yet committed, notify the browser process that it is - // no longer safe to show the pending URL of the main frame, since a URL spoof - // is now possible. (If the request has committed, the browser already knows.) - if (!has_accessed_initial_document_) { - NavigationState* navigation_state = - NavigationState::FromDocumentLoader(frame_->GetDocumentLoader()); - if (!navigation_state->request_committed()) { - Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_)); - } - } + // Notify the browser process that it is no longer safe to show the pending + // URL of the main frame, since a URL spoof is now possible. + if (!has_accessed_initial_document_) + Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_)); has_accessed_initial_document_ = true; } @@ -5158,8 +5152,7 @@ if (frame_->Parent()) return; - Send(new FrameHostMsg_DidChangeThemeColor( - routing_id_, frame_->GetDocument().ThemeColor())); + GetFrameHost()->DidChangeThemeColor(frame_->GetDocument().ThemeColor()); } void RenderFrameImpl::ForwardResourceTimingToParent( @@ -5182,7 +5175,6 @@ void RenderFrameImpl::NavigateBackForwardSoon(int offset, bool has_user_gesture) { - render_view()->NavigateBackForwardSoon(offset, has_user_gesture); Send(new FrameHostMsg_GoToEntryAtOffset(GetRoutingID(), offset, has_user_gesture)); } @@ -6017,9 +6009,6 @@ navigation_state->commit_params().pending_history_list_offset; } - if (commit_type == blink::WebHistoryCommitType::kWebBackForwardCommit) - render_view_->DidCommitProvisionalHistoryLoad(); - return is_new_navigation; } @@ -6080,13 +6069,6 @@ render_widget_->GetScreenInfo().device_scale_factor); } - // Remember that we've already processed this request, so we don't update - // the session history again. We do this regardless of whether this is - // a session history navigation, because if we attempted a session history - // navigation without valid HistoryItem state, WebCore will think it is a - // new navigation. - navigation_state->set_request_committed(true); - // If we are a top frame navigation to another document we should clear any // existing autoplay flags on the Page. This is because flags are stored at // the page level so subframes would only add to them.
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 4dc489f..bf3f42e8 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc
@@ -1690,21 +1690,6 @@ needs_preferred_size_update_ = true; } -void RenderViewImpl::NavigateBackForwardSoon(int offset, - bool has_user_gesture) { - history_navigation_virtual_time_pauser_ = - RenderThreadImpl::current() - ->GetWebMainThreadScheduler() - ->CreateWebScopedVirtualTimePauser( - "NavigateBackForwardSoon", - blink::WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant); - history_navigation_virtual_time_pauser_.PauseVirtualTime(); -} - -void RenderViewImpl::DidCommitProvisionalHistoryLoad() { - history_navigation_virtual_time_pauser_.UnpauseVirtualTime(); -} - void RenderViewImpl::UpdateBrowserControlsState( BrowserControlsState constraints, BrowserControlsState current,
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 6dd9b0b..b1d9886 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h
@@ -43,7 +43,6 @@ #include "third_party/blink/public/common/feature_policy/feature_policy.h" #include "third_party/blink/public/mojom/renderer_preference_watcher.mojom.h" #include "third_party/blink/public/mojom/renderer_preferences.mojom.h" -#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h" #include "third_party/blink/public/platform/web_input_event.h" #include "third_party/blink/public/platform/web_security_origin.h" #include "third_party/blink/public/web/web_ax_object.h" @@ -209,9 +208,6 @@ // synchronously from the renderer. void SetFocusAndActivateForTesting(bool enable); - void NavigateBackForwardSoon(int offset, bool has_user_gesture); - void DidCommitProvisionalHistoryLoad(); - void UpdateBrowserControlsState(BrowserControlsState constraints, BrowserControlsState current, bool animate); @@ -689,8 +685,6 @@ // is fine. base::ObserverList<RenderViewObserver>::Unchecked observers_; - blink::WebScopedVirtualTimePauser history_navigation_virtual_time_pauser_; - // --------------------------------------------------------------------------- // ADDING NEW DATA? Please see if it fits appropriately in one of the above // sections rather than throwing it randomly at the end. If you're adding a
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 724fa98..ebb36ffd 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -1963,6 +1963,7 @@ "../test/renderer_audio_output_stream_factory_context_impl_unittest.cc", "navigation_simulator_unittest.cc", "proxy_service_mojo_unittest.cc", + "test_render_frame_host_unittest.cc", "url_request_context_builder_mojo_unittest.cc", ]
diff --git a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py index da273169..8f309e1b 100644 --- a/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py +++ b/content/test/gpu/gpu_tests/skia_gold_integration_test_base.py
@@ -2,6 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import contextlib from datetime import date import json import logging @@ -40,6 +41,23 @@ SKIA_GOLD_INSTANCE = 'chrome-gpu' +@contextlib.contextmanager +def RunInChromiumSrc(): + old_cwd = os.getcwd() + os.chdir(path_util.GetChromiumSrcDir()) + try: + yield + finally: + os.chdir(old_cwd) + + +# This is mainly used to determine if we need to run a subprocess through the +# shell - on Windows, finding executables via PATH doesn't work properly unless +# run through the shell. +def IsWin(): + return sys.platform == 'win32' + + class _ImageParameters(object): def __init__(self): # Parameters for cloud storage reference images. @@ -68,6 +86,9 @@ _skia_gold_temp_dir = None + _local_run = None + _build_revision = None + @classmethod def SetParsedCommandLineOptions(cls, options): cls._parsed_command_line_options = options @@ -115,7 +136,7 @@ parser.add_option( '--build-revision', help='Chrome revision being tested.', - default="unknownrev") + default=None) parser.add_option( '--test-machine-name', help='Name of the test machine. Specifying this argument causes this ' @@ -148,12 +169,13 @@ 'if the Skia Gold image comparison reported a failure, but ' 'otherwise perform the same steps as usual.') parser.add_option( - '--local-run', - action='store_true', default=False, - help='Runs the tests in a manner more suitable for local testing. ' - 'Specifically, runs goldctl in extra_imgtest_args mode (no upload) ' - 'and outputs local links to generated images. Implies ' - '--no-luci-auth.') + '--local-run', default=None, type=int, + help='Specifies to run the test harness in local run mode or not. When ' + 'run in local mode, uploading to Gold is disabled and links to ' + 'help with local debugging are output. Running in local mode also ' + 'implies --no-luci-auth. If left unset, the test harness will ' + 'attempt to detect whether it is running on a workstation or not ' + 'and set this option accordingly.') parser.add_option( '--no-luci-auth', action='store_true', default=False, @@ -225,8 +247,7 @@ cls.GetParsedCommandLineOptions().test_machine_name) base_bucket = '%s/gold_failures' % (cls._error_image_cloud_storage_bucket) image_name_with_revision_and_machine = '%s_%s_%s.png' % ( - image_name, machine_name, - cls.GetParsedCommandLineOptions().build_revision) + image_name, machine_name, cls._GetBuildRevision()) cls._UploadBitmapToCloudStorage( base_bucket, image_name_with_revision_and_machine, screenshot, public=True) @@ -317,7 +338,7 @@ parsed_options = self.GetParsedCommandLineOptions() build_id_args = [ '--commit', - parsed_options.build_revision, + self._GetBuildRevision(), ] # If --review-patch-issue is passed, then we assume we're running on a # trybot. @@ -381,7 +402,7 @@ extra_imgtest_args = [] extra_auth_args = [] parsed_options = self.GetParsedCommandLineOptions() - if parsed_options.local_run: + if self._IsLocalRun(): extra_imgtest_args.append('--dryrun') elif not parsed_options.no_luci_auth: extra_auth_args = ['--luci'] @@ -491,6 +512,52 @@ raise @classmethod + def _IsLocalRun(cls): + """Returns whether the test is running on a local workstation or not.""" + # Do nothing if we've already determine whether we're in local mode or not. + if cls._local_run is not None: + pass + # Use the --local-run value if it's been set. + elif cls.GetParsedCommandLineOptions().local_run is not None: + cls._local_run = cls.GetParsedCommandLineOptions().local_run + # Look for the presence of a git repo as a heuristic to determine whether + # we're running on a workstation or a bot. + else: + with RunInChromiumSrc(): + try: + subprocess.check_call(['git', 'status'], shell=IsWin()) + logging.warning( + 'Automatically determined that test is running on a workstation') + cls._local_run = True + except subprocess.CalledProcessError: + logging.warning( + 'Automatically determined that test is running on a bot') + cls._local_run = False + return cls._local_run + + @classmethod + def _GetBuildRevision(cls): + """Returns the current git master revision being tested.""" + # Do nothing if we've already determined the build revision. + if cls._build_revision is not None: + pass + # use the --build-revision value if it's been set. + elif cls.GetParsedCommandLineOptions().build_revision: + cls._build_revision = cls.GetParsedCommandLineOptions().build_revision + # Try to determine what revision we're on using git. + else: + with RunInChromiumSrc(): + try: + cls._build_revision = subprocess.check_output( + ['git', 'rev-parse', 'origin/master'], shell=IsWin()).strip() + logging.warning('Automatically determined build revision to be %s', + cls._build_revision) + except subprocess.CalledProcessError: + raise Exception('--build-revision not passed, and unable to ' + 'determine revision using git') + return cls._build_revision + + @classmethod def GenerateGpuTests(cls, options): del options return []
diff --git a/content/test/mock_clipboard_host.cc b/content/test/mock_clipboard_host.cc index 9cf5293..1f1d70e 100644 --- a/content/test/mock_clipboard_host.cc +++ b/content/test/mock_clipboard_host.cc
@@ -127,6 +127,13 @@ custom_data_[it.first] = it.second; } +void MockClipboardHost::WriteRawData(const base::string16& format, + mojo_base::BigBuffer data) { + if (needs_reset_) + Reset(); + raw_data_[format] = std::move(data); +} + void MockClipboardHost::WriteBookmark(const std::string& url, const base::string16& title) {}
diff --git a/content/test/mock_clipboard_host.h b/content/test/mock_clipboard_host.h index efb490e..9eb5de6 100644 --- a/content/test/mock_clipboard_host.h +++ b/content/test/mock_clipboard_host.h
@@ -8,6 +8,7 @@ #include "base/macros.h" #include "base/strings/string16.h" #include "build/build_config.h" +#include "mojo/public/cpp/base/big_buffer.h" #include "mojo/public/cpp/bindings/receiver_set.h" #include "third_party/blink/public/mojom/clipboard/clipboard.mojom.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -47,6 +48,7 @@ void WriteSmartPasteMarker() override; void WriteCustomData( const base::flat_map<base::string16, base::string16>& data) override; + void WriteRawData(const base::string16&, mojo_base::BigBuffer) override; void WriteBookmark(const std::string& url, const base::string16& title) override; void WriteImage(const SkBitmap& bitmap) override; @@ -62,6 +64,7 @@ GURL url_; SkBitmap image_; std::map<base::string16, base::string16> custom_data_; + std::map<base::string16, mojo_base::BigBuffer> raw_data_; bool write_smart_paste_ = false; bool needs_reset_ = false;
diff --git a/content/test/navigation_simulator_impl.cc b/content/test/navigation_simulator_impl.cc index 966fcd1..43485163 100644 --- a/content/test/navigation_simulator_impl.cc +++ b/content/test/navigation_simulator_impl.cc
@@ -628,6 +628,8 @@ FrameHostMsg_SwapOut_ACK(previous_rfh->GetRoutingID())); } + loading_scenario_ = + TestRenderFrameHost::LoadingScenario::NewDocumentNavigation; state_ = FINISHED; if (!keep_loading_) StopLoading(); @@ -801,6 +803,8 @@ state_ = FAILED; return; } + loading_scenario_ = + TestRenderFrameHost::LoadingScenario::kSameDocumentNavigation; state_ = FINISHED; if (!keep_loading_) StopLoading(); @@ -1341,7 +1345,7 @@ void NavigationSimulatorImpl::StopLoading() { CHECK(render_frame_host_); - render_frame_host_->SimulateLoadingCompleted(); + render_frame_host_->SimulateLoadingCompleted(loading_scenario_); } void NavigationSimulatorImpl::FailLoading(
diff --git a/content/test/navigation_simulator_impl.h b/content/test/navigation_simulator_impl.h index 077ff89..21450f3 100644 --- a/content/test/navigation_simulator_impl.h +++ b/content/test/navigation_simulator_impl.h
@@ -16,6 +16,7 @@ #include "content/public/browser/navigation_throttle.h" #include "content/public/browser/web_contents_observer.h" #include "content/public/test/navigation_simulator.h" +#include "content/test/test_render_frame_host.h" #include "mojo/public/cpp/bindings/pending_associated_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "net/base/host_port_pair.h" @@ -274,6 +275,8 @@ bool was_initiated_by_link_click_ = false; bool browser_initiated_; bool same_document_ = false; + TestRenderFrameHost::LoadingScenario loading_scenario_ = + TestRenderFrameHost::LoadingScenario::kOther; blink::mojom::ReferrerPtr referrer_; ui::PageTransition transition_; ReloadType reload_type_ = ReloadType::NONE;
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc index 5b92b65..05df4e7b 100644 --- a/content/test/test_render_frame.cc +++ b/content/test/test_render_frame.cc
@@ -9,6 +9,7 @@ #include <vector> #include "base/bind_helpers.h" +#include "base/optional.h" #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "content/common/frame.mojom.h" @@ -29,6 +30,7 @@ #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" #include "third_party/blink/public/web/web_local_frame.h" #include "third_party/blink/public/web/web_navigation_control.h" +#include "third_party/skia/include/core/SkColor.h" namespace content { @@ -227,6 +229,9 @@ void EvictFromBackForwardCache() override {} + void DidChangeThemeColor( + const base::Optional<::SkColor>& theme_color) override {} + private: std::unique_ptr<FrameHostMsg_DidCommitProvisionalLoad_Params> last_commit_params_;
diff --git a/content/test/test_render_frame_host.cc b/content/test/test_render_frame_host.cc index eda2dbfe..2eabc97 100644 --- a/content/test/test_render_frame_host.cc +++ b/content/test/test_render_frame_host.cc
@@ -19,6 +19,7 @@ #include "content/common/frame_owner_properties.h" #include "content/common/navigation_params.h" #include "content/common/navigation_params_utils.h" +#include "content/common/view_messages.h" #include "content/public/browser/navigation_throttle.h" #include "content/public/common/navigation_policy.h" #include "content/public/common/url_constants.h" @@ -693,7 +694,25 @@ .InitWithNewPipeAndPassReceiver(); } -void TestRenderFrameHost::SimulateLoadingCompleted() { +void TestRenderFrameHost::SimulateLoadingCompleted( + TestRenderFrameHost::LoadingScenario loading_scenario) { + if (!is_loading()) + return; + + if (loading_scenario == LoadingScenario::NewDocumentNavigation) { + static_cast<IPC::Listener*>(GetRenderViewHost()) + ->OnMessageReceived(ViewHostMsg_DocumentAvailableInMainFrame( + GetRenderViewHost()->GetRoutingID(), + /* uses_temporary_zoom_level */ false)); + + OnMessageReceived(FrameHostMsg_DidFinishDocumentLoad(GetRoutingID())); + + DocumentOnLoadCompleted(); + + OnMessageReceived( + FrameHostMsg_DidFinishLoad(GetRoutingID(), GetLastCommittedURL())); + } + OnDidStopLoading(); }
diff --git a/content/test/test_render_frame_host.h b/content/test/test_render_frame_host.h index 8fcc648..87304f9 100644 --- a/content/test/test_render_frame_host.h +++ b/content/test/test_render_frame_host.h
@@ -207,9 +207,18 @@ return navigation_requests_; } + enum class LoadingScenario { + NewDocumentNavigation, + kSameDocumentNavigation, + + // TODO(altimin): Improve handling for the scenarios where navigation or + // page load have failed. + kOther + }; + // Simulates RenderFrameHost finishing loading and dispatching all relevant // callbacks. - void SimulateLoadingCompleted(); + void SimulateLoadingCompleted(LoadingScenario loading_scenario); protected: void SendCommitNavigation(
diff --git a/content/test/test_render_frame_host_unittest.cc b/content/test/test_render_frame_host_unittest.cc new file mode 100644 index 0000000..af0d6c6 --- /dev/null +++ b/content/test/test_render_frame_host_unittest.cc
@@ -0,0 +1,108 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/test/test_render_frame_host.h" + +#include <string> +#include <vector> + +#include "content/public/browser/web_contents_observer.h" +#include "content/test/navigation_simulator_impl.h" +#include "content/test/test_render_view_host.h" +#include "content/test/test_web_contents.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace content { + +class TestRenderFrameHostTest : public RenderViewHostImplTestHarness, + public WebContentsObserver { + public: + void SetUp() override { + RenderViewHostImplTestHarness::SetUp(); + contents()->GetMainFrame()->InitializeRenderFrameIfNeeded(); + Observe(RenderViewHostImplTestHarness::web_contents()); + } + + std::vector<std::string>& Events() { return events_; } + + void DidStartNavigation(NavigationHandle* navigation_handle) override { + events_.push_back("DidStartNavigation"); + } + + void DidFinishNavigation(NavigationHandle* navigation_handle) override { + events_.push_back("DidFinishNavigation"); + } + + void DidStartLoading() override { events_.push_back("DidStartLoading"); } + + void DidStopLoading() override { events_.push_back("DidStopLoading"); } + + void DocumentAvailableInMainFrame() override { + events_.push_back("DocumentAvailableInMainFrame"); + } + + void DocumentOnLoadCompletedInMainFrame() override { + events_.push_back("DocumentOnLoadCompletedInMainFrame"); + } + + void DOMContentLoaded(RenderFrameHost* render_frame_host) override { + events_.push_back("DOMContentLoaded"); + } + + void DidFinishLoad(RenderFrameHost* render_frame_host, + const GURL& url) override { + events_.push_back("DidFinishLoad"); + } + + void DidFailLoad(RenderFrameHost* render_frame_host, + const GURL& url, + int error_code, + const base::string16& error_description) override { + events_.push_back("DidFailLoad"); + } + + private: + std::vector<std::string> events_; +}; + +// These tests check that the loading events simulated by NavigationSimulator +// together with TestRenderFrameHost::SimulateLoadingCompleted match +// the real behaviour, captured by the browser tests. +// +// Keep in sync with WebContentsImplBrowserTest.LoadingCallbacksOrder_*. +TEST_F(TestRenderFrameHostTest, LoadingCallbacksOrder_CrossDocument) { + std::unique_ptr<NavigationSimulator> simulator = + NavigationSimulator::CreateRendererInitiated( + GURL("https://example.test/"), main_rfh()); + simulator->Start(); + simulator->Commit(); + + EXPECT_THAT(Events(), + testing::ElementsAre( + "DidStartLoading", "DidStartNavigation", + "DidFinishNavigation", "DocumentAvailableInMainFrame", + "DOMContentLoaded", "DocumentOnLoadCompletedInMainFrame", + "DidFinishLoad", "DidStopLoading")); +} + +TEST_F(TestRenderFrameHostTest, LoadingCallbacksOrder_SameDocument) { + std::unique_ptr<NavigationSimulator> simulator = + NavigationSimulator::CreateRendererInitiated( + GURL("https://example.test/"), main_rfh()); + simulator->Start(); + simulator->Commit(); + + Events().clear(); + + NavigationSimulator::CreateRendererInitiated( + GURL("https://example.test/#foo"), main_rfh()) + ->CommitSameDocument(); + + EXPECT_THAT(Events(), + testing::ElementsAre("DidStartLoading", "DidStartNavigation", + "DidFinishNavigation", "DidStopLoading")); +} + +} // namespace content
diff --git a/crypto/ec_private_key.cc b/crypto/ec_private_key.cc index c30a6107..f8d3b87 100644 --- a/crypto/ec_private_key.cc +++ b/crypto/ec_private_key.cc
@@ -43,7 +43,7 @@ // static std::unique_ptr<ECPrivateKey> ECPrivateKey::CreateFromPrivateKeyInfo( - const std::vector<uint8_t>& input) { + base::span<const uint8_t> input) { OpenSSLErrStackTracer err_tracer(FROM_HERE); CBS cbs; @@ -59,7 +59,7 @@ // static std::unique_ptr<ECPrivateKey> ECPrivateKey::CreateFromEncryptedPrivateKeyInfo( - const std::vector<uint8_t>& encrypted_private_key_info) { + base::span<const uint8_t> encrypted_private_key_info) { OpenSSLErrStackTracer err_tracer(FROM_HERE); CBS cbs; @@ -87,6 +87,28 @@ return result; } +// static +std::unique_ptr<ECPrivateKey> ECPrivateKey::DeriveFromSecret( + base::span<const uint8_t> secret) { + bssl::UniquePtr<EC_GROUP> group( + EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1)); + if (!group) + return nullptr; + + bssl::UniquePtr<EC_KEY> ec_key( + EC_KEY_derive_from_secret(group.get(), secret.data(), secret.size())); + if (!ec_key) + return nullptr; + + std::unique_ptr<ECPrivateKey> result(new ECPrivateKey()); + result->key_.reset(EVP_PKEY_new()); + if (!result->key_ || !EVP_PKEY_set1_EC_KEY(result->key_.get(), ec_key.get())) + return nullptr; + + CHECK_EQ(EVP_PKEY_EC, EVP_PKEY_id(result->key_.get())); + return result; +} + std::unique_ptr<ECPrivateKey> ECPrivateKey::Copy() const { std::unique_ptr<ECPrivateKey> copy(new ECPrivateKey()); copy->key_ = bssl::UpRef(key_); @@ -135,7 +157,7 @@ bool ECPrivateKey::ExportPublicKey(std::vector<uint8_t>* output) const { OpenSSLErrStackTracer err_tracer(FROM_HERE); - uint8_t *der; + uint8_t* der; size_t der_len; bssl::ScopedCBB cbb; if (!CBB_init(cbb.get(), 0) ||
diff --git a/crypto/ec_private_key.h b/crypto/ec_private_key.h index c087d238..de69709 100644 --- a/crypto/ec_private_key.h +++ b/crypto/ec_private_key.h
@@ -12,6 +12,7 @@ #include <string> #include <vector> +#include "base/containers/span.h" #include "base/macros.h" #include "build/build_config.h" #include "crypto/crypto_export.h" @@ -37,7 +38,7 @@ // an ASN.1-encoded PrivateKeyInfo block from PKCS #8. This can return // nullptr if initialization fails. static std::unique_ptr<ECPrivateKey> CreateFromPrivateKeyInfo( - const std::vector<uint8_t>& input); + base::span<const uint8_t> input); // Creates a new instance by importing an existing key pair. // The key pair is given as an ASN.1-encoded PKCS #8 EncryptedPrivateKeyInfo @@ -47,7 +48,13 @@ // This function is deprecated. Use CreateFromPrivateKeyInfo for new code. // See https://crbug.com/603319. static std::unique_ptr<ECPrivateKey> CreateFromEncryptedPrivateKeyInfo( - const std::vector<uint8_t>& encrypted_private_key_info); + base::span<const uint8_t> encrypted_private_key_info); + + // Creates a new instance by deriving private key from |secret|, and generates + // public key points accordingly. The created key will use the NIST P-256 + // curve. This can return nullptr if initialization fails. + static std::unique_ptr<ECPrivateKey> DeriveFromSecret( + base::span<const uint8_t> secret); // Returns a copy of the object. std::unique_ptr<ECPrivateKey> Copy() const; @@ -80,7 +87,6 @@ DISALLOW_COPY_AND_ASSIGN(ECPrivateKey); }; - } // namespace crypto #endif // CRYPTO_EC_PRIVATE_KEY_H_
diff --git a/crypto/ec_private_key_unittest.cc b/crypto/ec_private_key_unittest.cc index cfec13c..8a9cca7 100644 --- a/crypto/ec_private_key_unittest.cc +++ b/crypto/ec_private_key_unittest.cc
@@ -123,6 +123,70 @@ raw_public_key); } +TEST(ECPrivateKeyUnitTest, DeriveFromSecret) { + static const uint8_t kSecret[] = { + 0x90, 0x48, 0x0a, 0x51, 0x77, 0xa3, 0x72, 0xfb, 0xba, 0x0f, 0x08, + 0x5e, 0xc5, 0x6f, 0x8f, 0x6d, 0x1c, 0xaf, 0xa9, 0x8a, 0xdf, 0xa9, + 0x7c, 0x38, 0x70, 0x47, 0xb9, 0x72, 0xcc, 0x5c, 0xaa, 0xc2, + }; + + static const uint8_t kPrivateKeyInfo[] = { + 0x30, 0x81, 0x87, 0x02, 0x01, 0x00, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, + 0x48, 0xce, 0x3d, 0x02, 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, + 0x03, 0x01, 0x07, 0x04, 0x6d, 0x30, 0x6b, 0x02, 0x01, 0x01, 0x04, 0x20, + 0x0e, 0x87, 0xc8, 0x4d, 0x92, 0x14, 0x52, 0x93, 0x96, 0xad, 0x63, 0x9a, + 0x6a, 0xa7, 0xeb, 0x56, 0x5c, 0xaf, 0xab, 0x69, 0x06, 0xd4, 0x37, 0xf8, + 0x7d, 0xd7, 0x04, 0xa9, 0xec, 0x6e, 0x2e, 0x96, 0xa1, 0x44, 0x03, 0x42, + 0x00, 0x04, 0xe2, 0xf5, 0x86, 0x4a, 0xf6, 0xe0, 0x7d, 0x19, 0x94, 0x2d, + 0x54, 0x16, 0x58, 0x98, 0x62, 0x78, 0xf2, 0x8f, 0x30, 0x77, 0x93, 0x7d, + 0x2c, 0x17, 0x29, 0xe5, 0x50, 0x42, 0xed, 0x8d, 0x6c, 0x31, 0x34, 0x16, + 0x20, 0x4f, 0xcc, 0x50, 0x09, 0xaf, 0x8d, 0x56, 0x56, 0x73, 0xe3, 0xb9, + 0x5a, 0x15, 0xbf, 0x73, 0x25, 0x91, 0xa0, 0xaf, 0x8f, 0x64, 0x19, 0xf4, + 0x17, 0x8e, 0x7a, 0x05, 0x76, 0x23, + }; + + static const uint8_t kSubjectPublicKeyInfo[] = { + 0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, + 0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03, + 0x42, 0x00, 0x04, 0xe2, 0xf5, 0x86, 0x4a, 0xf6, 0xe0, 0x7d, 0x19, 0x94, + 0x2d, 0x54, 0x16, 0x58, 0x98, 0x62, 0x78, 0xf2, 0x8f, 0x30, 0x77, 0x93, + 0x7d, 0x2c, 0x17, 0x29, 0xe5, 0x50, 0x42, 0xed, 0x8d, 0x6c, 0x31, 0x34, + 0x16, 0x20, 0x4f, 0xcc, 0x50, 0x09, 0xaf, 0x8d, 0x56, 0x56, 0x73, 0xe3, + 0xb9, 0x5a, 0x15, 0xbf, 0x73, 0x25, 0x91, 0xa0, 0xaf, 0x8f, 0x64, 0x19, + 0xf4, 0x17, 0x8e, 0x7a, 0x05, 0x76, 0x23, + }; + static const uint8_t kRawPublicKey[] = { + 0xe2, 0xf5, 0x86, 0x4a, 0xf6, 0xe0, 0x7d, 0x19, 0x94, 0x2d, 0x54, + 0x16, 0x58, 0x98, 0x62, 0x78, 0xf2, 0x8f, 0x30, 0x77, 0x93, 0x7d, + 0x2c, 0x17, 0x29, 0xe5, 0x50, 0x42, 0xed, 0x8d, 0x6c, 0x31, 0x34, + 0x16, 0x20, 0x4f, 0xcc, 0x50, 0x09, 0xaf, 0x8d, 0x56, 0x56, 0x73, + 0xe3, 0xb9, 0x5a, 0x15, 0xbf, 0x73, 0x25, 0x91, 0xa0, 0xaf, 0x8f, + 0x64, 0x19, 0xf4, 0x17, 0x8e, 0x7a, 0x05, 0x76, 0x23, + }; + + std::unique_ptr<crypto::ECPrivateKey> key( + crypto::ECPrivateKey::DeriveFromSecret(kSecret)); + ASSERT_TRUE(key); + + std::vector<uint8_t> privkey; + EXPECT_TRUE(key->ExportPrivateKey(&privkey)); + EXPECT_EQ(std::vector<uint8_t>(std::begin(kPrivateKeyInfo), + std::end(kPrivateKeyInfo)), + privkey); + + std::vector<uint8_t> public_key; + ASSERT_TRUE(key->ExportPublicKey(&public_key)); + EXPECT_EQ(std::vector<uint8_t>(std::begin(kSubjectPublicKeyInfo), + std::end(kSubjectPublicKeyInfo)), + public_key); + + std::string raw_public_key; + ASSERT_TRUE(key->ExportRawPublicKey(&raw_public_key)); + EXPECT_EQ(std::string(reinterpret_cast<const char*>(kRawPublicKey), + sizeof(kRawPublicKey)), + raw_public_key); +} + TEST(ECPrivateKeyUnitTest, RSAPrivateKeyInfo) { static const uint8_t kPrivateKeyInfo[] = { 0x30, 0x82, 0x02, 0x78, 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a,
diff --git a/docs/gpu/gpu_testing.md b/docs/gpu/gpu_testing.md index f00c82eb..0fef762 100644 --- a/docs/gpu/gpu_testing.md +++ b/docs/gpu/gpu_testing.md
@@ -272,10 +272,17 @@ Additionally, the tests normally rely on the Gold server for viewing images produced by a test run. This does not work if the data is not actually uploaded. -In order to get around both of these issues, simply pass the `--local-run` flag -to the tests. This will disable uploading, but otherwise go through the same -steps as a test normally would. Each test will also print out a `file://` URL to -the image it produces and a link to all approved images for that test in Gold. +The pixel tests contain logic to automatically determine whether they are +running on a workstation or not, as well as to determine what git revision is +being tested. This *should* mean that the pixel tests will automatically work +when run locally. However, if the local run detection code fails for some +reason, you can manually pass some flags to force the same behavior: + +In order to get around the local run issues, simply pass the `--local-run=1` +flag to the tests. This will disable uploading, but otherwise go through the +same steps as a test normally would. Each test will also print out a `file://` +URL to the image it produces and a link to all approved images for that test in +Gold. Because the image produced by the test locally is likely slightly different from any of the approved images in Gold, local test runs are likely to fail during
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index 6eadf4cf..28074fb 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1452,6 +1452,8 @@ AUTOTESTPRIVATE_SETCLIPBOARDTEXTDATA = 1389, AUTOTESTPRIVATE_INITIALIZEEVENTS = 1390, AUTOTESTPRIVATE_WAITFORDISPLAYROTATION = 1391, + AUTOTESTPRIVATE_ARCAPPTRACINGSTART = 1392, + AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE = 1393, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/gpu/config/gpu_driver_bug_list.json b/gpu/config/gpu_driver_bug_list.json index 19141de..f2c43ccb 100644 --- a/gpu/config/gpu_driver_bug_list.json +++ b/gpu/config/gpu_driver_bug_list.json
@@ -3175,22 +3175,6 @@ ] }, { - "id": 298, - "cr_bugs": [941716], - "description": "AImageReader is very crashy on this driver version", - "os": { - "type" : "android" - }, - "gl_vendor": "Qualcomm.*", - "driver_version": { - "op": "=", - "value": "269.0" - }, - "features": [ - "disable_aimagereader" - ] - }, - { "id": 299, "description": "Context lost recovery often fails on PowerVR Rogue GE8* GPUs on Android.", "cr_bugs": [942106],
diff --git a/headless/lib/browser/headless_clipboard.cc b/headless/lib/browser/headless_clipboard.cc index 55de359..ced6f7b4 100644 --- a/headless/lib/browser/headless_clipboard.cc +++ b/headless/lib/browser/headless_clipboard.cc
@@ -118,12 +118,21 @@ *result = it->second; } -void HeadlessClipboard::WriteObjects(ui::ClipboardBuffer buffer, - const ObjectMap& objects) { +void HeadlessClipboard::WritePortableRepresentations(ui::ClipboardBuffer buffer, + const ObjectMap& objects) { Clear(buffer); default_store_buffer_ = buffer; for (const auto& kv : objects) - DispatchObject(kv.first, kv.second); + DispatchPortableRepresentation(kv.first, kv.second); + default_store_buffer_ = ui::ClipboardBuffer::kCopyPaste; +} + +void HeadlessClipboard::WritePlatformRepresentations( + ui::ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + Clear(buffer); + default_store_buffer_ = buffer; + DispatchPlatformRepresentations(std::move(platform_representations)); default_store_buffer_ = ui::ClipboardBuffer::kCopyPaste; }
diff --git a/headless/lib/browser/headless_clipboard.h b/headless/lib/browser/headless_clipboard.h index f563caf..aee5fc49 100644 --- a/headless/lib/browser/headless_clipboard.h +++ b/headless/lib/browser/headless_clipboard.h
@@ -48,8 +48,12 @@ void ReadBookmark(base::string16* title, std::string* url) const override; void ReadData(const ui::ClipboardFormatType& format, std::string* result) const override; - void WriteObjects(ui::ClipboardBuffer buffer, - const ObjectMap& objects) override; + void WritePortableRepresentations(ui::ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ui::ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len,
diff --git a/media/blink/BUILD.gn b/media/blink/BUILD.gn index e527c1c..78f3e5f 100644 --- a/media/blink/BUILD.gn +++ b/media/blink/BUILD.gn
@@ -22,6 +22,8 @@ "interval_map.h", "key_system_config_selector.cc", "key_system_config_selector.h", + "learning_experiment_helper.cc", + "learning_experiment_helper.h", "lru.h", "media_blink_export.h", "multibuffer.cc", @@ -133,6 +135,7 @@ "cache_util_unittest.cc", "interval_map_unittest.cc", "key_system_config_selector_unittest.cc", + "learning_experiment_helper_unittest.cc", "lru_unittest.cc", "mock_resource_fetch_context.cc", "mock_resource_fetch_context.h",
diff --git a/media/learning/common/experiment_helper.cc b/media/blink/learning_experiment_helper.cc similarity index 62% rename from media/learning/common/experiment_helper.cc rename to media/blink/learning_experiment_helper.cc index 0e30d05a..e343038 100644 --- a/media/learning/common/experiment_helper.cc +++ b/media/blink/learning_experiment_helper.cc
@@ -2,20 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "media/learning/common/experiment_helper.h" +#include "media/blink/learning_experiment_helper.h" namespace media { -namespace learning { -ExperimentHelper::ExperimentHelper( +using learning::FeatureDictionary; +using learning::FeatureVector; +using learning::LearningTask; +using learning::LearningTaskController; +using learning::TargetValue; + +LearningExperimentHelper::LearningExperimentHelper( std::unique_ptr<LearningTaskController> controller) : controller_(std::move(controller)) {} -ExperimentHelper::~ExperimentHelper() { +LearningExperimentHelper::~LearningExperimentHelper() { CancelObservationIfNeeded(); } -void ExperimentHelper::BeginObservation(const FeatureDictionary& dictionary) { +void LearningExperimentHelper::BeginObservation( + const FeatureDictionary& dictionary) { if (!controller_) return; @@ -29,7 +35,8 @@ controller_->BeginObservation(observation_id_, features); } -void ExperimentHelper::CompleteObservationIfNeeded(const TargetValue& target) { +void LearningExperimentHelper::CompleteObservationIfNeeded( + const TargetValue& target) { if (!observation_id_) return; @@ -37,7 +44,7 @@ observation_id_ = base::UnguessableToken::Null(); } -void ExperimentHelper::CancelObservationIfNeeded() { +void LearningExperimentHelper::CancelObservationIfNeeded() { if (!observation_id_) return; @@ -45,5 +52,4 @@ observation_id_ = base::UnguessableToken::Null(); } -} // namespace learning } // namespace media
diff --git a/media/learning/common/experiment_helper.h b/media/blink/learning_experiment_helper.h similarity index 62% rename from media/learning/common/experiment_helper.h rename to media/blink/learning_experiment_helper.h index 6a47e54..907bacf 100644 --- a/media/learning/common/experiment_helper.h +++ b/media/blink/learning_experiment_helper.h
@@ -2,53 +2,52 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef MEDIA_LEARNING_COMMON_EXPERIMENT_HELPER_H_ -#define MEDIA_LEARNING_COMMON_EXPERIMENT_HELPER_H_ +#ifndef MEDIA_BLINK_LEARNING_EXPERIMENT_HELPER_H_ +#define MEDIA_BLINK_LEARNING_EXPERIMENT_HELPER_H_ #include <memory> #include <string> -#include "base/component_export.h" #include "base/macros.h" +#include "media/blink/media_blink_export.h" #include "media/learning/common/feature_dictionary.h" #include "media/learning/common/labelled_example.h" #include "media/learning/common/learning_task.h" #include "media/learning/common/learning_task_controller.h" namespace media { -namespace learning { // Helper for adding a learning experiment to existing code. -class COMPONENT_EXPORT(LEARNING_COMMON) ExperimentHelper { +class MEDIA_BLINK_EXPORT LearningExperimentHelper { public: // If |controller| is null, then everything else no-ops. - ExperimentHelper(std::unique_ptr<LearningTaskController> controller); + LearningExperimentHelper( + std::unique_ptr<learning::LearningTaskController> controller); // Cancels any existing observation. - ~ExperimentHelper(); + ~LearningExperimentHelper(); // Start a new observation. Any existing observation is cancelled. Does // nothing if there's no controller. - void BeginObservation(const FeatureDictionary& dictionary); + void BeginObservation(const learning::FeatureDictionary& dictionary); // Complete any pending observation. Does nothing if none is in progress. - void CompleteObservationIfNeeded(const TargetValue& target); + void CompleteObservationIfNeeded(const learning::TargetValue& target); // Cancel any pending observation. void CancelObservationIfNeeded(); private: // May be null. - std::unique_ptr<LearningTaskController> controller_; + std::unique_ptr<learning::LearningTaskController> controller_; // May be null if no observation is in flight. Must be null if |controller_| // is null. base::UnguessableToken observation_id_; - DISALLOW_COPY_AND_ASSIGN(ExperimentHelper); + DISALLOW_COPY_AND_ASSIGN(LearningExperimentHelper); }; -} // namespace learning } // namespace media -#endif // MEDIA_LEARNING_COMMON_EXPERIMENT_HELPER_H_ +#endif // MEDIA_BLINK_LEARNING_EXPERIMENT_HELPER_H_
diff --git a/media/learning/common/experiment_helper_unittest.cc b/media/blink/learning_experiment_helper_unittest.cc similarity index 80% rename from media/learning/common/experiment_helper_unittest.cc rename to media/blink/learning_experiment_helper_unittest.cc index 16e98ae..d0432ea 100644 --- a/media/learning/common/experiment_helper_unittest.cc +++ b/media/blink/learning_experiment_helper_unittest.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "media/learning/common/experiment_helper.h" +#include "media/blink/learning_experiment_helper.h" #include <memory> @@ -10,10 +10,16 @@ #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +using media::learning::FeatureDictionary; +using media::learning::FeatureValue; +using media::learning::FeatureVector; +using media::learning::LearningTask; +using media::learning::LearningTaskController; +using media::learning::ObservationCompletion; +using media::learning::TargetValue; using testing::_; namespace media { -namespace learning { class MockLearningTaskController : public LearningTaskController { public: @@ -36,7 +42,7 @@ DISALLOW_COPY_AND_ASSIGN(MockLearningTaskController); }; -class ExperimentHelperTest : public testing::Test { +class LearningExperimentHelperTest : public testing::Test { public: void SetUp() override { const std::string feature_name_1("feature 1"); @@ -59,17 +65,17 @@ std::make_unique<MockLearningTaskController>(task_); controller_raw_ = controller.get(); - helper_ = std::make_unique<ExperimentHelper>(std::move(controller)); + helper_ = std::make_unique<LearningExperimentHelper>(std::move(controller)); } LearningTask task_; MockLearningTaskController* controller_raw_ = nullptr; - std::unique_ptr<ExperimentHelper> helper_; + std::unique_ptr<LearningExperimentHelper> helper_; FeatureDictionary dict_; }; -TEST_F(ExperimentHelperTest, BeginComplete) { +TEST_F(LearningExperimentHelperTest, BeginComplete) { EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _)); helper_->BeginObservation(dict_); TargetValue target(123); @@ -86,30 +92,30 @@ helper_->CompleteObservationIfNeeded(target); } -TEST_F(ExperimentHelperTest, BeginCancel) { +TEST_F(LearningExperimentHelperTest, BeginCancel) { EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _)); helper_->BeginObservation(dict_); EXPECT_CALL(*controller_raw_, CancelObservation(_)); helper_->CancelObservationIfNeeded(); } -TEST_F(ExperimentHelperTest, CompleteWithoutBeginDoesNothing) { +TEST_F(LearningExperimentHelperTest, CompleteWithoutBeginDoesNothing) { EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _)).Times(0); EXPECT_CALL(*controller_raw_, CompleteObservation(_, _)).Times(0); EXPECT_CALL(*controller_raw_, CancelObservation(_)).Times(0); helper_->CompleteObservationIfNeeded(TargetValue(123)); } -TEST_F(ExperimentHelperTest, CancelWithoutBeginDoesNothing) { +TEST_F(LearningExperimentHelperTest, CancelWithoutBeginDoesNothing) { EXPECT_CALL(*controller_raw_, BeginObservation(_, _, _)).Times(0); EXPECT_CALL(*controller_raw_, CompleteObservation(_, _)).Times(0); EXPECT_CALL(*controller_raw_, CancelObservation(_)).Times(0); helper_->CancelObservationIfNeeded(); } -TEST_F(ExperimentHelperTest, DoesNothingWithoutController) { +TEST_F(LearningExperimentHelperTest, DoesNothingWithoutController) { // Make sure that nothing crashes if there's no controller. - ExperimentHelper helper(nullptr); + LearningExperimentHelper helper(nullptr); // Begin / complete. helper_->BeginObservation(dict_); @@ -124,5 +130,4 @@ helper_->CancelObservationIfNeeded(); } -} // namespace learning } // namespace media
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h index edc3e495..23b3c4e6 100644 --- a/media/blink/webmediaplayer_impl.h +++ b/media/blink/webmediaplayer_impl.h
@@ -35,12 +35,12 @@ #include "media/base/simple_watch_timer.h" #include "media/base/text_track.h" #include "media/blink/buffered_data_source_host_impl.h" +#include "media/blink/learning_experiment_helper.h" #include "media/blink/media_blink_export.h" #include "media/blink/multibuffer_data_source.h" #include "media/blink/video_frame_compositor.h" #include "media/blink/webmediaplayer_params.h" #include "media/filters/pipeline_controller.h" -#include "media/learning/common/experiment_helper.h" #include "media/renderers/paint_canvas_video_renderer.h" #include "services/media_session/public/cpp/media_position.h" #include "third_party/blink/public/platform/media/webmediaplayer_delegate.h" @@ -1015,7 +1015,7 @@ RendererFactorySelector::FactoryType reported_renderer_type_; SimpleWatchTimer simple_watch_timer_; - learning::ExperimentHelper will_play_helper_; + LearningExperimentHelper will_play_helper_; base::WeakPtr<WebMediaPlayerImpl> weak_this_; base::WeakPtrFactory<WebMediaPlayerImpl> weak_factory_{this};
diff --git a/media/gpu/android/codec_image.cc b/media/gpu/android/codec_image.cc index 917207f..4362da2d 100644 --- a/media/gpu/android/codec_image.cc +++ b/media/gpu/android/codec_image.cc
@@ -150,6 +150,11 @@ void CodecImage::NotifyOverlayPromotion(bool promotion, const gfx::Rect& bounds) { + // Use-after-release. It happens if the renderer crashes before getting + // returns from viz. + if (!promotion_hint_cb_) + return; + if (!codec_buffer_wait_coordinator_ && promotion) { // When |CodecImage| is already backed by SurfaceView, and it should be used // as overlay. @@ -339,7 +344,12 @@ std::unique_ptr<base::android::ScopedHardwareBufferFenceSync> CodecImage::GetAHardwareBuffer() { - DCHECK(codec_buffer_wait_coordinator_); + // It would be nice if this didn't happen, but we can be incorrectly marked + // as free when viz is still using us for drawing. This can happen if the + // renderer crashes before receiving returns. It's hard to catch elsewhere, + // so just handle it gracefully here. + if (!codec_buffer_wait_coordinator_) + return nullptr; RenderToTextureOwnerFrontBuffer(BindingsMode::kDontRestoreIfBound); return codec_buffer_wait_coordinator_->texture_owner()->GetAHardwareBuffer();
diff --git a/media/gpu/android/codec_image_unittest.cc b/media/gpu/android/codec_image_unittest.cc index e545235f..bf0135a 100644 --- a/media/gpu/android/codec_image_unittest.cc +++ b/media/gpu/android/codec_image_unittest.cc
@@ -404,4 +404,11 @@ EXPECT_TRUE(i->was_rendered_to_front_buffer()); } +TEST_F(CodecImageTest, GetAHardwareBufferAfterRelease) { + // Make sure that we get a nullptr AHB once we've marked the image as unused. + auto i = NewImage(kTextureOwner); + i->NotifyUnused(); + EXPECT_FALSE(i->GetAHardwareBuffer()); +} + } // namespace media
diff --git a/media/gpu/android/video_frame_factory_impl.cc b/media/gpu/android/video_frame_factory_impl.cc index c35103c..c6521a7 100644 --- a/media/gpu/android/video_frame_factory_impl.cc +++ b/media/gpu/android/video_frame_factory_impl.cc
@@ -324,6 +324,26 @@ frame->metadata()->SetBoolean(VideoFrameMetadata::TEXTURE_OWNER, !!codec_buffer_wait_coordinator); + // TODO(liberato): if this is run via being dropped, then it would be nice + // to find that out rather than treating the image as unused. If the renderer + // is torn down, then this will be dropped rather than run. While |provider_| + // allows this, it doesn't have enough information to understand if the image + // is free or not. The problem only really affects the pool, since the + // direct provider destroys the SharedImage which works in either case. Any + // use of the image (e.g., if viz is still using it after the renderer has + // been torn down unexpectedly), will just not draw anything. That's fine. + // + // However, the pool will try to re-use the image, so the SharedImage remains + // valid. However, it's not a good idea to draw with it until the CodecImage + // is re-initialized with a new frame. If the renderer is torn down without + // getting returns from viz, then the pool does the wrong thing. However, + // the pool really doesn't know anything about VideoFrames, and dropping the + // callback does, in fact, signal that it's unused now (as described in the + // api). So, we probably should wrap the release cb in a default invoke, and + // if the default invoke happens, do something. Unclear what, though. Can't + // move it into the CodecImage (might hold a ref to the CodecImage in the cb), + // so it's unclear. As it is, CodecImage just handles the case where it's + // used after release. frame->SetReleaseMailboxCB(std::move(record.release_cb)); // Note that we don't want to handle the CodecImageGroup here. It needs to be
diff --git a/media/learning/common/BUILD.gn b/media/learning/common/BUILD.gn index a8116637..7a39303 100644 --- a/media/learning/common/BUILD.gn +++ b/media/learning/common/BUILD.gn
@@ -24,8 +24,6 @@ defines = [ "IS_LEARNING_COMMON_IMPL" ] sources = [ - "experiment_helper.cc", - "experiment_helper.h", "feature_dictionary.cc", "feature_dictionary.h", "feature_library.cc", @@ -52,7 +50,6 @@ source_set("unit_tests") { testonly = true sources = [ - "experiment_helper_unittest.cc", "feature_dictionary_unittest.cc", "labelled_example_unittest.cc", "media_learning_tasks_unittest.cc",
diff --git a/net/BUILD.gn b/net/BUILD.gn index 4b346ce..506d4df 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -3277,7 +3277,7 @@ ] } - executable("quic_client_for_interop_test") { + executable("quic_client_interop_test") { sources = [ "third_party/quiche/src/quic/tools/fake_proof_verifier.h", "third_party/quiche/src/quic/tools/quic_client_interop_test_bin.cc", @@ -6647,7 +6647,7 @@ "//base", "//net", ] - dict = "base/unescape_url_component_fuzzer.dict" + dict = "data/fuzzer_dictionaries/unescape_url_component_fuzzer.dict" libfuzzer_options = [ "max_len = 2048" ] } @@ -6695,6 +6695,7 @@ ":net_fuzzer_test_support", "//net", ] + dict = "data/fuzzer_dictionaries/http_chunked_decoder_fuzzer.dict" } fuzzer_test("net_http_content_disposition_fuzzer") {
diff --git a/net/cookies/cookie_deletion_info.cc b/net/cookies/cookie_deletion_info.cc index ff92c05..73a1194 100644 --- a/net/cookies/cookie_deletion_info.cc +++ b/net/cookies/cookie_deletion_info.cc
@@ -90,7 +90,8 @@ CookieDeletionInfo& CookieDeletionInfo::operator=( const CookieDeletionInfo& rhs) = default; -bool CookieDeletionInfo::Matches(const CanonicalCookie& cookie) const { +bool CookieDeletionInfo::Matches(const CanonicalCookie& cookie, + CookieAccessSemantics access_semantics) const { if (session_control != SessionControl::IGNORE_CONTROL && (cookie.IsPersistent() != (session_control == SessionControl::PERSISTENT_COOKIES))) { @@ -117,7 +118,8 @@ // cookies associated with the URL are deleted. if (url.has_value() && !cookie - .IncludeForRequestURL(url.value(), CookieOptions::MakeAllInclusive()) + .IncludeForRequestURL(url.value(), CookieOptions::MakeAllInclusive(), + access_semantics) .IsInclude()) { return false; }
diff --git a/net/cookies/cookie_deletion_info.h b/net/cookies/cookie_deletion_info.h index f5eeeb2..be0bdaa 100644 --- a/net/cookies/cookie_deletion_info.h +++ b/net/cookies/cookie_deletion_info.h
@@ -11,6 +11,7 @@ #include "base/optional.h" #include "base/time/time.h" #include "net/cookies/canonical_cookie.h" +#include "net/cookies/cookie_constants.h" namespace net { @@ -87,9 +88,17 @@ // |creation_range| AND the |cookie| name is equal to |name|, etc. then true // will be returned. If not false. // + // |access_semantics| is the access semantics mode of the cookie at the time + // of the attempted match. This is used to determine whether the cookie + // matches a particular URL based on effective SameSite mode. (But the value + // should not matter because the CookieOptions used for this check includes + // all cookies for a URL regardless of SameSite). + // // All members are used. See comments above other members for specifics // about how checking is done for that value. - bool Matches(const CanonicalCookie& cookie) const; + bool Matches(const CanonicalCookie& cookie, + CookieAccessSemantics access_semantics = + CookieAccessSemantics::UNKNOWN) const; // See comment above for TimeRange::Contains() for more info. TimeRange creation_range;
diff --git a/net/cookies/cookie_deletion_info_unittest.cc b/net/cookies/cookie_deletion_info_unittest.cc index a6e8535..39131b5 100644 --- a/net/cookies/cookie_deletion_info_unittest.cc +++ b/net/cookies/cookie_deletion_info_unittest.cc
@@ -4,7 +4,10 @@ #include "net/cookies/cookie_deletion_info.h" +#include "base/test/scoped_feature_list.h" +#include "net/base/features.h" #include "testing/gtest/include/gtest/gtest.h" +#include "url/gurl.h" namespace net { @@ -84,7 +87,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -94,7 +97,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -119,7 +122,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -129,7 +132,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -160,7 +163,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); CanonicalCookie cookie2("cookie2-name", "cookie2-value", @@ -168,7 +171,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -184,7 +187,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); CanonicalCookie cookie2("cookie2-name", "cookie2-value", @@ -192,7 +195,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -208,7 +211,7 @@ /*creation=*/base::Time::Now(), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::Now(), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, CookieSameSite::NO_RESTRICTION, CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -236,7 +239,7 @@ /*creation=*/base::Time::FromDoubleT(kTestMinEpoch + 1), /*expiration=*/base::Time::Max(), /*last_access=*/base::Time::FromDoubleT(kTestMinEpoch + 1), - /*secure=*/false, + /*secure=*/true, /*httponly=*/false, /*same_site=*/CookieSameSite::NO_RESTRICTION, /*priority=*/CookiePriority::COOKIE_PRIORITY_DEFAULT); @@ -318,4 +321,38 @@ EXPECT_FALSE(delete_info.Matches(create_cookie("outside.com"))); } +// Test that Matches() works regardless of the cookie access semantics (because +// the IncludeForRequestURL call uses CookieOptions::MakeAllInclusive). +TEST(CookieDeletionInfoTest, MatchesWithCookieAccessSemantics) { + // Cookie with unspecified SameSite. + auto cookie = + CanonicalCookie::Create(GURL("https://www.example.com"), "cookie=1", + base::Time::Now(), base::nullopt); + + { + // With SameSite features off. + base::test::ScopedFeatureList feature_list; + feature_list.InitAndDisableFeature(features::kSameSiteByDefaultCookies); + + CookieDeletionInfo delete_info; + delete_info.url = GURL("https://www.example.com/path"); + EXPECT_TRUE(delete_info.Matches(*cookie)); // defaults to UNKNOWN + EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::UNKNOWN)); + EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::LEGACY)); + EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::NONLEGACY)); + } + { + // With SameSite features on. + base::test::ScopedFeatureList feature_list; + feature_list.InitAndEnableFeature(features::kSameSiteByDefaultCookies); + + CookieDeletionInfo delete_info; + delete_info.url = GURL("https://www.example.com/path"); + EXPECT_TRUE(delete_info.Matches(*cookie)); // defaults to UNKNOWN + EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::UNKNOWN)); + EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::LEGACY)); + EXPECT_TRUE(delete_info.Matches(*cookie, CookieAccessSemantics::NONLEGACY)); + } +} + } // namespace net
diff --git a/net/cookies/cookie_monster.cc b/net/cookies/cookie_monster.cc index e317102..adbda8bd 100644 --- a/net/cookies/cookie_monster.cc +++ b/net/cookies/cookie_monster.cc
@@ -663,7 +663,7 @@ CanonicalCookie* cc = curit->second.get(); ++it; - if (delete_info.Matches(*cc)) { + if (delete_info.Matches(*cc, GetAccessSemanticsForCookie(*cc))) { InternalDeleteCookie(curit, true, /*sync_to_store*/ DELETE_COOKIE_EXPLICIT); ++num_deleted;
diff --git a/net/http/http_chunked_decoder_fuzzer.dict b/net/data/fuzzer_dictionaries/http_chunked_decoder_fuzzer.dict similarity index 100% rename from net/http/http_chunked_decoder_fuzzer.dict rename to net/data/fuzzer_dictionaries/http_chunked_decoder_fuzzer.dict
diff --git a/net/base/unescape_url_component_fuzzer.dict b/net/data/fuzzer_dictionaries/unescape_url_component_fuzzer.dict similarity index 100% rename from net/base/unescape_url_component_fuzzer.dict rename to net/data/fuzzer_dictionaries/unescape_url_component_fuzzer.dict
diff --git a/net/http/http_proxy_connect_job.cc b/net/http/http_proxy_connect_job.cc index 6ee20a1..2349095 100644 --- a/net/http/http_proxy_connect_job.cc +++ b/net/http/http_proxy_connect_job.cc
@@ -664,6 +664,7 @@ return quic_stream_request_->Request( proxy_server, quic_version, ssl_params->privacy_mode(), kH2QuicTunnelPriority, socket_tag(), params_->network_isolation_key(), + ssl_params->GetDirectConnectionParams()->disable_secure_dns(), ssl_params->ssl_config().GetCertVerifyFlags(), GURL("https://" + proxy_server.ToString()), net_log(), &quic_net_error_details_, @@ -821,7 +822,8 @@ params_->ssl_params()->GetDirectConnectionParams()->destination(), ProxyServer::Direct(), PRIVACY_MODE_DISABLED, SpdySessionKey::IsProxySession::kTrue, socket_tag(), - params_->network_isolation_key()); + params_->network_isolation_key(), + params_->ssl_params()->GetDirectConnectionParams()->disable_secure_dns()); } } // namespace net
diff --git a/net/http/http_proxy_connect_job_unittest.cc b/net/http/http_proxy_connect_job_unittest.cc index 3371b0f..a130dac 100644 --- a/net/http/http_proxy_connect_job_unittest.cc +++ b/net/http/http_proxy_connect_job_unittest.cc
@@ -861,6 +861,62 @@ } } +TEST_P(HttpProxyConnectJobTest, SpdySessionKeyDisableSecureDns) { + if (GetParam() != SPDY) + return; + + SSLSocketDataProvider ssl_data(ASYNC, OK); + InitializeSpdySsl(&ssl_data); + session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl_data); + + // SPDY proxy CONNECT request / response, with a pause during the read. + spdy::SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect( + nullptr, 0, 1, HttpProxyConnectJob::kH2QuicTunnelPriority, + HostPortPair(kEndpointHost, 443))); + MockWrite spdy_writes[] = {CreateMockWrite(req, 0)}; + spdy::SpdySerializedFrame resp( + spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); + MockRead spdy_reads[] = {CreateMockRead(resp, 1), MockRead(ASYNC, 0, 2)}; + SequencedSocketData spdy_data(spdy_reads, spdy_writes); + spdy_data.set_connect_data(MockConnect(ASYNC, OK)); + SequencedSocketData* sequenced_data = &spdy_data; + session_deps_.socket_factory->AddSocketDataProvider(sequenced_data); + + TestConnectJobDelegate test_delegate; + auto ssl_params = base::MakeRefCounted<SSLSocketParams>( + base::MakeRefCounted<TransportSocketParams>( + HostPortPair(kHttpsProxyHost, 443), true /* disable_secure_dns */, + OnHostResolutionCallback()), + nullptr, nullptr, HostPortPair(kHttpsProxyHost, 443), SSLConfig(), + PRIVACY_MODE_DISABLED, NetworkIsolationKey()); + auto http_proxy_params = base::MakeRefCounted<HttpProxySocketParams>( + nullptr /* tcp_params */, std::move(ssl_params), false /* is_quic */, + HostPortPair(kEndpointHost, 443), /*is_trusted_proxy=*/false, + /*tunnel=*/true, TRAFFIC_ANNOTATION_FOR_TESTS, NetworkIsolationKey()); + + std::unique_ptr<ConnectJob> connect_job = CreateConnectJob( + std::move(http_proxy_params), &test_delegate, DEFAULT_PRIORITY); + + EXPECT_THAT(connect_job->Connect(), test::IsError(ERR_IO_PENDING)); + EXPECT_THAT(test_delegate.WaitForResult(), test::IsOk()); + EXPECT_TRUE( + common_connect_job_params_->spdy_session_pool->FindAvailableSession( + SpdySessionKey(HostPortPair(kHttpsProxyHost, 443), + ProxyServer::Direct(), PRIVACY_MODE_DISABLED, + SpdySessionKey::IsProxySession::kTrue, SocketTag(), + NetworkIsolationKey(), true /* disable_secure_dns */), + /* enable_ip_based_pooling = */ false, + /* is_websocket = */ false, NetLogWithSource())); + EXPECT_FALSE( + common_connect_job_params_->spdy_session_pool->FindAvailableSession( + SpdySessionKey(HostPortPair(kHttpsProxyHost, 443), + ProxyServer::Direct(), PRIVACY_MODE_DISABLED, + SpdySessionKey::IsProxySession::kTrue, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */), + /* enable_ip_based_pooling = */ false, + /* is_websocket = */ false, NetLogWithSource())); +} + // Make sure that HttpProxyConnectJob does not pass on its priority to its // SPDY session's socket request on Init, or on SetPriority. TEST_P(HttpProxyConnectJobTest, SetSpdySessionSocketRequestPriority) {
diff --git a/net/http/http_request_info.cc b/net/http/http_request_info.cc index f764880..1410e3b1a 100644 --- a/net/http/http_request_info.cc +++ b/net/http/http_request_info.cc
@@ -10,6 +10,7 @@ : upload_data_stream(nullptr), load_flags(0), privacy_mode(PRIVACY_MODE_DISABLED), + disable_secure_dns(false), reporting_upload_depth(0) {} HttpRequestInfo::HttpRequestInfo(const HttpRequestInfo& other) = default;
diff --git a/net/http/http_request_info.h b/net/http/http_request_info.h index 2e0cfa4..3c57bc6 100644 --- a/net/http/http_request_info.h +++ b/net/http/http_request_info.h
@@ -48,6 +48,9 @@ // tracked by the server (e.g. without channel id). PrivacyMode privacy_mode; + // Whether secure DNS should be disabled for the request. + bool disable_secure_dns; + // Tag applied to all sockets used to service request. SocketTag socket_tag;
diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc index b09da25e..a5acdda8 100644 --- a/net/http/http_stream_factory_job.cc +++ b/net/http/http_stream_factory_job.cc
@@ -164,7 +164,8 @@ origin_url_, request_info_.privacy_mode, request_info_.socket_tag, - request_info_.network_isolation_key)), + request_info_.network_isolation_key, + request_info_.disable_secure_dns)), stream_type_(HttpStreamRequest::BIDIRECTIONAL_STREAM), init_connection_already_resumed_(false) { // QUIC can only be spoken to servers, never to proxies. @@ -373,18 +374,19 @@ const GURL& origin_url, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key) { + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns) { // In the case that we're using an HTTPS proxy for an HTTP url, look for a // HTTP/2 proxy session *to* the proxy, instead of to the origin server. if (!spdy_session_direct) { return SpdySessionKey(proxy_server.host_port_pair(), ProxyServer::Direct(), PRIVACY_MODE_DISABLED, SpdySessionKey::IsProxySession::kTrue, socket_tag, - network_isolation_key); + network_isolation_key, disable_secure_dns); } return SpdySessionKey(HostPortPair::FromURL(origin_url), proxy_server, privacy_mode, SpdySessionKey::IsProxySession::kFalse, - socket_tag, network_isolation_key); + socket_tag, network_isolation_key, disable_secure_dns); } bool HttpStreamFactory::Job::CanUseExistingSpdySession() const { @@ -756,7 +758,8 @@ int rv = quic_request_.Request( destination, quic_version_, request_info_.privacy_mode, priority_, request_info_.socket_tag, request_info_.network_isolation_key, - ssl_config->GetCertVerifyFlags(), url, net_log_, &net_error_details_, + request_info_.disable_secure_dns, ssl_config->GetCertVerifyFlags(), url, + net_log_, &net_error_details_, base::BindOnce(&Job::OnFailedOnDefaultNetwork, ptr_factory_.GetWeakPtr()), io_callback_); @@ -862,7 +865,7 @@ GetSocketGroup(), destination_, request_info_.load_flags, priority_, session_, proxy_info_, server_ssl_config_, proxy_ssl_config_, request_info_.privacy_mode, request_info_.network_isolation_key, - net_log_, num_streams_); + request_info_.disable_secure_dns, net_log_, num_streams_); } ClientSocketPool::ProxyAuthCallback proxy_auth_callback = @@ -870,6 +873,7 @@ base::Unretained(this)); if (is_websocket_) { DCHECK(request_info_.socket_tag == SocketTag()); + DCHECK(!request_info_.disable_secure_dns); SSLConfig websocket_server_ssl_config = server_ssl_config_; websocket_server_ssl_config.alpn_protos.clear(); return InitSocketHandleForWebSocketRequest( @@ -883,8 +887,8 @@ GetSocketGroup(), destination_, request_info_.load_flags, priority_, session_, proxy_info_, server_ssl_config_, proxy_ssl_config_, request_info_.privacy_mode, request_info_.network_isolation_key, - request_info_.socket_tag, net_log_, connection_.get(), io_callback_, - proxy_auth_callback); + request_info_.disable_secure_dns, request_info_.socket_tag, net_log_, + connection_.get(), io_callback_, proxy_auth_callback); } void HttpStreamFactory::Job::OnQuicHostResolution(int result) {
diff --git a/net/http/http_stream_factory_job.h b/net/http/http_stream_factory_job.h index c7753aee..04a0b7a 100644 --- a/net/http/http_stream_factory_job.h +++ b/net/http/http_stream_factory_job.h
@@ -336,7 +336,8 @@ const GURL& origin_url, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key); + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns); // Returns true if the current request can use an existing spdy session. bool CanUseExistingSpdySession() const;
diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stream_factory_job_controller.cc index bd12958..f5aef34 100644 --- a/net/http/http_stream_factory_job_controller.cc +++ b/net/http/http_stream_factory_job_controller.cc
@@ -1060,9 +1060,9 @@ // Check whether there is an existing QUIC session to use for this origin. HostPortPair mapped_origin(origin.host(), origin.port()); ignore_result(ApplyHostMappingRules(original_url, &mapped_origin)); - QuicSessionKey session_key(mapped_origin, request_info.privacy_mode, - request_info.socket_tag, - request_info.network_isolation_key); + QuicSessionKey session_key( + mapped_origin, request_info.privacy_mode, request_info.socket_tag, + request_info.network_isolation_key, request_info.disable_secure_dns); HostPortPair destination(alternative_service_info.host_port_pair()); if (session_key.host() != destination.host() &&
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc index 3f51e47b..6c4c8d0 100644 --- a/net/http/http_stream_factory_unittest.cc +++ b/net/http/http_stream_factory_unittest.cc
@@ -363,6 +363,7 @@ void PreconnectHelperForURL(int num_streams, const GURL& url, NetworkIsolationKey network_isolation_key, + bool disable_secure_dns, HttpNetworkSession* session) { HttpNetworkSessionPeer peer(session); MockHttpStreamFactoryForPreconnect* mock_factory = @@ -374,6 +375,7 @@ request.url = url; request.load_flags = 0; request.network_isolation_key = network_isolation_key; + request.disable_secure_dns = disable_secure_dns; request.traffic_annotation = MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); @@ -384,7 +386,8 @@ void PreconnectHelper(const TestCase& test, HttpNetworkSession* session) { GURL url = test.ssl ? GURL("https://www.google.com") : GURL("http://www.google.com"); - PreconnectHelperForURL(test.num_streams, url, NetworkIsolationKey(), session); + PreconnectHelperForURL(test.num_streams, url, NetworkIsolationKey(), + false /* disable_secure_dns */, session); } ClientSocketPool::GroupId GetGroupId(const TestCase& test) { @@ -616,7 +619,8 @@ peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); PreconnectHelperForURL(1, GURL("http://www.google.com:7"), - NetworkIsolationKey(), session.get()); + NetworkIsolationKey(), false /* disable_secure_dns */, + session.get()); EXPECT_EQ(-1, transport_conn_pool->last_num_streams()); } @@ -648,17 +652,52 @@ const auto kOriginBar = url::Origin::Create(GURL("http://bar.test")); const NetworkIsolationKey kKey1(kOriginFoo, kOriginFoo); const NetworkIsolationKey kKey2(kOriginBar, kOriginBar); - PreconnectHelperForURL(1, kURL, kKey1, session.get()); + PreconnectHelperForURL(1, kURL, kKey1, false /* disable_secure_dns */, + session.get()); EXPECT_EQ(1, transport_conn_pool->last_num_streams()); EXPECT_EQ(kKey1, transport_conn_pool->last_group_id().network_isolation_key()); - PreconnectHelperForURL(2, kURL, kKey2, session.get()); + PreconnectHelperForURL(2, kURL, kKey2, false /* disable_secure_dns */, + session.get()); EXPECT_EQ(2, transport_conn_pool->last_num_streams()); EXPECT_EQ(kKey2, transport_conn_pool->last_group_id().network_isolation_key()); } +// Verify that preconnects use the specified disable_secure_dns field. +TEST_F(HttpStreamFactoryTest, PreconnectDisableSecureDns) { + SpdySessionDependencies session_deps(ProxyResolutionService::CreateDirect()); + std::unique_ptr<HttpNetworkSession> session( + SpdySessionDependencies::SpdyCreateSession(&session_deps)); + HttpNetworkSessionPeer peer(session.get()); + CommonConnectJobParams common_connect_job_params = + session->CreateCommonConnectJobParams(); + std::unique_ptr<CapturePreconnectsTransportSocketPool> + owned_transport_conn_pool = + std::make_unique<CapturePreconnectsTransportSocketPool>( + &common_connect_job_params); + CapturePreconnectsTransportSocketPool* transport_conn_pool = + owned_transport_conn_pool.get(); + auto mock_pool_manager = std::make_unique<MockClientSocketPoolManager>(); + mock_pool_manager->SetSocketPool(ProxyServer::Direct(), + std::move(owned_transport_conn_pool)); + peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); + + const GURL kURL("http://foo.test/"); + const auto kOriginFoo = url::Origin::Create(GURL("http://foo.test")); + const auto kOriginBar = url::Origin::Create(GURL("http://bar.test")); + PreconnectHelperForURL(1, kURL, NetworkIsolationKey(), + false /* disable_secure_dns */, session.get()); + EXPECT_EQ(1, transport_conn_pool->last_num_streams()); + EXPECT_FALSE(transport_conn_pool->last_group_id().disable_secure_dns()); + + PreconnectHelperForURL(2, kURL, NetworkIsolationKey(), + true /* disable_secure_dns */, session.get()); + EXPECT_EQ(2, transport_conn_pool->last_num_streams()); + EXPECT_TRUE(transport_conn_pool->last_group_id().disable_secure_dns()); +} + TEST_F(HttpStreamFactoryTest, JobNotifiesProxy) { const char* kProxyString = "PROXY bad:99; PROXY maybe:80; DIRECT"; SpdySessionDependencies session_deps( @@ -1211,7 +1250,7 @@ base::WrapUnique(http_proxy_pool)); peer.SetClientSocketPoolManager(std::move(mock_pool_manager)); PreconnectHelperForURL(num_streams, url, NetworkIsolationKey(), - session.get()); + false /* disable_secure_dns */, session.get()); EXPECT_EQ(num_streams, http_proxy_pool->last_num_streams()); } } @@ -1326,6 +1365,81 @@ EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2); } +TEST_F(HttpStreamFactoryTest, DisableSecureDnsUsesDifferentSocketPoolGroup) { + SpdySessionDependencies session_deps(ProxyResolutionService::CreateDirect()); + + StaticSocketDataProvider socket_data_1; + socket_data_1.set_connect_data(MockConnect(ASYNC, OK)); + session_deps.socket_factory->AddSocketDataProvider(&socket_data_1); + StaticSocketDataProvider socket_data_2; + socket_data_2.set_connect_data(MockConnect(ASYNC, OK)); + session_deps.socket_factory->AddSocketDataProvider(&socket_data_2); + StaticSocketDataProvider socket_data_3; + socket_data_3.set_connect_data(MockConnect(ASYNC, OK)); + session_deps.socket_factory->AddSocketDataProvider(&socket_data_3); + + SSLSocketDataProvider ssl_1(ASYNC, OK); + session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_1); + SSLSocketDataProvider ssl_2(ASYNC, OK); + session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_2); + SSLSocketDataProvider ssl_3(ASYNC, OK); + session_deps.socket_factory->AddSSLSocketDataProvider(&ssl_3); + + std::unique_ptr<HttpNetworkSession> session( + SpdySessionDependencies::SpdyCreateSession(&session_deps)); + ClientSocketPool* ssl_pool = session->GetSocketPool( + HttpNetworkSession::NORMAL_SOCKET_POOL, ProxyServer::Direct()); + + EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 0); + + HttpRequestInfo request_info; + request_info.method = "GET"; + request_info.url = GURL("https://www.google.com"); + request_info.load_flags = 0; + request_info.privacy_mode = PRIVACY_MODE_DISABLED; + request_info.traffic_annotation = + MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS); + request_info.disable_secure_dns = false; + + SSLConfig ssl_config; + StreamRequestWaiter waiter; + + std::unique_ptr<HttpStreamRequest> request1( + session->http_stream_factory()->RequestStream( + request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, + /* enable_ip_based_pooling = */ true, + /* enable_alternative_services = */ true, NetLogWithSource())); + waiter.WaitForStream(); + + EXPECT_FALSE( + session_deps.host_resolver->last_secure_dns_mode_override().has_value()); + EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1); + + std::unique_ptr<HttpStreamRequest> request2( + session->http_stream_factory()->RequestStream( + request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, + /* enable_ip_based_pooling = */ true, + /* enable_alternative_services = */ true, NetLogWithSource())); + waiter.WaitForStream(); + + EXPECT_FALSE( + session_deps.host_resolver->last_secure_dns_mode_override().has_value()); + EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 1); + + request_info.disable_secure_dns = true; + std::unique_ptr<HttpStreamRequest> request3( + session->http_stream_factory()->RequestStream( + request_info, DEFAULT_PRIORITY, ssl_config, ssl_config, &waiter, + /* enable_ip_based_pooling = */ true, + /* enable_alternative_services = */ true, NetLogWithSource())); + waiter.WaitForStream(); + + EXPECT_EQ( + net::DnsConfig::SecureDnsMode::OFF, + session_deps.host_resolver->last_secure_dns_mode_override().value()); + EXPECT_EQ(GetSocketPoolGroupCount(ssl_pool), 2); +} + TEST_F(HttpStreamFactoryTest, GetLoadState) { SpdySessionDependencies session_deps(ProxyResolutionService::CreateDirect());
diff --git a/net/log/net_log_event_type_list.h b/net/log/net_log_event_type_list.h index 5a2a8b9..f98139e 100644 --- a/net/log/net_log_event_type_list.h +++ b/net/log/net_log_event_type_list.h
@@ -2007,6 +2007,30 @@ // } EVENT_TYPE(QUIC_SESSION_CONNECTIVITY_PROBING_FINISHED) +// Session sent a PATH_CHALLENGE frame. +// { +// "data": <The challenge data in base64 string> +// } +EVENT_TYPE(QUIC_SESSION_PATH_CHALLENGE_FRAME_SENT) + +// Session received a PATH_CHALLENGE frame. +// { +// "data": <The challenge data in base64 string> +// } +EVENT_TYPE(QUIC_SESSION_PATH_CHALLENGE_FRAME_RECEIVED) + +// Session sent a PATH_RESPONSE frame. +// { +// "data": <The response data in base64 string> +// } +EVENT_TYPE(QUIC_SESSION_PATH_RESPONSE_FRAME_SENT) + +// Session received a PATH_RESPONSE frame. +// { +// "data": <The response data in base64 string> +// } +EVENT_TYPE(QUIC_SESSION_PATH_RESPONSE_FRAME_RECEIVED) + // Session sent a CRYPTO frame. // { // "encryption_level": <The quic::EncryptionLevel of the frame>,
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc index 4a8dec6..4b1f8fa 100644 --- a/net/quic/quic_chromium_client_session.cc +++ b/net/quic/quic_chromium_client_session.cc
@@ -1304,13 +1304,15 @@ const std::string& hostname, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key) const { + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns) const { DCHECK(connection()->connected()); if (privacy_mode != session_key_.privacy_mode() || socket_tag != session_key_.socket_tag() || (network_isolation_key != session_key_.network_isolation_key() && base::FeatureList::IsEnabled( - features::kPartitionConnectionsByNetworkIsolationKey))) { + features::kPartitionConnectionsByNetworkIsolationKey)) || + disable_secure_dns != session_key_.disable_secure_dns()) { // Privacy mode and socket tag must always match. return false; } @@ -3085,9 +3087,9 @@ } bool QuicChromiumClientSession::IsAuthorized(const std::string& hostname) { - bool result = - CanPool(hostname, session_key_.privacy_mode(), session_key_.socket_tag(), - session_key_.network_isolation_key()); + bool result = CanPool( + hostname, session_key_.privacy_mode(), session_key_.socket_tag(), + session_key_.network_isolation_key(), session_key_.disable_secure_dns()); if (result) streams_pushed_count_++; return result;
diff --git a/net/quic/quic_chromium_client_session.h b/net/quic/quic_chromium_client_session.h index 973f811..b25c8cf 100644 --- a/net/quic/quic_chromium_client_session.h +++ b/net/quic/quic_chromium_client_session.h
@@ -572,7 +572,8 @@ bool CanPool(const std::string& hostname, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key) const; + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns) const; const quic::QuicServerId& server_id() const { return session_key_.server_id();
diff --git a/net/quic/quic_chromium_client_session_peer.cc b/net/quic/quic_chromium_client_session_peer.cc index 9ba6a39..dd16938 100644 --- a/net/quic/quic_chromium_client_session_peer.cc +++ b/net/quic/quic_chromium_client_session_peer.cc
@@ -16,7 +16,9 @@ quic::QuicServerId server_id(hostname, session->session_key_.server_id().port(), session->session_key_.privacy_mode()); - session->session_key_ = QuicSessionKey(server_id, SocketTag()); + session->session_key_ = + QuicSessionKey(server_id, SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */); } // static
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc index 3a576e4..a30491b 100644 --- a/net/quic/quic_chromium_client_session_test.cc +++ b/net/quic/quic_chromium_client_session_test.cc
@@ -1396,23 +1396,33 @@ session_->OnProofVerifyDetailsAvailable(details); EXPECT_TRUE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_ENABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); + EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, + SocketTag(), NetworkIsolationKey(), + true /* disable_secure_dns */)); #if defined(OS_ANDROID) SocketTag tag1(SocketTag::UNSET_UID, 0x12345678); SocketTag tag2(getuid(), 0x87654321); EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag1, - NetworkIsolationKey())); + NetworkIsolationKey(), + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag2, - NetworkIsolationKey())); + NetworkIsolationKey(), + false /* disable_secure_dns */)); #endif EXPECT_TRUE(session_->CanPool("mail.example.org", PRIVACY_MODE_DISABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); EXPECT_TRUE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("mail.google.com", PRIVACY_MODE_DISABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); const auto kOriginFoo = url::Origin::Create(GURL("http://foo.test/")); @@ -1423,15 +1433,17 @@ features::kPartitionConnectionsByNetworkIsolationKey); EXPECT_TRUE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED, SocketTag(), - NetworkIsolationKey(kOriginFoo, kOriginFoo))); + NetworkIsolationKey(kOriginFoo, kOriginFoo), + false /* disable_secure_dns */)); } { base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( features::kPartitionConnectionsByNetworkIsolationKey); - EXPECT_FALSE(session_->CanPool( - "mail.example.com", PRIVACY_MODE_DISABLED, SocketTag(), - NetworkIsolationKey(kOriginFoo, kOriginFoo))); + EXPECT_FALSE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED, + SocketTag(), + NetworkIsolationKey(kOriginFoo, kOriginFoo), + false /* disable_secure_dns */)); } } @@ -1446,9 +1458,9 @@ const NetworkIsolationKey kNetworkIsolationKey1(kOriginFoo, kOriginFoo); const NetworkIsolationKey kNetworkIsolationKey2(kOriginBar, kOriginBar); - session_key_ = - QuicSessionKey(kServerHostname, kServerPort, PRIVACY_MODE_DISABLED, - SocketTag(), kNetworkIsolationKey1); + session_key_ = QuicSessionKey( + kServerHostname, kServerPort, PRIVACY_MODE_DISABLED, SocketTag(), + kNetworkIsolationKey1, false /* disable_secure_dns */); MockQuicData quic_data(version_); if (VersionUsesHttp3(version_.transport_version)) @@ -1471,28 +1483,37 @@ session_->OnProofVerifyDetailsAvailable(details); EXPECT_TRUE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, - SocketTag(), kNetworkIsolationKey1)); + SocketTag(), kNetworkIsolationKey1, + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_ENABLED, - SocketTag(), kNetworkIsolationKey1)); + SocketTag(), kNetworkIsolationKey1, + false /* disable_secure_dns */)); #if defined(OS_ANDROID) SocketTag tag1(SocketTag::UNSET_UID, 0x12345678); SocketTag tag2(getuid(), 0x87654321); EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag1, - kNetworkIsolationKey1)); + kNetworkIsolationKey1, + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("www.example.org", PRIVACY_MODE_DISABLED, tag2, - kNetworkIsolationKey1)); + kNetworkIsolationKey1, + false /* disable_secure_dns */)); #endif EXPECT_TRUE(session_->CanPool("mail.example.org", PRIVACY_MODE_DISABLED, - SocketTag(), kNetworkIsolationKey1)); + SocketTag(), kNetworkIsolationKey1, + false /* disable_secure_dns */)); EXPECT_TRUE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED, - SocketTag(), kNetworkIsolationKey1)); + SocketTag(), kNetworkIsolationKey1, + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("mail.google.com", PRIVACY_MODE_DISABLED, - SocketTag(), kNetworkIsolationKey1)); + SocketTag(), kNetworkIsolationKey1, + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED, - SocketTag(), kNetworkIsolationKey2)); + SocketTag(), kNetworkIsolationKey2, + false /* disable_secure_dns */)); EXPECT_FALSE(session_->CanPool("mail.example.com", PRIVACY_MODE_DISABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); } TEST_P(QuicChromiumClientSessionTest, ConnectionNotPooledWithDifferentPin) { @@ -1533,7 +1554,8 @@ QuicChromiumClientSessionPeer::SetHostname(session_.get(), kNoPinsHost); EXPECT_FALSE(session_->CanPool(kPreloadedPKPHost, PRIVACY_MODE_DISABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); } TEST_P(QuicChromiumClientSessionTest, ConnectionPooledWithMatchingPin) { @@ -1565,7 +1587,8 @@ QuicChromiumClientSessionPeer::SetHostname(session_.get(), "www.example.org"); EXPECT_TRUE(session_->CanPool("mail.example.org", PRIVACY_MODE_DISABLED, - SocketTag(), NetworkIsolationKey())); + SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */)); } TEST_P(QuicChromiumClientSessionTest, MigrateToSocket) {
diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc index 6eb8e53..1614a5aa 100644 --- a/net/quic/quic_connection_logger.cc +++ b/net/quic/quic_connection_logger.cc
@@ -213,6 +213,14 @@ return dict; } +base::Value NetLogQuicPathData(const quic::QuicPathFrameBuffer& buffer) { + base::Value dict(base::Value::Type::DICTIONARY); + dict.SetKey("data", + NetLogBinaryValue(reinterpret_cast<const char*>(buffer.data()), + buffer.size())); + return dict; +} + base::Value NetLogQuicCryptoHandshakeMessageParams( const quic::CryptoHandshakeMessage* message) { base::Value dict(base::Value::Type::DICTIONARY); @@ -508,8 +516,16 @@ }); break; case quic::PATH_RESPONSE_FRAME: + net_log_.AddEvent( + NetLogEventType::QUIC_SESSION_PATH_RESPONSE_FRAME_SENT, [&] { + return NetLogQuicPathData(frame.path_response_frame->data_buffer); + }); break; case quic::PATH_CHALLENGE_FRAME: + net_log_.AddEvent( + NetLogEventType::QUIC_SESSION_PATH_CHALLENGE_FRAME_SENT, [&] { + return NetLogQuicPathData(frame.path_challenge_frame->data_buffer); + }); break; case quic::STOP_SENDING_FRAME: net_log_.AddEvent( @@ -684,6 +700,22 @@ [&] { return NetLogQuicStreamFrameParams(frame); }); } +void QuicConnectionLogger::OnPathChallengeFrame( + const quic::QuicPathChallengeFrame& frame) { + if (!net_log_.IsCapturing()) + return; + net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PATH_CHALLENGE_FRAME_RECEIVED, + [&] { return NetLogQuicPathData(frame.data_buffer); }); +} + +void QuicConnectionLogger::OnPathResponseFrame( + const quic::QuicPathResponseFrame& frame) { + if (!net_log_.IsCapturing()) + return; + net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PATH_RESPONSE_FRAME_RECEIVED, + [&] { return NetLogQuicPathData(frame.data_buffer); }); +} + void QuicConnectionLogger::OnCryptoFrame(const quic::QuicCryptoFrame& frame) { if (!net_log_.IsCapturing()) return;
diff --git a/net/quic/quic_connection_logger.h b/net/quic/quic_connection_logger.h index 02b3378..550266a 100644 --- a/net/quic/quic_connection_logger.h +++ b/net/quic/quic_connection_logger.h
@@ -69,6 +69,8 @@ void OnDuplicatePacket(quic::QuicPacketNumber packet_number) override; void OnProtocolVersionMismatch(quic::ParsedQuicVersion version) override; void OnPacketHeader(const quic::QuicPacketHeader& header) override; + void OnPathChallengeFrame(const quic::QuicPathChallengeFrame& frame) override; + void OnPathResponseFrame(const quic::QuicPathResponseFrame& frame) override; void OnCryptoFrame(const quic::QuicCryptoFrame& frame) override; void OnStopSendingFrame(const quic::QuicStopSendingFrame& frame) override; void OnStreamsBlockedFrame(
diff --git a/net/quic/quic_session_key.cc b/net/quic/quic_session_key.cc index d7907d6b..b2393c5 100644 --- a/net/quic/quic_session_key.cc +++ b/net/quic/quic_session_key.cc
@@ -9,45 +9,57 @@ namespace net { +QuicSessionKey::QuicSessionKey() = default; + QuicSessionKey::QuicSessionKey(const HostPortPair& host_port_pair, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key) + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns) : QuicSessionKey(host_port_pair.host(), host_port_pair.port(), privacy_mode, socket_tag, - network_isolation_key) {} + network_isolation_key, + disable_secure_dns) {} QuicSessionKey::QuicSessionKey(const std::string& host, uint16_t port, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key) + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns) : QuicSessionKey( quic::QuicServerId(host, port, privacy_mode == PRIVACY_MODE_ENABLED), socket_tag, - network_isolation_key) {} + network_isolation_key, + disable_secure_dns) {} QuicSessionKey::QuicSessionKey(const quic::QuicServerId& server_id, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key) + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns) : server_id_(server_id), socket_tag_(socket_tag), network_isolation_key_( base::FeatureList::IsEnabled( features::kPartitionConnectionsByNetworkIsolationKey) ? network_isolation_key - : NetworkIsolationKey()) {} + : NetworkIsolationKey()), + disable_secure_dns_(disable_secure_dns) {} + +QuicSessionKey::QuicSessionKey(const QuicSessionKey& other) = default; bool QuicSessionKey::operator<(const QuicSessionKey& other) const { - return std::tie(server_id_, socket_tag_, network_isolation_key_) < + return std::tie(server_id_, socket_tag_, network_isolation_key_, + disable_secure_dns_) < std::tie(other.server_id_, other.socket_tag_, - other.network_isolation_key_); + other.network_isolation_key_, other.disable_secure_dns_); } bool QuicSessionKey::operator==(const QuicSessionKey& other) const { return server_id_ == other.server_id_ && socket_tag_ == other.socket_tag_ && - network_isolation_key_ == other.network_isolation_key_; + network_isolation_key_ == other.network_isolation_key_ && + disable_secure_dns_ == other.disable_secure_dns_; } size_t QuicSessionKey::EstimateMemoryUsage() const {
diff --git a/net/quic/quic_session_key.h b/net/quic/quic_session_key.h index 5065564..a8987ec 100644 --- a/net/quic/quic_session_key.h +++ b/net/quic/quic_session_key.h
@@ -19,22 +19,26 @@ public: // TODO(mmenke): Remove default NetworkIsolationKey() values, which are only // used in tests. - QuicSessionKey() = default; + QuicSessionKey(); QuicSessionKey( const HostPortPair& host_port_pair, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey()); + const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(), + bool disable_secure_dns = false); QuicSessionKey( const std::string& host, uint16_t port, PrivacyMode privacy_mode, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey()); + const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(), + bool disable_secure_dns = false); QuicSessionKey( const quic::QuicServerId& server_id, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey()); + const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(), + bool disable_secure_dns = false); + QuicSessionKey(const QuicSessionKey& other); ~QuicSessionKey() = default; // Needed to be an element of std::set. @@ -56,6 +60,8 @@ return network_isolation_key_; } + bool disable_secure_dns() const { return disable_secure_dns_; } + size_t EstimateMemoryUsage() const; private: @@ -63,6 +69,7 @@ SocketTag socket_tag_; // Used to separate requests made in different contexts. NetworkIsolationKey network_isolation_key_; + bool disable_secure_dns_; }; } // namespace net
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc index 230e153..db6fe07 100644 --- a/net/quic/quic_stream_factory.cc +++ b/net/quic/quic_stream_factory.cc
@@ -808,6 +808,8 @@ parameters.cache_usage = HostResolver::ResolveHostParameters::CacheUsage::STALE_ALLOWED; } + if (key_.session_key().disable_secure_dns()) + parameters.secure_dns_mode_override = DnsConfig::SecureDnsMode::OFF; resolve_host_request_ = host_resolver_->CreateRequest(key_.destination(), net_log_, parameters); // Unretained is safe because |this| owns the request, ensuring cancellation @@ -1065,6 +1067,7 @@ RequestPriority priority, const SocketTag& socket_tag, const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns, int cert_verify_flags, const GURL& url, const NetLogWithSource& net_log, @@ -1080,8 +1083,9 @@ net_error_details_ = net_error_details; failed_on_default_network_callback_ = std::move(failed_on_default_network_callback); - session_key_ = QuicSessionKey(HostPortPair::FromURL(url), privacy_mode, - socket_tag, network_isolation_key); + session_key_ = + QuicSessionKey(HostPortPair::FromURL(url), privacy_mode, socket_tag, + network_isolation_key, disable_secure_dns); int rv = factory_->Create(session_key_, destination, quic_version, priority, cert_verify_flags, url, net_log, this); @@ -1275,7 +1279,8 @@ if (destination.Equals(all_sessions_[session].destination()) && session->CanPool(session_key.host(), session_key.privacy_mode(), session_key.socket_tag(), - session_key.network_isolation_key())) { + session_key.network_isolation_key(), + session_key.disable_secure_dns())) { return true; } } @@ -1352,7 +1357,8 @@ ? PRIVACY_MODE_ENABLED : PRIVACY_MODE_DISABLED, session_key.socket_tag(), - session_key.network_isolation_key())) { + session_key.network_isolation_key(), + session_key.disable_secure_dns())) { request->SetSession(session->CreateHandle(destination)); return OK; } @@ -1787,7 +1793,8 @@ for (QuicChromiumClientSession* session : sessions) { if (!session->CanPool(server_id.host(), key.session_key().privacy_mode(), key.session_key().socket_tag(), - key.session_key().network_isolation_key())) { + key.session_key().network_isolation_key(), + key.session_key().disable_secure_dns())) { continue; } active_sessions_[key.session_key()] = session;
diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h index 8491de9..52443db 100644 --- a/net/quic/quic_stream_factory.h +++ b/net/quic/quic_stream_factory.h
@@ -255,6 +255,7 @@ RequestPriority priority, const SocketTag& socket_tag, const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns, int cert_verify_flags, const GURL& url, const NetLogWithSource& net_log,
diff --git a/net/quic/quic_stream_factory_fuzzer.cc b/net/quic/quic_stream_factory_fuzzer.cc index 157059f..36829e9 100644 --- a/net/quic/quic_stream_factory_fuzzer.cc +++ b/net/quic/quic_stream_factory_fuzzer.cc
@@ -152,8 +152,8 @@ 0, versions.size() - 1)]; request.Request( env->host_port_pair, version, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), kCertVerifyFlags, GURL(kUrl), - env->net_log, &net_error_details, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + kCertVerifyFlags, GURL(kUrl), env->net_log, &net_error_details, /*failed_on_default_network_callback=*/CompletionOnceCallback(), callback.callback());
diff --git a/net/quic/quic_stream_factory_peer.cc b/net/quic/quic_stream_factory_peer.cc index 0d0eb90..fc68a87 100644 --- a/net/quic/quic_stream_factory_peer.cc +++ b/net/quic/quic_stream_factory_peer.cc
@@ -39,12 +39,15 @@ const quic::QuicServerId& server_id, const NetworkIsolationKey& network_isolation_key) { return factory->HasActiveSession( - QuicSessionKey(server_id, SocketTag(), network_isolation_key)); + QuicSessionKey(server_id, SocketTag(), network_isolation_key, + false /* disable_secure_dns */)); } bool QuicStreamFactoryPeer::HasActiveJob(QuicStreamFactory* factory, const quic::QuicServerId& server_id) { - return factory->HasActiveJob(QuicSessionKey(server_id, SocketTag())); + return factory->HasActiveJob(QuicSessionKey(server_id, SocketTag(), + NetworkIsolationKey(), + false /* disable_secure_dns */)); } bool QuicStreamFactoryPeer::HasActiveCertVerifierJob( @@ -58,7 +61,8 @@ QuicStreamFactory* factory, const quic::QuicServerId& server_id, const HostPortPair& destination) { - QuicSessionKey session_key(server_id, SocketTag()); + QuicSessionKey session_key(server_id, SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */); QuicStreamFactory::QuicSessionAliasKey key(destination, session_key); DCHECK(factory->HasActiveJob(session_key)); DCHECK_EQ(factory->all_sessions_.size(), 1u); @@ -70,7 +74,8 @@ QuicStreamFactory* factory, const quic::QuicServerId& server_id, const NetworkIsolationKey& network_isolation_key) { - QuicSessionKey session_key(server_id, SocketTag(), network_isolation_key); + QuicSessionKey session_key(server_id, SocketTag(), network_isolation_key, + false /* disable_secure_dns */); DCHECK(factory->HasActiveSession(session_key)); return factory->active_sessions_[session_key]; } @@ -79,7 +84,9 @@ QuicStreamFactory* factory, const HostPortPair& destination, const quic::QuicServerId& server_id) { - QuicSessionKey session_key = QuicSessionKey(server_id, SocketTag()); + QuicSessionKey session_key = + QuicSessionKey(server_id, SocketTag(), NetworkIsolationKey(), + false /* disable_secure_dns */); QuicStreamFactory::QuicSessionAliasKey alias_key = QuicStreamFactory::QuicSessionAliasKey(destination, session_key); for (auto it = factory->all_sessions_.begin();
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc index 308a4a2..a07ac13 100644 --- a/net/quic/quic_stream_factory_test.cc +++ b/net/quic/quic_stream_factory_test.cc
@@ -361,12 +361,13 @@ QuicStreamRequest request(factory_.get()); GURL url("https://" + destination.host() + "/"); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - destination, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -514,12 +515,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); // Run QuicChromiumClientSession::WriteToNewSocket() @@ -732,7 +734,7 @@ request.Request( HostPortPair(quic_server_id1.host(), quic_server_id1.port()), version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - network_isolation_key1, + network_isolation_key1, false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); @@ -774,7 +776,7 @@ request2.Request( HostPortPair(quic_server_id2.host(), quic_server_id2.port()), version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - network_isolation_key2, + network_isolation_key2, false /* disable_secure_dns */, /*cert_verify_flags=*/0, vary_network_isolation_key ? url_ : GURL("https://mail.example.org/"), @@ -937,12 +939,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -951,12 +954,13 @@ EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->last_request_priority()); QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Will reset stream 3. stream = CreateStream(&request2); @@ -965,12 +969,13 @@ // TODO(rtenneti): We should probably have a tests that HTTP and HTTPS result // in streams on different sessions. QuicStreamRequest request3(factory_.get()); - EXPECT_EQ(OK, - request3.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request3.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); stream = CreateStream(&request3); // Will reset stream 5. stream.reset(); // Will reset stream 7. @@ -998,12 +1003,13 @@ "192.168.0.1", ""); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -1023,12 +1029,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1052,12 +1059,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); auto request = std::make_unique<QuicStreamRequest>(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request->Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request->Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); request.reset(); EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_)); // Tearing down a QuicStreamFactory with a pending Job should not cause any @@ -1084,12 +1092,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_FALSE(http_server_properties_->HasLastLocalAddressWhenQuicWorked()); @@ -1128,12 +1137,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_THAT(request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback()), - IsOk()); + EXPECT_THAT( + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback()), + IsOk()); EXPECT_FALSE(http_server_properties_->HasLastLocalAddressWhenQuicWorked()); @@ -1167,12 +1177,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1233,12 +1244,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), network_isolation_key, - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), network_isolation_key, false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1275,12 +1287,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1309,12 +1322,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1338,12 +1352,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1371,12 +1386,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1453,6 +1469,7 @@ request.Request( host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), kNetworkIsolationKeys[i], + false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); @@ -1505,6 +1522,7 @@ request.Request( host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), kNetworkIsolationKeys[i], + false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); @@ -1544,12 +1562,13 @@ host_resolver_->rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -1558,7 +1577,7 @@ EXPECT_EQ(OK, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); @@ -1608,7 +1627,7 @@ EXPECT_EQ(ERR_IO_PENDING, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback.callback())); EXPECT_EQ(OK, callback.WaitForResult()); @@ -1645,12 +1664,13 @@ host_resolver_->rules()->AddIPLiteralRule(server2.host(), "192.168.0.1", ""); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -1659,7 +1679,7 @@ EXPECT_EQ(OK, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); @@ -1674,7 +1694,7 @@ EXPECT_EQ(OK, request3.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback3.callback())); std::unique_ptr<HttpStream> stream3 = CreateStream(&request3); @@ -1711,7 +1731,7 @@ EXPECT_EQ(OK, request.Request( server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1722,7 +1742,7 @@ EXPECT_EQ(OK, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); @@ -1762,7 +1782,7 @@ EXPECT_EQ(OK, request.Request( server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1773,7 +1793,7 @@ EXPECT_EQ(OK, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); @@ -1826,7 +1846,7 @@ EXPECT_EQ(OK, request.Request( server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1837,7 +1857,7 @@ EXPECT_EQ(OK, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); @@ -1870,12 +1890,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -1892,12 +1913,13 @@ // Create a new request for the same destination and verify that a // new session is created. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -1959,7 +1981,7 @@ QuicStreamRequest request(factory_.get()); int rv = request.Request( host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback()); if (i == 0) { @@ -1977,12 +1999,13 @@ } QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, CompletionOnceCallback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, CompletionOnceCallback())); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream); EXPECT_EQ(ERR_IO_PENDING, @@ -2016,12 +2039,13 @@ host_resolver_->rules()->AddSimulatedFailure(kDefaultServerHostName); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_NAME_NOT_RESOLVED)); @@ -2037,12 +2061,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_ADDRESS_IN_USE)); @@ -2059,23 +2084,25 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); { QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); } base::RunLoop().RunUntilIdle(); QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream = CreateStream(&request2); EXPECT_TRUE(stream.get()); @@ -2115,12 +2142,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -2140,12 +2168,13 @@ // a new session. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); stream = CreateStream(&request2); @@ -2176,12 +2205,13 @@ // Create request, should fail after the write of the CHLO fails. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED, callback_.WaitForResult()); EXPECT_FALSE(HasActiveSession(host_port_pair_)); EXPECT_FALSE(HasActiveJob(host_port_pair_, privacy_mode_)); @@ -2199,12 +2229,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_FALSE(HasActiveSession(host_port_pair_)); EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_)); // Run the message loop to complete host resolution. @@ -2244,12 +2275,13 @@ // Create request, should fail immediately. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_QUIC_HANDSHAKE_FAILED, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check no active session, or active jobs left for this server. EXPECT_FALSE(HasActiveSession(host_port_pair_)); EXPECT_FALSE(HasActiveJob(host_port_pair_, privacy_mode_)); @@ -2267,12 +2299,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_FALSE(HasActiveSession(host_port_pair_)); EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_)); @@ -2324,12 +2357,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -2358,12 +2392,13 @@ // Now attempting to request a stream to the same origin should create // a new session. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); stream = CreateStream(&request2); @@ -2419,12 +2454,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -2465,12 +2501,13 @@ // Second request should be sent on a new connection. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -2509,12 +2546,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -2533,12 +2571,13 @@ // Attempting a new request to the same origin uses the same connection. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); stream = CreateStream(&request2); stream.reset(); @@ -2613,12 +2652,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -2796,12 +2836,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -2941,12 +2982,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3062,12 +3104,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3132,12 +3175,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3232,12 +3276,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3301,12 +3346,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3395,12 +3441,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3468,12 +3515,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3541,12 +3589,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3663,12 +3712,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -3829,12 +3879,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -4004,12 +4055,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -4210,12 +4262,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -4334,12 +4387,13 @@ // Creat request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cerf_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cerf_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -4375,12 +4429,13 @@ // Second request should be sent on a new connection. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -4455,12 +4510,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -4593,12 +4649,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -4754,12 +4811,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -4901,7 +4959,7 @@ EXPECT_EQ(OK, request1.Request( server1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); @@ -4912,7 +4970,7 @@ EXPECT_EQ(OK, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); @@ -5027,12 +5085,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -5145,12 +5204,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -5216,12 +5276,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -5324,12 +5385,13 @@ // Create request #1 and QuicHttpStream. QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -5346,12 +5408,13 @@ // Request #2 returns synchronously because it pools to existing session. TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -5464,12 +5527,13 @@ // Create request QuicHttpStream. QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -5588,12 +5652,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); base::RunLoop().RunUntilIdle(); @@ -5649,12 +5714,13 @@ // Create request. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); base::RunLoop().RunUntilIdle(); @@ -5774,12 +5840,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); base::RunLoop().RunUntilIdle(); @@ -5891,12 +5958,13 @@ // Create request, should fail after the write of the CHLO fails. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(ERR_QUIC_HANDSHAKE_FAILED, callback_.WaitForResult()); EXPECT_FALSE(HasActiveSession(host_port_pair_)); EXPECT_FALSE(HasActiveJob(host_port_pair_, privacy_mode_)); @@ -5914,12 +5982,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_FALSE(HasActiveSession(host_port_pair_)); EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_)); // Run the message loop to complete host resolution. @@ -5990,12 +6059,13 @@ // Create request, should fail after the write of the CHLO fails. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Ensure that the session is alive but not active. EXPECT_FALSE(HasActiveSession(host_port_pair_)); EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_)); @@ -6062,12 +6132,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -6162,12 +6233,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -6304,12 +6376,13 @@ // Create request #1 and QuicHttpStream. QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -6326,12 +6399,13 @@ // Second request returns synchronously because it pools to existing session. TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); HttpRequestInfo request_info2; @@ -6441,12 +6515,13 @@ // Create request #1 and QuicHttpStream. QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -6463,12 +6538,13 @@ // Second request returns synchronously because it pools to existing session. TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -6588,12 +6664,13 @@ // Create request #1 and QuicHttpStream. QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -6610,12 +6687,13 @@ // Second request returns synchronously because it pools to existing session. TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -6726,12 +6804,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -6814,12 +6893,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -6944,12 +7024,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -7039,12 +7120,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Deliver the network notification, which should cause the connection to be // closed. scoped_mock_network_change_notifier_->mock_network_change_notifier() @@ -7080,12 +7162,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -7218,12 +7301,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -7362,12 +7446,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -7501,12 +7586,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -7609,12 +7695,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -7728,12 +7815,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -7894,12 +7982,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8050,12 +8139,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8194,12 +8284,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8322,12 +8413,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8459,12 +8551,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8589,12 +8682,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8686,12 +8780,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8835,12 +8930,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -8933,12 +9029,13 @@ ->NotifyNetworkMadeDefault(kNewNetworkForTests); QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -9026,12 +9123,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -9149,12 +9247,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -9230,12 +9329,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -9385,12 +9485,13 @@ // Create request and QuicHttpStream. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); @@ -9445,12 +9546,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -9468,12 +9570,13 @@ // a new session. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); @@ -9597,12 +9700,13 @@ "192.168.0.1", ""); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // If we are waiting for disk cache, we would have posted a task. Verify that // the CancelWaitForDataReady task hasn't been posted. @@ -9651,12 +9755,13 @@ EXPECT_EQ(quic::QuicTime::Delta::FromSeconds(quic::kPingTimeoutSecs), QuicStreamFactoryPeer::GetPingTimeout(factory_.get())); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); EXPECT_EQ(quic::QuicTime::Delta::FromSeconds(quic::kPingTimeoutSecs), @@ -9692,7 +9797,7 @@ EXPECT_EQ(OK, request2.Request( server2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback2.callback())); QuicChromiumClientSession* session2 = GetActiveSession(server2); @@ -10062,6 +10167,7 @@ int rv = request.Request( HostPortPair(kDefaultServerHostName, kDefaultServerPort), version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), network_isolation_keys[i], + false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback()); EXPECT_THAT(callback_.GetResult(rv), IsOk()); @@ -10138,12 +10244,13 @@ // Start a QUIC request. QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); @@ -10190,12 +10297,13 @@ "StartReading"); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Call run_loop so that QuicChromiumPacketReader::OnReadComplete() gets // called. @@ -10242,12 +10350,13 @@ "StartReading"); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(OK, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Call run_loop so that QuicChromiumPacketReader::OnReadComplete() gets // called. @@ -10277,12 +10386,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -10300,12 +10410,13 @@ ->promised_by_url())[kDefaultUrl] = &promised; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + OK, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(1, QuicStreamFactoryPeer::GetNumPushStreamsCreated(factory_.get())); } @@ -10338,12 +10449,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -10366,12 +10478,13 @@ // Doing the request should not use the push stream, but rather // cancel it because the privacy modes do not match. QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, PRIVACY_MODE_ENABLED, - DEFAULT_PRIORITY, SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, PRIVACY_MODE_ENABLED, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(0, QuicStreamFactoryPeer::GetNumPushStreamsCreated(factory_.get())); EXPECT_EQ(index->GetPromised(kDefaultUrl), nullptr); @@ -10404,12 +10517,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - destination1, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + destination1, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -10418,12 +10532,13 @@ // Second request returns synchronously because it pools to existing session. TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - destination2, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + OK, + request2.Request( + destination2, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -10526,12 +10641,13 @@ AddHangingSocketData(); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - destination, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsError(ERR_QUIC_HANDSHAKE_FAILED)); @@ -10567,12 +10683,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - destination, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); @@ -10582,12 +10699,13 @@ // Second request returns synchronously because it pools to existing session. TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(OK, - request2.Request( - destination, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + OK, + request2.Request( + destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -10645,12 +10763,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(OK, callback_.WaitForResult()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -10658,12 +10777,13 @@ TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - destination, version_, PRIVACY_MODE_ENABLED, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + destination, version_, PRIVACY_MODE_ENABLED, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); EXPECT_EQ(OK, callback2.WaitForResult()); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -10688,6 +10808,85 @@ EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); } +// QuicStreamRequest is not pooled if the disable_secure_dns field differs. +TEST_P(QuicStreamFactoryWithDestinationTest, DifferentDisableSecureDns) { + Initialize(); + + GURL url1("https://www.example.org/"); + GURL url2("https://mail.example.org/"); + origin1_ = HostPortPair::FromURL(url1); + origin2_ = HostPortPair::FromURL(url2); + + HostPortPair destination = GetDestination(); + + scoped_refptr<X509Certificate> cert( + ImportCertFromFile(GetTestCertsDirectory(), "wildcard.pem")); + ASSERT_TRUE(cert->VerifyNameMatch(origin1_.host())); + ASSERT_TRUE(cert->VerifyNameMatch(origin2_.host())); + ASSERT_FALSE(cert->VerifyNameMatch(kDifferentHostname)); + + ProofVerifyDetailsChromium verify_details1; + verify_details1.cert_verify_result.verified_cert = cert; + verify_details1.cert_verify_result.is_issued_by_known_root = true; + crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details1); + + ProofVerifyDetailsChromium verify_details2; + verify_details2.cert_verify_result.verified_cert = cert; + verify_details2.cert_verify_result.is_issued_by_known_root = true; + crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details2); + + MockQuicData socket_data1(version_); + socket_data1.AddRead(SYNCHRONOUS, ERR_IO_PENDING); + if (VersionUsesHttp3(version_.transport_version)) + socket_data1.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket()); + socket_data1.AddSocketDataToFactory(socket_factory_.get()); + client_maker_.Reset(); + MockQuicData socket_data2(version_); + socket_data2.AddRead(SYNCHRONOUS, ERR_IO_PENDING); + if (VersionUsesHttp3(version_.transport_version)) + socket_data2.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket()); + socket_data2.AddSocketDataToFactory(socket_factory_.get()); + + QuicStreamRequest request1(factory_.get()); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ(OK, callback_.WaitForResult()); + std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); + EXPECT_TRUE(stream1.get()); + EXPECT_TRUE(HasActiveSession(origin1_)); + + TestCompletionCallback callback2; + QuicStreamRequest request2(factory_.get()); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + destination, version_, PRIVACY_MODE_DISABLED, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), true /* disable_secure_dns */, + /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ(OK, callback2.WaitForResult()); + std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); + EXPECT_TRUE(stream2.get()); + + // |request2| does not pool to the first session, because |disable_secure_dns| + // does not match. + QuicChromiumClientSession::Handle* session1 = + QuicHttpStreamPeer::GetSessionHandle(stream1.get()); + QuicChromiumClientSession::Handle* session2 = + QuicHttpStreamPeer::GetSessionHandle(stream2.get()); + EXPECT_FALSE(session1->SharesSameSession(*session2)); + + EXPECT_TRUE(socket_data1.AllReadDataConsumed()); + EXPECT_TRUE(socket_data1.AllWriteDataConsumed()); + EXPECT_TRUE(socket_data2.AllReadDataConsumed()); + EXPECT_TRUE(socket_data2.AllWriteDataConsumed()); +} + // QuicStreamRequest is not pooled if certificate does not match its origin. TEST_P(QuicStreamFactoryWithDestinationTest, DisjointCertificate) { Initialize(); @@ -10733,12 +10932,13 @@ socket_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request1(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request1.Request( - destination, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request1.Request( + destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url1, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream1 = CreateStream(&request1); EXPECT_TRUE(stream1.get()); @@ -10746,12 +10946,13 @@ TestCompletionCallback callback2; QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - destination, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback2.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + destination, version_, privacy_mode_, DEFAULT_PRIORITY, SocketTag(), + NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url2, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback2.callback())); EXPECT_THAT(callback2.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream2 = CreateStream(&request2); EXPECT_TRUE(stream2.get()); @@ -10866,12 +11067,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_THAT(callback_.WaitForResult(), IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); @@ -10895,23 +11097,25 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, MAXIMUM_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(MAXIMUM_PRIORITY, host_resolver_->last_request_priority()); EXPECT_EQ(MAXIMUM_PRIORITY, host_resolver_->request_priority(1)); QuicStreamRequest request2(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request2.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request2.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url2_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->last_request_priority()); EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->request_priority(2)); @@ -10920,6 +11124,39 @@ EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->request_priority(2)); } +// Verifies that the host resolver uses the disable secure DNS setting passed to +// QuicStreamRequest::Request(). +TEST_P(QuicStreamFactoryTest, HostResolverUsesDisableSecureDns) { + Initialize(); + ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails(); + crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details); + + MockQuicData socket_data(version_); + socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); + if (VersionUsesHttp3(version_.transport_version)) + socket_data.AddWrite(SYNCHRONOUS, ConstructInitialSettingsPacket()); + socket_data.AddSocketDataToFactory(socket_factory_.get()); + + QuicStreamRequest request(factory_.get()); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), true /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); + + EXPECT_THAT(callback_.WaitForResult(), IsOk()); + std::unique_ptr<HttpStream> stream = CreateStream(&request); + EXPECT_TRUE(stream.get()); + + EXPECT_EQ(net::DnsConfig::SecureDnsMode::OFF, + host_resolver_->last_secure_dns_mode_override().value()); + + EXPECT_TRUE(socket_data.AllReadDataConsumed()); + EXPECT_TRUE(socket_data.AllWriteDataConsumed()); +} + // Passes |quic_max_time_before_crypto_handshake| and // |quic_max_idle_time_before_crypto_handshake| to QuicStreamFactory, // checks that its internal quic::QuicConfig is correct. @@ -10953,12 +11190,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); TestCompletionCallback host_resolution_callback; EXPECT_TRUE( @@ -11007,12 +11245,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); TestCompletionCallback host_resolution_callback; EXPECT_TRUE( @@ -11058,12 +11297,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_QUIC_PROTOCOL_ERROR, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // WaitForHostResolution() should return false since host // resolution has finished already. @@ -11096,12 +11336,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // WaitForHostResolution() should return false since host // resolution has finished already. @@ -11130,12 +11371,13 @@ host_resolver_->set_synchronous_mode(true); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_NAME_NOT_RESOLVED, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_NAME_NOT_RESOLVED, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // WaitForHostResolution() should return false since host // resolution has failed already. @@ -11156,12 +11398,13 @@ host_resolver_->rules()->AddSimulatedFailure(host_port_pair_.host()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); TestCompletionCallback host_resolution_callback; EXPECT_TRUE( @@ -11211,12 +11454,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_THAT(request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback()), - IsOk()); + EXPECT_THAT( + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback()), + IsOk()); std::unique_ptr<HttpStream> stream = CreateStream(&request); EXPECT_TRUE(stream.get()); QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); @@ -11247,12 +11491,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); TestCompletionCallback host_resolution_callback; EXPECT_TRUE( request.WaitForHostResolution(host_resolution_callback.callback())); @@ -11306,12 +11551,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check that the racing job is running. EXPECT_TRUE(HasLiveSession(host_port_pair_)); @@ -11369,12 +11615,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Send Crypto handshake so connect will call back. crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( @@ -11438,12 +11685,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Finish dns async, check we still need to wait for stale connection async. host_resolver_->ResolveAllPending(); @@ -11515,12 +11763,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check the stale connection is running. EXPECT_TRUE(HasLiveSession(host_port_pair_)); @@ -11596,12 +11845,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Finish the stale connection. crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( @@ -11675,12 +11925,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Finish dns resolution, but need to wait for stale connection. host_resolver_->ResolveAllPending(); base::RunLoop().RunUntilIdle(); @@ -11717,12 +11968,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_NAME_NOT_RESOLVED, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_NAME_NOT_RESOLVED, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); } // With dns race experiment on, no cache available, dns resolve returns error @@ -11742,12 +11994,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Resolve and expect result that shows the resolution error. host_resolver_->ResolveAllPending(); @@ -11793,12 +12046,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check that the stale connection is running. EXPECT_TRUE(HasLiveSession(host_port_pair_)); @@ -11849,12 +12103,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); EXPECT_FALSE(HasLiveSession(host_port_pair_)); EXPECT_TRUE(HasActiveJob(host_port_pair_, privacy_mode_)); @@ -11900,12 +12155,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check that the stale connection fails. EXPECT_FALSE(HasLiveSession(host_port_pair_)); @@ -11963,12 +12219,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check the stale connection fails. EXPECT_FALSE(HasLiveSession(host_port_pair_)); @@ -12022,12 +12279,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // host resolution returned but stale connection hasn't finished yet. host_resolver_->ResolveAllPending(); @@ -12080,12 +12338,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Host Resolution returns failure but stale connection hasn't finished. host_resolver_->ResolveAllPending(); @@ -12116,12 +12375,13 @@ quic_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check that expect_on_host_resolution_ is properlly set. TestCompletionCallback host_resolution_callback; @@ -12183,12 +12443,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check that the racing job is running. EXPECT_TRUE(HasLiveSession(host_port_pair_)); @@ -12258,12 +12519,13 @@ quic_data2.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); // Check that the racing job is running. EXPECT_TRUE(HasLiveSession(host_port_pair_)); @@ -12323,12 +12585,13 @@ socket_data.AddSocketDataToFactory(socket_factory_.get()); QuicStreamRequest request(factory_.get()); - EXPECT_EQ(ERR_IO_PENDING, - request.Request( - host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, - SocketTag(), NetworkIsolationKey(), - /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, - failed_on_default_network_callback_, callback_.callback())); + EXPECT_EQ( + ERR_IO_PENDING, + request.Request( + host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, + SocketTag(), NetworkIsolationKey(), false /* disable_secure_dns */, + /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, + failed_on_default_network_callback_, callback_.callback())); base::RunLoop().RunUntilIdle(); EXPECT_FALSE(HasActiveSession(host_port_pair_)); @@ -12394,7 +12657,7 @@ QuicStreamRequest request1(factory_.get()); int rv = request1.Request( host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, tag1, - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback()); EXPECT_THAT(callback_.GetResult(rv), IsOk()); @@ -12410,7 +12673,7 @@ QuicStreamRequest request2(factory_.get()); rv = request2.Request( host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, tag1, - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback()); EXPECT_THAT(callback_.GetResult(rv), IsOk()); @@ -12424,7 +12687,7 @@ QuicStreamRequest request3(factory_.get()); rv = request3.Request( host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY, tag2, - NetworkIsolationKey(), + NetworkIsolationKey(), false /* disable_secure_dns */, /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_, failed_on_default_network_callback_, callback_.callback()); EXPECT_THAT(callback_.GetResult(rv), IsOk());
diff --git a/net/socket/client_socket_pool.cc b/net/socket/client_socket_pool.cc index b614c75..8e9f7e60 100644 --- a/net/socket/client_socket_pool.cc +++ b/net/socket/client_socket_pool.cc
@@ -168,10 +168,10 @@ if (using_ssl && proxy_server.is_direct()) { resolution_callback = base::BindRepeating( &OnHostResolution, common_connect_job_params->spdy_session_pool, - SpdySessionKey(group_id.destination(), proxy_server, - group_id.privacy_mode(), - SpdySessionKey::IsProxySession::kFalse, socket_tag, - group_id.network_isolation_key()), + SpdySessionKey( + group_id.destination(), proxy_server, group_id.privacy_mode(), + SpdySessionKey::IsProxySession::kFalse, socket_tag, + group_id.network_isolation_key(), group_id.disable_secure_dns()), is_for_websockets); } else if (proxy_server.is_https()) { resolution_callback = base::BindRepeating( @@ -179,7 +179,8 @@ SpdySessionKey(proxy_server.host_port_pair(), ProxyServer::Direct(), group_id.privacy_mode(), SpdySessionKey::IsProxySession::kTrue, socket_tag, - group_id.network_isolation_key()), + group_id.network_isolation_key(), + group_id.disable_secure_dns()), is_for_websockets); }
diff --git a/net/socket/client_socket_pool_manager.cc b/net/socket/client_socket_pool_manager.cc index f8df5f5..84e6de66 100644 --- a/net/socket/client_socket_pool_manager.cc +++ b/net/socket/client_socket_pool_manager.cc
@@ -112,6 +112,7 @@ bool is_for_websockets, PrivacyMode privacy_mode, const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns, const SocketTag& socket_tag, const NetLogWithSource& net_log, int num_preconnect_streams, @@ -130,7 +131,7 @@ ClientSocketPool::GroupId connection_group = CreateGroupId(group_type, origin_host_port, proxy_info, privacy_mode, - network_isolation_key, false /* disable_secure_dns */); + network_isolation_key, disable_secure_dns); scoped_refptr<ClientSocketPool::SocketParams> socket_params = CreateSocketParams(connection_group, proxy_info.proxy_server(), ssl_config_for_origin, ssl_config_for_proxy); @@ -250,6 +251,7 @@ const SSLConfig& ssl_config_for_proxy, PrivacyMode privacy_mode, const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns, const SocketTag& socket_tag, const NetLogWithSource& net_log, ClientSocketHandle* socket_handle, @@ -260,7 +262,7 @@ group_type, endpoint, request_load_flags, request_priority, session, proxy_info, ssl_config_for_origin, ssl_config_for_proxy, false /* is_for_websockets */, privacy_mode, network_isolation_key, - socket_tag, net_log, 0, socket_handle, + disable_secure_dns, socket_tag, net_log, 0, socket_handle, HttpNetworkSession::NORMAL_SOCKET_POOL, std::move(callback), proxy_auth_callback); } @@ -289,7 +291,7 @@ group_type, endpoint, request_load_flags, request_priority, session, proxy_info, ssl_config_for_origin, ssl_config_for_proxy, true /* is_for_websockets */, privacy_mode, network_isolation_key, - SocketTag(), net_log, 0, socket_handle, + false /*disable_secure_dns */, SocketTag(), net_log, 0, socket_handle, HttpNetworkSession::WEBSOCKET_SOCKET_POOL, std::move(callback), proxy_auth_callback); } @@ -305,6 +307,7 @@ const SSLConfig& ssl_config_for_proxy, PrivacyMode privacy_mode, const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns, const NetLogWithSource& net_log, int num_preconnect_streams) { // QUIC proxies are currently not supported through this method. @@ -314,7 +317,7 @@ group_type, endpoint, request_load_flags, request_priority, session, proxy_info, ssl_config_for_origin, ssl_config_for_proxy, false /* force_tunnel */, privacy_mode, network_isolation_key, - SocketTag(), net_log, num_preconnect_streams, nullptr, + disable_secure_dns, SocketTag(), net_log, num_preconnect_streams, nullptr, HttpNetworkSession::NORMAL_SOCKET_POOL, CompletionOnceCallback(), ClientSocketPool::ProxyAuthCallback()); }
diff --git a/net/socket/client_socket_pool_manager.h b/net/socket/client_socket_pool_manager.h index 3d92536..9a4ea9d 100644 --- a/net/socket/client_socket_pool_manager.h +++ b/net/socket/client_socket_pool_manager.h
@@ -107,6 +107,7 @@ const SSLConfig& ssl_config_for_proxy, PrivacyMode privacy_mode, const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns, const SocketTag& socket_tag, const NetLogWithSource& net_log, ClientSocketHandle* socket_handle, @@ -151,6 +152,7 @@ const SSLConfig& ssl_config_for_proxy, PrivacyMode privacy_mode, const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns, const NetLogWithSource& net_log, int num_preconnect_streams);
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc index e10abf4..fc2cb7cd 100644 --- a/net/spdy/spdy_session.cc +++ b/net/spdy/spdy_session.cc
@@ -1626,7 +1626,8 @@ SpdySessionKey new_key( spdy_session_key_.host_port_pair(), spdy_session_key_.proxy_server(), spdy_session_key_.privacy_mode(), spdy_session_key_.is_proxy_session(), - new_tag, spdy_session_key_.network_isolation_key()); + new_tag, spdy_session_key_.network_isolation_key(), + spdy_session_key_.disable_secure_dns()); spdy_session_key_ = new_key; return true;
diff --git a/net/spdy/spdy_session_key.cc b/net/spdy/spdy_session_key.cc index dd83efc..a7dd6908 100644 --- a/net/spdy/spdy_session_key.cc +++ b/net/spdy/spdy_session_key.cc
@@ -21,7 +21,8 @@ PrivacyMode privacy_mode, IsProxySession is_proxy_session, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key) + const NetworkIsolationKey& network_isolation_key, + bool disable_secure_dns) : host_port_proxy_pair_(host_port_pair, proxy_server), privacy_mode_(privacy_mode), is_proxy_session_(is_proxy_session), @@ -30,7 +31,8 @@ base::FeatureList::IsEnabled( features::kPartitionConnectionsByNetworkIsolationKey) ? network_isolation_key - : NetworkIsolationKey()) { + : NetworkIsolationKey()), + disable_secure_dns_(disable_secure_dns) { // IsProxySession::kTrue should only be used with direct connections, since // using multiple layers of proxies on top of each other isn't supported. DCHECK(is_proxy_session != IsProxySession::kTrue || proxy_server.is_direct()); @@ -46,10 +48,11 @@ bool SpdySessionKey::operator<(const SpdySessionKey& other) const { return std::tie(privacy_mode_, host_port_proxy_pair_.first, host_port_proxy_pair_.second, is_proxy_session_, - network_isolation_key_, socket_tag_) < + network_isolation_key_, disable_secure_dns_, socket_tag_) < std::tie(other.privacy_mode_, other.host_port_proxy_pair_.first, other.host_port_proxy_pair_.second, other.is_proxy_session_, - other.network_isolation_key_, other.socket_tag_); + other.network_isolation_key_, other.disable_secure_dns_, + other.socket_tag_); } bool SpdySessionKey::operator==(const SpdySessionKey& other) const { @@ -59,6 +62,7 @@ host_port_proxy_pair_.second == other.host_port_proxy_pair_.second && is_proxy_session_ == other.is_proxy_session_ && network_isolation_key_ == other.network_isolation_key_ && + disable_secure_dns_ == other.disable_secure_dns_ && socket_tag_ == other.socket_tag_; }
diff --git a/net/spdy/spdy_session_key.h b/net/spdy/spdy_session_key.h index 22e9204..d31e3df 100644 --- a/net/spdy/spdy_session_key.h +++ b/net/spdy/spdy_session_key.h
@@ -36,7 +36,8 @@ PrivacyMode privacy_mode, IsProxySession is_proxy_session, const SocketTag& socket_tag, - const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey()); + const NetworkIsolationKey& network_isolation_key = NetworkIsolationKey(), + bool disable_secure_dns = false); SpdySessionKey(const SpdySessionKey& other); @@ -73,6 +74,8 @@ return network_isolation_key_; } + bool disable_secure_dns() const { return disable_secure_dns_; } + // Returns the estimate of dynamically allocated memory in bytes. size_t EstimateMemoryUsage() const; @@ -84,6 +87,7 @@ SocketTag socket_tag_; // Used to separate requests made in different contexts. NetworkIsolationKey network_isolation_key_; + bool disable_secure_dns_; }; } // namespace net
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc index 4ce4347..3a452f0 100644 --- a/net/spdy/spdy_session_pool.cc +++ b/net/spdy/spdy_session_pool.cc
@@ -279,7 +279,8 @@ if (!(alias_key.proxy_server() == key.proxy_server()) || !(alias_key.privacy_mode() == key.privacy_mode()) || !(alias_key.is_proxy_session() == key.is_proxy_session()) || - !(alias_key.network_isolation_key() == key.network_isolation_key())) { + !(alias_key.network_isolation_key() == key.network_isolation_key()) || + !(alias_key.disable_secure_dns() == key.disable_secure_dns())) { continue; } @@ -308,7 +309,8 @@ SpdySessionKey new_key(old_key.host_port_pair(), old_key.proxy_server(), old_key.privacy_mode(), old_key.is_proxy_session(), key.socket_tag(), - old_key.network_isolation_key()); + old_key.network_isolation_key(), + old_key.disable_secure_dns()); // If there is already a session with |new_key|, skip this one. // It will be found in |aliases_| in a future iteration. @@ -344,10 +346,10 @@ } UnmapKey(*it); - SpdySessionKey new_pool_alias_key = - SpdySessionKey(it->host_port_pair(), it->proxy_server(), - it->privacy_mode(), it->is_proxy_session(), - key.socket_tag(), it->network_isolation_key()); + SpdySessionKey new_pool_alias_key = SpdySessionKey( + it->host_port_pair(), it->proxy_server(), it->privacy_mode(), + it->is_proxy_session(), key.socket_tag(), + it->network_isolation_key(), it->disable_secure_dns()); MapKeyToAvailableSession(new_pool_alias_key, available_session); auto old_it = it; ++it;
diff --git a/net/spdy/spdy_session_pool_unittest.cc b/net/spdy/spdy_session_pool_unittest.cc index a2d8986b..593e50f0 100644 --- a/net/spdy/spdy_session_pool_unittest.cc +++ b/net/spdy/spdy_session_pool_unittest.cc
@@ -492,6 +492,15 @@ EXPECT_FALSE(TryCreateAliasedSpdySession(spdy_session_pool_, proxy_key, test_hosts[1].iplist)); + // Verify that the second host, with a different disable_secure_dns value, + // won't share the IP, even if the IP list matches. + SpdySessionKey disable_secure_dns_key( + test_hosts[1].key.host_port_pair(), ProxyServer::Direct(), + PRIVACY_MODE_DISABLED, SpdySessionKey::IsProxySession::kFalse, + SocketTag(), NetworkIsolationKey(), true /* disable_secure_dns */); + EXPECT_FALSE(TryCreateAliasedSpdySession( + spdy_session_pool_, disable_secure_dns_key, test_hosts[1].iplist)); + // Overlap between 2 and 3 is not transitive to 1. EXPECT_FALSE(TryCreateAliasedSpdySession( spdy_session_pool_, test_hosts[2].key, test_hosts[2].iplist));
diff --git a/remoting/base/BUILD.gn b/remoting/base/BUILD.gn index a8e5b1f..3134240 100644 --- a/remoting/base/BUILD.gn +++ b/remoting/base/BUILD.gn
@@ -66,6 +66,7 @@ deps = [ "//base/third_party/dynamic_annotations", "//google_apis", + "//remoting/base/grpc_support", "//third_party/libvpx", "//third_party/libyuv", "//third_party/webrtc/modules/desktop_capture:primitives",
diff --git a/remoting/base/name_value_map.h b/remoting/base/name_value_map.h index 3027820..485e6f72 100644 --- a/remoting/base/name_value_map.h +++ b/remoting/base/name_value_map.h
@@ -20,16 +20,22 @@ }; template <typename T, size_t N> -const char* ValueToName(const NameMapElement<T> (&map)[N], T value) { +const char* ValueToNameUnchecked(const NameMapElement<T> (&map)[N], T value) { for (size_t i = 0; i < N; ++i) { if (map[i].value == value) return map[i].name; } - NOTREACHED(); return nullptr; } template <typename T, size_t N> +const char* ValueToName(const NameMapElement<T> (&map)[N], T value) { + const char* result = ValueToNameUnchecked(map, value); + DCHECK_NE(nullptr, result); + return result; +} + +template <typename T, size_t N> bool NameToValue(const NameMapElement<T> (&map)[N], const std::string& name, T* result) {
diff --git a/remoting/host/BUILD.gn b/remoting/host/BUILD.gn index 2733d58..f9767a3 100644 --- a/remoting/host/BUILD.gn +++ b/remoting/host/BUILD.gn
@@ -54,6 +54,23 @@ ] } +source_set("base") { + sources = [ + "host_exit_codes.cc", + "host_exit_codes.h", + "logging.h", + "logging_linux.cc", + "logging_mac.cc", + "logging_win.cc", + "username.cc", + "username.h", + ] + deps = [ + "//base", + "//remoting/base", + ] +} + # This must be a static library instead of a source set because # remoting_unittests requires that remoting_me2me_host.cc not be pulled in, # which in turn depends on remoting_me2me_host_static which isn't part of that @@ -173,8 +190,6 @@ "host_details.h", "host_event_logger.h", "host_event_logger_win.cc", - "host_exit_codes.cc", - "host_exit_codes.h", "host_experiment_session_plugin.cc", "host_experiment_session_plugin.h", "host_export.h", @@ -221,10 +236,6 @@ "ipc_video_frame_capturer.h", "it2me_desktop_environment.cc", "it2me_desktop_environment.h", - "logging.h", - "logging_linux.cc", - "logging_mac.cc", - "logging_win.cc", "me2me_desktop_environment.cc", "me2me_desktop_environment.h", "mouse_cursor_monitor_proxy.cc", @@ -288,8 +299,6 @@ "usage_stats_consent.h", "usage_stats_consent_mac.cc", "usage_stats_consent_win.cc", - "username.cc", - "username.h", "xmpp_register_support_host_request.cc", "xmpp_register_support_host_request.h", "xsession_chooser_linux.cc", @@ -306,6 +315,7 @@ defines = [ "WEBRTC_CHROMIUM_BUILD" ] deps = [ + ":base", "//base:i18n", "//build:branding_buildflags", "//components/policy/core/common",
diff --git a/remoting/host/host_exit_codes.cc b/remoting/host/host_exit_codes.cc index 0809a8a..daec9bb 100644 --- a/remoting/host/host_exit_codes.cc +++ b/remoting/host/host_exit_codes.cc
@@ -25,4 +25,9 @@ return ValueToName(kHostExitCodeStrings, exit_code); } +const char* ExitCodeToStringUnchecked(int exit_code) { + return ValueToNameUnchecked(kHostExitCodeStrings, + static_cast<HostExitCodes>(exit_code)); +} + } // namespace remoting
diff --git a/remoting/host/host_exit_codes.h b/remoting/host/host_exit_codes.h index 5a31757..b48c284 100644 --- a/remoting/host/host_exit_codes.h +++ b/remoting/host/host_exit_codes.h
@@ -35,6 +35,10 @@ }; const char* ExitCodeToString(HostExitCodes exit_code); + +// Returns nullptr if |exit_code| is not a HostExitCodes. +const char* ExitCodeToStringUnchecked(int exit_code); + } // namespace remoting #endif // REMOTING_HOST_HOST_EXIT_CODES_H_
diff --git a/remoting/host/mac/BUILD.gn b/remoting/host/mac/BUILD.gn index 3ac8732..7a7f9af2 100644 --- a/remoting/host/mac/BUILD.gn +++ b/remoting/host/mac/BUILD.gn
@@ -20,6 +20,31 @@ ] } +executable("remoting_me2me_host_service") { + sources = [ + "host_service_main.cc", + ] + configs += [ "//remoting/build/config:version" ] + deps = [ + ":constants", + "//base", + "//remoting/base", + "//remoting/host:base", + ] +} + +bundle_data("remoting_me2me_host_service_bundle_data") { + sources = [ + "$root_out_dir/remoting_me2me_host_service", + ] + outputs = [ + "{{bundle_executable_dir}}/{{source_file_part}}", + ] + public_deps = [ + ":remoting_me2me_host_service", + ] +} + # remoting_me2me_host-InfoPlist.strings foreach(locale, remoting_locales_with_underscores) { bundle_data("remoting_me2me_host_strings_${locale}_bundle_data") { @@ -100,6 +125,7 @@ } deps += [ ":remoting_host_resources", + ":remoting_me2me_host_service_bundle_data", ":remoting_me2me_script", "//remoting/host:remoting_infoplist_strings", "//remoting/resources:copy_locales",
diff --git a/remoting/host/mac/host_service_main.cc b/remoting/host/mac/host_service_main.cc new file mode 100644 index 0000000..5b890bd --- /dev/null +++ b/remoting/host/mac/host_service_main.cc
@@ -0,0 +1,332 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <signal.h> +#include <unistd.h> + +#include <iostream> +#include <string> + +#include "base/at_exit.h" +#include "base/bind.h" +#include "base/command_line.h" +#include "base/files/file_path.h" +#include "base/files/file_util.h" +#include "base/logging.h" +#include "base/no_destructor.h" +#include "base/path_service.h" +#include "base/process/launch.h" +#include "base/process/process.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/stringize_macros.h" +#include "base/threading/platform_thread.h" +#include "base/time/time.h" +#include "remoting/base/logging.h" +#include "remoting/host/host_exit_codes.h" +#include "remoting/host/logging.h" +#include "remoting/host/mac/constants_mac.h" +#include "remoting/host/username.h" + +using namespace remoting; + +namespace remoting { +namespace { + +constexpr char kSwitchDisable[] = "disable"; +constexpr char kSwitchEnable[] = "enable"; +constexpr char kSwitchSaveConfig[] = "save-config"; +constexpr char kSwitchHostVersion[] = "host-version"; +constexpr char kSwitchHostRunFromLaunchd[] = "run-from-launchd"; + +constexpr char kHostExeFileName[] = "remoting_me2me_host"; + +// The exit code returned by 'wait' when a process is terminated by SIGTERM. +constexpr int kSigtermExitCode = 128 + SIGTERM; + +// Constants controlling the host process relaunch throttling. +constexpr base::TimeDelta kMinimumRelaunchInterval = + base::TimeDelta::FromMinutes(1); +constexpr int kMaximumHostFailures = 10; + +// Exit code 126 is defined by Posix to mean "Command found, but not +// executable", and is returned if the process cannot be launched due to +// parental control. +constexpr int kPermissionDeniedParentalControl = 126; + +// This executable works as a proxy between launchd and the host. Signals of +// interest to the host must be forwarded. +constexpr int kSignalList[] = { + SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGTRAP, SIGABRT, SIGEMT, + SIGFPE, SIGBUS, SIGSEGV, SIGSYS, SIGPIPE, SIGALRM, SIGTERM, + SIGURG, SIGTSTP, SIGCONT, SIGTTIN, SIGTTOU, SIGIO, SIGXCPU, + SIGXFSZ, SIGVTALRM, SIGPROF, SIGWINCH, SIGINFO, SIGUSR1, SIGUSR2}; + +// Current host PID used to forward signals. 0 if host is not running. +static base::ProcessId g_host_pid = 0; + +void HandleSignal(int signum) { + if (g_host_pid) { + // All other signals are forwarded to host then ignored except SIGTERM. + // launchd sends SIGTERM when service is being stopped so both the host and + // the host service need to terminate. + HOST_LOG << "Forwarding signal " << signum << " to host process " + << g_host_pid; + kill(g_host_pid, signum); + if (signum == SIGTERM) { + HOST_LOG << "Host service is terminating upon reception of SIGTERM"; + exit(kSigtermExitCode); + } + } else { + HOST_LOG << "Signal " << signum + << " will not be forwarded since host is not running."; + exit(128 + signum); + } +} + +void RegisterSignalHandler() { + struct sigaction action = {}; + sigfillset(&action.sa_mask); + action.sa_flags = 0; + action.sa_handler = &HandleSignal; + + for (int signum : kSignalList) { + if (sigaction(signum, &action, nullptr) == -1) { + PLOG(DFATAL) << "Failed to register signal handler for signal " << signum; + } + } +} + +class HostService { + public: + HostService(); + ~HostService(); + + bool Disable(); + bool Enable(); + bool WriteStdinToConfig(); + int RunHost(); + void PrintHostVersion(); + void PrintPid(); + + private: + base::FilePath enabled_file_; + base::FilePath config_file_; + base::FilePath host_exe_file_; +}; + +HostService::HostService() { + enabled_file_ = base::FilePath(kHostEnabledPath); + config_file_ = base::FilePath(kHostConfigFilePath); + + base::FilePath host_service_dir; + base::PathService::Get(base::DIR_EXE, &host_service_dir); + host_exe_file_ = host_service_dir.AppendASCII(kHostExeFileName); +} + +HostService::~HostService() = default; + +int HostService::RunHost() { + // Run the config-upgrade tool, but only if running as root, as normal users + // don't have permission to write the config file. + if (geteuid() == 0) { + HOST_LOG << "Attempting to upgrade token"; + base::CommandLine cmdline(host_exe_file_); + cmdline.AppendSwitch("upgrade-token"); + cmdline.AppendSwitchPath("host-config", config_file_); + std::string output; + base::GetAppOutputAndError(cmdline, &output); + if (!output.empty()) { + HOST_LOG << "Message from host --upgrade-token: " << output; + } + } + + int host_failure_count = 0; + base::TimeTicks host_start_time; + + while (true) { + if (!base::PathExists(enabled_file_)) { + HOST_LOG << "Daemon is disabled."; + return 0; + } + + // If this is not the first time the host has run, make sure we don't + // relaunch it too soon. + if (!host_start_time.is_null()) { + base::TimeDelta host_lifetime = base::TimeTicks::Now() - host_start_time; + HOST_LOG << "Host ran for " << host_lifetime; + if (host_lifetime < kMinimumRelaunchInterval) { + // If the host didn't run for very long, assume it crashed. Relaunch + // only after a suitable delay and increase the failure count. + host_failure_count++; + LOG(WARNING) << "Host failure count " << host_failure_count << "/" + << kMaximumHostFailures; + if (host_failure_count >= kMaximumHostFailures) { + LOG(ERROR) << "Too many host failures. Giving up."; + return 1; + } + base::TimeDelta relaunch_in = kMinimumRelaunchInterval - host_lifetime; + HOST_LOG << "Relaunching in " << relaunch_in; + base::PlatformThread::Sleep(relaunch_in); + } else { + // If the host ran for long enough, reset the crash counter. + host_failure_count = 0; + } + } + + host_start_time = base::TimeTicks::Now(); + base::CommandLine cmdline(host_exe_file_); + cmdline.AppendSwitchPath("host-config", config_file_); + std::string ssh_auth_sockname = + "/tmp/chromoting." + GetUsername() + ".ssh_auth_sock"; + cmdline.AppendSwitchASCII("ssh-auth-sockname", ssh_auth_sockname); + base::Process process = base::LaunchProcess(cmdline, base::LaunchOptions()); + if (!process.IsValid()) { + LOG(ERROR) << "Failed to launch host process for unknown reason."; + return 1; + } + + g_host_pid = process.Pid(); + int exit_code; + process.WaitForExit(&exit_code); + g_host_pid = 0; + const char* exit_code_string_ptr = ExitCodeToStringUnchecked(exit_code); + std::string exit_code_string = + exit_code_string_ptr ? (std::string(exit_code_string_ptr) + " (" + + base::NumberToString(exit_code) + ")") + : base::NumberToString(exit_code); + + if (exit_code == 0 || exit_code == kSigtermExitCode || + exit_code == kPermissionDeniedParentalControl || + (exit_code >= kMinPermanentErrorExitCode && + exit_code <= kMaxPermanentErrorExitCode)) { + HOST_LOG << "Host returned permanent exit code " << exit_code_string + << " at " << base::Time::Now(); + if (exit_code == kInvalidHostIdExitCode || + exit_code == kHostDeletedExitCode) { + // The host was taken off-line remotely. To prevent the host being + // restarted when the login context changes, try to delete the "enabled" + // file. Since this requires root privileges, this is only possible when + // this executable is launched in the "login" context. In the "aqua" + // context, just exit and try again next time. + HOST_LOG << "Host deleted - disabling"; + Disable(); + } + return exit_code; + } + + // Ignore non-permanent error-code and launch host again. Stop handling + // signals temporarily in case the executable has to sleep to throttle host + // relaunches. While throttling, there is no host process to which to + // forward the signal, so the default behaviour should be restored. + HOST_LOG << "Host returned non-permanent exit code " << exit_code_string + << " at " << base::Time::Now(); + } + + return 0; +} + +bool HostService::Disable() { + return base::DeleteFile(enabled_file_, false); +} + +bool HostService::Enable() { + // Ensure the config file is private whilst being written. + base::DeleteFile(config_file_, false); + if (!WriteStdinToConfig()) { + return false; + } + if (!base::SetPosixFilePermissions(config_file_, 0600)) { + LOG(ERROR) << "Failed to set posix permission"; + return false; + } + + // Ensure the config is readable by the user registering the host. + // We don't seem to have API for adding Mac ACL entry for file. This code just + // uses the chmod binary to do so. + base::CommandLine chmod_cmd(base::FilePath("/bin/chmod")); + chmod_cmd.AppendArg("+a"); + chmod_cmd.AppendArg(GetUsername() + ":allow:read"); + chmod_cmd.AppendArgPath(config_file_); + std::string output; + if (!base::GetAppOutputAndError(chmod_cmd, &output)) { + LOG(ERROR) << "Failed to chmod file " << config_file_; + return false; + } + if (!output.empty()) { + HOST_LOG << "Message from chmod: " << output; + } + + if (base::WriteFile(enabled_file_, nullptr, 0) < 0) { + LOG(ERROR) << "Failed to write enabled file"; + return false; + } + return true; +} + +bool HostService::WriteStdinToConfig() { + // Reads from stdin and writes it to the config file. + std::istreambuf_iterator<char> begin(std::cin); + std::istreambuf_iterator<char> end; + std::string config(begin, end); + if (base::WriteFile(config_file_, config.data(), config.size()) != + static_cast<int>(config.size())) { + LOG(ERROR) << "Failed to write config file"; + return false; + } + return true; +} + +void HostService::PrintHostVersion() { + printf("%s\n", STRINGIZE(VERSION)); +} + +void HostService::PrintPid() { + // Caller running host service with privilege waits for the PID to continue, + // so we need to flush it immediately. + printf("%d\n", base::Process::Current().Pid()); + fflush(stdout); +} + +} // namespace +} // namespace remoting + +int main(int argc, char const* argv[]) { + base::AtExitManager exitManager; + base::CommandLine::Init(argc, argv); + InitHostLogging(); + + HostService service; + auto* current_cmdline = base::CommandLine::ForCurrentProcess(); + std::string pid = base::NumberToString(base::Process::Current().Pid()); + if (current_cmdline->HasSwitch(kSwitchDisable)) { + service.PrintPid(); + if (!service.Disable()) { + LOG(ERROR) << "Failed to disable"; + return 1; + } + } else if (current_cmdline->HasSwitch(kSwitchEnable)) { + service.PrintPid(); + if (!service.Enable()) { + LOG(ERROR) << "Failed to enable"; + return 1; + } + } else if (current_cmdline->HasSwitch(kSwitchSaveConfig)) { + service.PrintPid(); + if (!service.WriteStdinToConfig()) { + LOG(ERROR) << "Failed to save config"; + return 1; + } + } else if (current_cmdline->HasSwitch(kSwitchHostVersion)) { + service.PrintHostVersion(); + } else if (current_cmdline->HasSwitch(kSwitchHostRunFromLaunchd)) { + RegisterSignalHandler(); + HOST_LOG << "Host started for user " << GetUsername() << " at " + << base::Time::Now(); + return service.RunHost(); + } else { + service.PrintPid(); + return 1; + } + return 0; +}
diff --git a/skia/public/mojom/BUILD.gn b/skia/public/mojom/BUILD.gn index 578cc41..3eeb273 100644 --- a/skia/public/mojom/BUILD.gn +++ b/skia/public/mojom/BUILD.gn
@@ -9,6 +9,7 @@ "bitmap.mojom", "blur_image_filter_tile_mode.mojom", "image_info.mojom", + "skcolor.mojom", ] public_deps = [
diff --git a/skia/public/mojom/skcolor.mojom b/skia/public/mojom/skcolor.mojom new file mode 100644 index 0000000..9947645 --- /dev/null +++ b/skia/public/mojom/skcolor.mojom
@@ -0,0 +1,10 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +module skia.mojom; + +// Mirror of SkColor +struct SkColor { + uint32 value; +};
diff --git a/skia/public/mojom/skcolor.typemap b/skia/public/mojom/skcolor.typemap new file mode 100644 index 0000000..8528029 --- /dev/null +++ b/skia/public/mojom/skcolor.typemap
@@ -0,0 +1,11 @@ +# Copyright 2019 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +mojom = "//skia/public/mojom/skcolor.mojom" +public_headers = [ "//third_party/skia/include/core/SkColor.h" ] +traits_headers = [ "//skia/public/mojom/skcolor_mojom_traits.h" ] +sources = [ + "//skia/public/mojom/skcolor_mojom_traits.h", +] +type_mappings = [ "skia.mojom.SkColor=::SkColor" ]
diff --git a/skia/public/mojom/skcolor_mojom_traits.h b/skia/public/mojom/skcolor_mojom_traits.h new file mode 100644 index 0000000..79593522 --- /dev/null +++ b/skia/public/mojom/skcolor_mojom_traits.h
@@ -0,0 +1,24 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef SKIA_PUBLIC_MOJOM_SKCOLOR_MOJOM_TRAITS_H_ +#define SKIA_PUBLIC_MOJOM_SKCOLOR_MOJOM_TRAITS_H_ + +#include "skia/public/mojom/skcolor.mojom.h" +#include "third_party/skia/include/core/SkColor.h" + +namespace mojo { + +template <> +struct StructTraits<skia::mojom::SkColorDataView, ::SkColor> { + static uint32_t value(::SkColor color) { return color; } + static bool Read(skia::mojom::SkColorDataView data, ::SkColor* color) { + *color = data.value(); + return true; + } +}; + +} // namespace mojo + +#endif // SKIA_PUBLIC_MOJOM_SKCOLOR_MOJOM_TRAITS_H_
diff --git a/skia/public/mojom/typemaps.gni b/skia/public/mojom/typemaps.gni index 1fdd6bc..ca48cec5 100644 --- a/skia/public/mojom/typemaps.gni +++ b/skia/public/mojom/typemaps.gni
@@ -5,5 +5,6 @@ typemaps = [ "//skia/public/mojom/blur_image_filter_tile_mode.typemap", "//skia/public/mojom/skbitmap.typemap", + "//skia/public/mojom/skcolor.typemap", "//skia/public/mojom/skimageinfo.typemap", ]
diff --git a/third_party/blink/public/mojom/clipboard/clipboard.mojom b/third_party/blink/public/mojom/clipboard/clipboard.mojom index f7064c8..a1f0d0f2 100644 --- a/third_party/blink/public/mojom/clipboard/clipboard.mojom +++ b/third_party/blink/public/mojom/clipboard/clipboard.mojom
@@ -5,6 +5,7 @@ module blink.mojom; import "mojo/public/mojom/base/string16.mojom"; +import "mojo/public/mojom/base/big_buffer.mojom"; import "skia/public/mojom/bitmap.mojom"; import "url/mojom/url.mojom"; @@ -65,7 +66,11 @@ WriteSmartPasteMarker(); + // Chrome-specific pickled data. WriteCustomData(map<mojo_base.mojom.String16, mojo_base.mojom.BigString16> data); + // Arbitrary unsanitized data from renderer. + // NOTE: This has no callers, but will with Raw Clipboard Access. + WriteRawData(mojo_base.mojom.String16 format, mojo_base.mojom.BigBuffer data); // TODO(dcheng): The |url| parameter should really be a GURL, but <canvas>'s // copy as image tries to set very long data: URLs on the clipboard. Using
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom index f264c70e..29011b6 100644 --- a/third_party/blink/public/mojom/frame/frame.mojom +++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -20,4 +20,10 @@ GetTextSurroundingSelection(uint32 max_length) => (mojo_base.mojom.String16 content, uint32 start_offset, uint32 end_offset); + + // Creates an intervention report in the frame with contents |id| and + // |message|, returns once the report has been queued. |id| identifies the + // intervention that occurred. |message| is a human-readable string that + // can provide additional context to the cause of the intervention. + SendInterventionReport(string id, string message); };
diff --git a/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h b/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h index 65e08f1..0fb7d9c 100644 --- a/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h +++ b/third_party/blink/public/platform/scheduler/test/web_fake_thread_scheduler.h
@@ -56,9 +56,6 @@ void SetTopLevelBlameContext( base::trace_event::BlameContext* blame_context) override; void SetRendererProcessType(WebRendererProcessType type) override; - WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( - const char* name, - WebScopedVirtualTimePauser::VirtualTaskDuration duration) override; void OnMainFrameRequestedForInput() override; private:
diff --git a/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h b/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h index 5432871..442fe29 100644 --- a/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h +++ b/third_party/blink/public/platform/scheduler/test/web_mock_thread_scheduler.h
@@ -64,10 +64,6 @@ MOCK_METHOD0(VirtualTimeResumed, void()); MOCK_METHOD1(SetTopLevelBlameContext, void(base::trace_event::BlameContext*)); MOCK_METHOD1(SetRendererProcessType, void(WebRendererProcessType)); - MOCK_METHOD2(CreateWebScopedVirtualTimePauser, - WebScopedVirtualTimePauser( - const char* name, - WebScopedVirtualTimePauser::VirtualTaskDuration)); MOCK_METHOD0(OnMainFrameRequestedForInput, void()); private:
diff --git a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h index 041bf8d9..c2e979a 100644 --- a/third_party/blink/public/platform/scheduler/web_thread_scheduler.h +++ b/third_party/blink/public/platform/scheduler/web_thread_scheduler.h
@@ -14,7 +14,6 @@ #include "build/build_config.h" #include "third_party/blink/public/platform/scheduler/web_rail_mode_observer.h" #include "third_party/blink/public/platform/scheduler/web_render_widget_scheduling_state.h" -#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h" #include "third_party/blink/public/platform/web_common.h" #include "third_party/blink/public/platform/web_input_event.h" #include "third_party/blink/public/platform/web_input_event_result.h" @@ -235,17 +234,6 @@ // once. virtual void SetRendererProcessType(WebRendererProcessType type); - // Returns a WebScopedVirtualTimePauser which can be used to vote for pausing - // virtual time. Virtual time will be paused if any WebScopedVirtualTimePauser - // votes to pause it, and only unpaused only if all - // WebScopedVirtualTimePausers are either destroyed or vote to unpause. Note - // the WebScopedVirtualTimePauser returned by this method is initially - // unpaused. - virtual WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( - const char* name, - WebScopedVirtualTimePauser::VirtualTaskDuration duration = - WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant); - protected: WebThreadScheduler() = default; DISALLOW_COPY_AND_ASSIGN(WebThreadScheduler);
diff --git a/third_party/blink/renderer/core/frame/frame_impl.cc b/third_party/blink/renderer/core/frame/frame_impl.cc index ae4d25d..50d773f 100644 --- a/third_party/blink/renderer/core/frame/frame_impl.cc +++ b/third_party/blink/renderer/core/frame/frame_impl.cc
@@ -8,6 +8,7 @@ #include "third_party/blink/public/platform/task_type.h" #include "third_party/blink/renderer/core/editing/surrounding_text.h" +#include "third_party/blink/renderer/core/frame/intervention.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/wtf/functional.h" @@ -65,4 +66,9 @@ surrounding_text.EndOffsetInTextContent()); } +void FrameImpl::SendInterventionReport(const String& id, + const String& message) { + Intervention::GenerateReport(GetSupplementable(), id, message); +} + } // namespace blink
diff --git a/third_party/blink/renderer/core/frame/frame_impl.h b/third_party/blink/renderer/core/frame/frame_impl.h index 47e0b18..8b8ab63 100644 --- a/third_party/blink/renderer/core/frame/frame_impl.h +++ b/third_party/blink/renderer/core/frame/frame_impl.h
@@ -41,6 +41,8 @@ uint32_t max_length, GetTextSurroundingSelectionCallback callback) final; + void SendInterventionReport(const String& id, const String& message) final; + private: mojo::AssociatedReceiver<mojom::blink::Frame> receiver_{this};
diff --git a/third_party/blink/renderer/core/frame/history.cc b/third_party/blink/renderer/core/frame/history.cc index 0eef974..36b9bb36 100644 --- a/third_party/blink/renderer/core/frame/history.cc +++ b/third_party/blink/renderer/core/frame/history.cc
@@ -195,6 +195,8 @@ return; if (delta) { + if (Page* page = GetFrame()->GetPage()) + page->HistoryNavigationVirtualTimePauser().PauseVirtualTime(); GetFrame()->Client()->NavigateBackForward(delta); } else { // We intentionally call reload() for the current frame if delta is zero.
diff --git a/third_party/blink/renderer/core/html/html_progress_element.cc b/third_party/blink/renderer/core/html/html_progress_element.cc index 99d1410b..7847ce9 100644 --- a/third_party/blink/renderer/core/html/html_progress_element.cc +++ b/third_party/blink/renderer/core/html/html_progress_element.cc
@@ -56,7 +56,7 @@ } UseCounter::Count(GetDocument(), WebFeature::kProgressElementWithProgressBarAppearance); - return LayoutObjectFactory::CreateLayoutProgress(this, style, legacy); + return LayoutObjectFactory::CreateProgress(this, style, legacy); } LayoutProgress* HTMLProgressElement::GetLayoutProgress() const {
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.cc b/third_party/blink/renderer/core/layout/layout_object_factory.cc index bc47670..c23306d 100644 --- a/third_party/blink/renderer/core/layout/layout_object_factory.cc +++ b/third_party/blink/renderer/core/layout/layout_object_factory.cc
@@ -147,10 +147,9 @@ return layout_text_fragment; } -LayoutProgress* LayoutObjectFactory::CreateLayoutProgress( - Node* node, - const ComputedStyle& style, - LegacyLayout legacy) { +LayoutProgress* LayoutObjectFactory::CreateProgress(Node* node, + const ComputedStyle& style, + LegacyLayout legacy) { return CreateObject<LayoutProgress, LayoutNGProgress>(*node, style, legacy); }
diff --git a/third_party/blink/renderer/core/layout/layout_object_factory.h b/third_party/blink/renderer/core/layout/layout_object_factory.h index 9425007..3fbd47b 100644 --- a/third_party/blink/renderer/core/layout/layout_object_factory.h +++ b/third_party/blink/renderer/core/layout/layout_object_factory.h
@@ -56,9 +56,9 @@ int start_offset, int length, LegacyLayout); - static LayoutProgress* CreateLayoutProgress(Node* node, - const ComputedStyle& style, - LegacyLayout legacy); + static LayoutProgress* CreateProgress(Node* node, + const ComputedStyle& style, + LegacyLayout legacy); }; } // namespace blink
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc index 138f90f..433f6e0 100644 --- a/third_party/blink/renderer/core/loader/frame_loader.cc +++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -1109,6 +1109,10 @@ DocumentLoader::LoadTypeToCommitType(document_loader_->LoadType()), document_loader_->GetGlobalObjectReusePolicy()); } + if (document_loader_->LoadType() == WebFrameLoadType::kBackForward) { + if (Page* page = frame_->GetPage()) + page->HistoryNavigationVirtualTimePauser().UnpauseVirtualTime(); + } // Load the document if needed. document_loader_->StartLoadingResponse();
diff --git a/third_party/blink/renderer/core/page/page.cc b/third_party/blink/renderer/core/page/page.cc index 2f7939fb..80128c91 100644 --- a/third_party/blink/renderer/core/page/page.cc +++ b/third_party/blink/renderer/core/page/page.cc
@@ -902,6 +902,10 @@ page_scheduler_ = std::move(page_scheduler); // The scheduler should be set before the main frame. DCHECK(!main_frame_); + history_navigation_virtual_time_pauser_ = + page_scheduler_->CreateWebScopedVirtualTimePauser( + "HistoryNavigation", + WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant); } bool Page::IsOrdinary() const {
diff --git a/third_party/blink/renderer/core/page/page.h b/third_party/blink/renderer/core/page/page.h index e4a4c367..e2106445 100644 --- a/third_party/blink/renderer/core/page/page.h +++ b/third_party/blink/renderer/core/page/page.h
@@ -26,6 +26,7 @@ #include <memory> #include "base/macros.h" +#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h" #include "third_party/blink/public/platform/web_text_autosizer_page_info.h" #include "third_party/blink/public/web/web_window_features.h" #include "third_party/blink/renderer/core/core_export.h" @@ -335,6 +336,10 @@ } void ClearMediaFeatureOverrides(); + WebScopedVirtualTimePauser& HistoryNavigationVirtualTimePauser() { + return history_navigation_virtual_time_pauser_; + } + private: friend class ScopedPagePauser; @@ -445,6 +450,8 @@ WebTextAutosizerPageInfo web_text_autosizer_page_info_; + WebScopedVirtualTimePauser history_navigation_virtual_time_pauser_; + DISALLOW_COPY_AND_ASSIGN(Page); };
diff --git a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc index 3808d616..2f0f3aa 100644 --- a/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc +++ b/third_party/blink/renderer/core/paint/compositing/graphics_layer_tree_as_text.cc
@@ -24,14 +24,6 @@ return ts.Release(); } -FloatPoint ScrollPosition(const GraphicsLayer& layer) { - if (const auto* scrollable_area = - layer.Client().GetScrollableAreaForTesting(&layer)) { - return scrollable_area->ScrollPosition(); - } - return FloatPoint(); -} - std::unique_ptr<JSONObject> GraphicsLayerAsJSON( const GraphicsLayer* layer, LayerTreeFlags flags, @@ -80,10 +72,6 @@ Color(layer->BackgroundColor()).NameForLayoutTreeAsText()); } - FloatPoint scroll_position(ScrollPosition(*layer)); - if (scroll_position != FloatPoint()) - json->SetArray("scrollPosition", PointAsJSONArray(scroll_position)); - if ((flags & kLayerTreeIncludesPaintInvalidations) && layer->Client().IsTrackingRasterInvalidations() && layer->GetRasterInvalidationTracking()) { @@ -222,6 +210,7 @@ } transforms_json_->PushObject(std::move(transform_json)); + transform_id_map_.Set(&transform, id); return id; }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc index 8230ad6..5f70df08 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -288,9 +288,8 @@ // Only create scroll hit test data for objects that scroll. const auto* layer = PhysicalFragment().Layer(); if (!layer || !layer->GetScrollableArea() || - !layer->GetScrollableArea()->ScrollsOverflow()) { + !layer->GetScrollableArea()->ScrollsOverflow()) return; - } // TODO(pdr): Break dependency on LayoutObject functionality. const LayoutObject& layout_object = *box_fragment_.GetLayoutObject(); @@ -343,8 +342,10 @@ return; } - if (paint_phase == PaintPhase::kMask && is_visible) - return PaintMask(paint_info, paint_offset); + if (paint_phase == PaintPhase::kMask && is_visible) { + PaintMask(paint_info, paint_offset); + return; + } if (paint_phase == PaintPhase::kForeground && paint_info.ShouldAddUrlMetadata()) { @@ -379,15 +380,13 @@ PaintFloats(paint_info); } } else { - if (paint_phase != PaintPhase::kFloat) { + if (paint_phase != PaintPhase::kFloat) PaintBlockChildren(paint_info); - } if (paint_phase == PaintPhase::kFloat || paint_phase == PaintPhase::kSelection || - paint_phase == PaintPhase::kTextClip) { + paint_phase == PaintPhase::kTextClip) PaintFloats(paint_info); - } } } @@ -525,9 +524,8 @@ continue; } if (const auto* child_container = - DynamicTo<NGPhysicalContainerFragment>(&child_fragment)) { + DynamicTo<NGPhysicalContainerFragment>(&child_fragment)) PaintBlockFloatingChildren(*child_container, paint_info); - } } } @@ -1175,8 +1173,7 @@ const NGPhysicalBoxFragment& fragment = PhysicalFragment(); if (!fragment.IsInlineBox()) { return paint_state.LocalRectIntersectsCullRect( - ToLayoutBox(fragment.GetLayoutObject()) - ->PhysicalSelfVisualOverflowRect()); + ToLayoutBox(fragment.GetLayoutObject())->PhysicalVisualOverflowRect()); } NOTREACHED(); return false;
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.cc b/third_party/blink/renderer/modules/webgpu/gpu_device.cc index b4acf0e..1604383f 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_device.cc +++ b/third_party/blink/renderer/modules/webgpu/gpu_device.cc
@@ -232,8 +232,7 @@ AsDawnEnum<DawnErrorFilter>(filter)); } -ScriptPromise GPUDevice::popErrorScope(ScriptState* script_state, - ExceptionState& exception_state) { +ScriptPromise GPUDevice::popErrorScope(ScriptState* script_state) { ScriptPromiseResolver* resolver = MakeGarbageCollected<ScriptPromiseResolver>(script_state); ScriptPromise promise = resolver->Promise(); @@ -244,9 +243,10 @@ if (!GetProcs().devicePopErrorScope(GetHandle(), callback->UnboundCallback(), callback->AsUserdata())) { - exception_state.ThrowDOMException(DOMExceptionCode::kOperationError, - "No error scopes to pop."); + resolver->Reject(MakeGarbageCollected<DOMException>( + DOMExceptionCode::kOperationError, "No error scopes to pop.")); delete callback; + return promise; } // WebGPU guarantees callbacks complete in finite time. Flush now so that
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.h b/third_party/blink/renderer/modules/webgpu/gpu_device.h index 93bf6b9..1f17269 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_device.h +++ b/third_party/blink/renderer/modules/webgpu/gpu_device.h
@@ -104,8 +104,7 @@ GPUQueue* getQueue(); void pushErrorScope(const WTF::String& filter); - ScriptPromise popErrorScope(ScriptState* script_state, - ExceptionState& exception_state); + ScriptPromise popErrorScope(ScriptState* script_state); DEFINE_ATTRIBUTE_EVENT_LISTENER(uncapturederror, kUncapturederror)
diff --git a/third_party/blink/renderer/modules/webgpu/gpu_device.idl b/third_party/blink/renderer/modules/webgpu/gpu_device.idl index 1b9ec8b..56e9b38 100644 --- a/third_party/blink/renderer/modules/webgpu/gpu_device.idl +++ b/third_party/blink/renderer/modules/webgpu/gpu_device.idl
@@ -29,7 +29,7 @@ GPUQueue getQueue(); void pushErrorScope(GPUErrorFilter filter); - [CallWith=ScriptState, RaisesException] Promise<GPUError?> popErrorScope(); + [CallWith=ScriptState] Promise<GPUError?> popErrorScope(); attribute EventHandler onuncapturederror; };
diff --git a/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc b/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc index ce590849..4633243e 100644 --- a/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc +++ b/third_party/blink/renderer/platform/scheduler/common/dummy_schedulers.cc
@@ -121,6 +121,11 @@ return false; } bool RequestBeginMainFrameNotExpected(bool) override { return false; } + WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( + const String& name, + WebScopedVirtualTimePauser::VirtualTaskDuration) override { + return WebScopedVirtualTimePauser(); + } private: DISALLOW_COPY_AND_ASSIGN(DummyPageScheduler);
diff --git a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc index 74e6c82b..ac27cae 100644 --- a/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/common/web_thread_scheduler.cc
@@ -200,13 +200,6 @@ NOTREACHED(); } -WebScopedVirtualTimePauser WebThreadScheduler::CreateWebScopedVirtualTimePauser( - const char* name, - WebScopedVirtualTimePauser::VirtualTaskDuration duration) { - NOTREACHED(); - return WebScopedVirtualTimePauser(); -} - void WebThreadScheduler::OnMainFrameRequestedForInput() { NOTREACHED(); }
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc index f7641b6..8cf68e5 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
@@ -2314,14 +2314,6 @@ main_thread_only().process_type = type; } -WebScopedVirtualTimePauser -MainThreadSchedulerImpl::CreateWebScopedVirtualTimePauser( - const char* name, - WebScopedVirtualTimePauser::VirtualTaskDuration duration) { - return WebScopedVirtualTimePauser(this, duration, - WebString(WTF::String(name))); -} - PendingUserInputInfo MainThreadSchedulerImpl::GetPendingUserInputInfo() const { base::AutoLock lock(any_thread_lock_); return any_thread().pending_input_monitor.Info();
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h index 2748d22..3e33b90 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h +++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
@@ -215,9 +215,6 @@ void AddRAILModeObserver(RAILModeObserver* observer) override; void RemoveRAILModeObserver(RAILModeObserver const* observer) override; void SetRendererProcessType(WebRendererProcessType type) override; - WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( - const char* name, - WebScopedVirtualTimePauser::VirtualTaskDuration duration) override; PendingUserInputInfo GetPendingUserInputInfo() const override; bool IsBeginMainFrameScheduled() const override;
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc index ae46068..afd86e3 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl_unittest.cc
@@ -3213,9 +3213,9 @@ scheduler_->SetVirtualTimePolicy( PageSchedulerImpl::VirtualTimePolicy::kDeterministicLoading); - WebScopedVirtualTimePauser pauser = - scheduler_->CreateWebScopedVirtualTimePauser( - "test", WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant); + WebScopedVirtualTimePauser pauser( + scheduler_.get(), + WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant, "test"); base::TimeTicks before = scheduler_->GetVirtualTimeDomain()->Now(); EXPECT_TRUE(scheduler_->VirtualTimeAllowedToAdvance()); @@ -3234,9 +3234,9 @@ scheduler_->SetVirtualTimePolicy( PageSchedulerImpl::VirtualTimePolicy::kDeterministicLoading); - WebScopedVirtualTimePauser pauser = - scheduler_->CreateWebScopedVirtualTimePauser( - "test", WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant); + WebScopedVirtualTimePauser pauser( + scheduler_.get(), + WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant, "test"); base::TimeTicks before = scheduler_->GetVirtualTimeDomain()->Now(); pauser.PauseVirtualTime(); @@ -3254,9 +3254,9 @@ scheduler_->SetVirtualTimePolicy( PageSchedulerImpl::VirtualTimePolicy::kDeterministicLoading); - WebScopedVirtualTimePauser pauser = - scheduler_->CreateWebScopedVirtualTimePauser( - "test", WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant); + WebScopedVirtualTimePauser pauser( + scheduler_.get(), + WebScopedVirtualTimePauser::VirtualTaskDuration::kNonInstant, "test"); // Test will pass if the queue without virtual is the last one in the // iteration order. Create 100 of them and ensure that it is created in the
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc index 1779e61..c565d53 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc +++ b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.cc
@@ -768,6 +768,12 @@ return nullptr; } +WebScopedVirtualTimePauser PageSchedulerImpl::CreateWebScopedVirtualTimePauser( + const String& name, + WebScopedVirtualTimePauser::VirtualTaskDuration duration) { + return WebScopedVirtualTimePauser(main_thread_scheduler_, duration, name); +} + // static const char PageSchedulerImpl::kHistogramPageLifecycleStateTransition[] = "PageScheduler.PageLifecycleStateTransition";
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h index 4de806f0..e1370f47 100644 --- a/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h +++ b/third_party/blink/renderer/platform/scheduler/main_thread/page_scheduler_impl.h
@@ -77,6 +77,9 @@ bool IsExemptFromBudgetBasedThrottling() const override; bool OptedOutFromAggressiveThrottlingForTest() const override; bool RequestBeginMainFrameNotExpected(bool new_state) override; + WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( + const WTF::String& name, + WebScopedVirtualTimePauser::VirtualTaskDuration) override; // Virtual for testing. virtual void ReportIntervention(const String& message);
diff --git a/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h b/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h index 43e6e76..3d7dde32 100644 --- a/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/public/page_scheduler.h
@@ -7,6 +7,7 @@ #include <memory> #include "third_party/blink/public/platform/blame_context.h" +#include "third_party/blink/public/platform/scheduler/web_scoped_virtual_time_pauser.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/blink/renderer/platform/scheduler/public/frame_scheduler.h" #include "third_party/blink/renderer/platform/scheduler/public/page_lifecycle_state.h" @@ -140,6 +141,16 @@ // Returns true if the request has been succcessfully relayed to the // compositor. virtual bool RequestBeginMainFrameNotExpected(bool new_state) = 0; + + // Returns a WebScopedVirtualTimePauser which can be used to vote for pausing + // virtual time. Virtual time will be paused if any WebScopedVirtualTimePauser + // votes to pause it, and only unpaused only if all + // WebScopedVirtualTimePausers are either destroyed or vote to unpause. Note + // the WebScopedVirtualTimePauser returned by this method is initially + // unpaused. + virtual WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( + const String& name, + WebScopedVirtualTimePauser::VirtualTaskDuration) = 0; }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h b/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h index a089527..904f54f2 100644 --- a/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h +++ b/third_party/blink/renderer/platform/scheduler/test/fake_page_scheduler.h
@@ -78,6 +78,11 @@ bool RequestBeginMainFrameNotExpected(bool new_state) override { return false; } + WebScopedVirtualTimePauser CreateWebScopedVirtualTimePauser( + const String& name, + WebScopedVirtualTimePauser::VirtualTaskDuration) override { + return WebScopedVirtualTimePauser(); + } private: bool is_audio_playing_;
diff --git a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc index 17766c3..1cc6384 100644 --- a/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc +++ b/third_party/blink/renderer/platform/scheduler/test/web_fake_thread_scheduler.cc
@@ -9,7 +9,6 @@ #include "base/threading/thread_task_runner_handle.h" #include "build/build_config.h" #include "third_party/blink/renderer/platform/scheduler/public/thread.h" -#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" namespace blink { namespace scheduler { @@ -106,13 +105,5 @@ void WebFakeThreadScheduler::OnMainFrameRequestedForInput() {} -WebScopedVirtualTimePauser -WebFakeThreadScheduler::CreateWebScopedVirtualTimePauser( - const char* name, - WebScopedVirtualTimePauser::VirtualTaskDuration duration) { - return WebScopedVirtualTimePauser(nullptr, duration, - WebString(WTF::String(name))); -} - } // namespace scheduler } // namespace blink
diff --git a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py index 2c9f902..9929e121 100644 --- a/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py +++ b/third_party/blink/tools/blinkpy/web_tests/controllers/single_test_runner.py
@@ -538,19 +538,6 @@ _log.warning( ' %s -> pixel hash failed (but diff passed)', self._test_name) - if err_str: - _log.error(err_str) - driver_output.error = (driver_output.error or '') + err_str - - if diff or err_str: - return [ - test_failures.FailureImageHashMismatch( - driver_output, expected_driver_output)] - else: - # See https://bugs.webkit.org/show_bug.cgi?id=69444 for why this - # isn't a full failure. - _log.warning( - ' %s -> pixel hash failed (but diff passed)', self._test_name) return [] def _run_reftest(self):
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 42fa21e..30ec35ef 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -2682,11 +2682,11 @@ # Subgrid is not implemented yet crbug.com/618969 external/wpt/css/css-grid/subgrid/ [ Skip ] -crbug.com/1012600 virtual/threaded/external/wpt/css/css-animations/animation-opacity-pause-and-set-time.html [ Failure Pass ] crbug.com/1012627 [ Win7 ] external/wpt/css/css-text/line-breaking/line-breaking-021.html [ Failure ] # ====== New tests from wpt-importer added here ====== crbug.com/626703 [ Win10 ] virtual/omt-worker-fetch/external/wpt/service-workers/service-worker/update-bytecheck.https.html [ Timeout ] +crbug.com/626703 [ Retina ] virtual/threaded/external/wpt/css/css-animations/animation-opacity-pause-and-set-time.html [ Failure ] crbug.com/626703 [ Mac ] external/wpt/html/rendering/non-replaced-elements/form-controls/select-sizing-001.html [ Failure ] crbug.com/626703 [ Linux ] external/wpt/css/css-align/baseline-rules/grid-item-input-type-number.html [ Failure ] crbug.com/626703 [ Mac ] external/wpt/css/css-align/baseline-rules/grid-item-input-type-number.html [ Failure ]
diff --git a/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt b/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt index b20f969..e49f564 100644 --- a/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt +++ b/third_party/blink/web_tests/compositing/absolute-inside-out-of-view-fixed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2513], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt index 6bd6b84..cdec5f9 100644 --- a/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt +++ b/third_party/blink/web_tests/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='software')", "position": [-105, -105], "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [105, 105, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [105, 105, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt b/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt index 64b93eb..58ee645 100644 --- a/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt +++ b/third_party/blink/web_tests/compositing/fixed-body-background-positioned-expected.txt
@@ -24,7 +24,6 @@ "name": "Scrolling Contents Layer", "bounds": [785, 3700], "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt index c1922bd..6f79804 100644 --- a/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt +++ b/third_party/blink/web_tests/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='layer-A')", "position": [12, 7], "bounds": [226, 180], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [8, 13, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 13, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt index fa70382..9d84137 100644 --- a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt +++ b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [508, 516], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [135, 135], "bounds": [15, 15], - "transform": 5 + "transform": 2 } ], "transforms": [ @@ -35,35 +35,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt index 71566a6..8e99de8 100644 --- a/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt +++ b/third_party/blink/web_tests/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [508, 516], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [135, 135], "bounds": [15, 15], - "transform": 5 + "transform": 2 } ], "transforms": [ @@ -35,35 +35,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt index 4e6ddce..f305076 100644 --- a/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt +++ b/third_party/blink/web_tests/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -19,14 +19,14 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow PRE id='layers')", "position": [0, -250], "bounds": [792, 100], - "transform": 2 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='indicator box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -47,15 +47,6 @@ [0, 0, 1, 0], [0, 250, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 250, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt b/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt index 45ed822..97d88524 100644 --- a/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/become-composited-nested-iframes-expected.txt
@@ -14,53 +14,53 @@ { "name": "LayoutView #document", "bounds": [280, 200], - "transform": 3 + "transform": 2 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 6 + "transform": 3 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 8 + "transform": 4 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 11 + "transform": 5 }, { "name": "LayoutIFrame IFRAME", "bounds": [284, 204], - "transform": 12 + "transform": 6 }, { "name": "LayoutView #document", "bounds": [280, 200], - "transform": 14 + "transform": 7 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 17 + "transform": 8 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 19 + "transform": 9 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 22 + "transform": 10 }, { "name": "LayoutNGBlockFlow DIV id='box' class='composited'", @@ -81,11 +81,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 120, 0, 1] + [2, 2, 0, 1] ] }, { @@ -95,16 +96,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [8, 8, 0, 1] ] }, { "id": 4, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 120, 0, 1] + [1, 1, 0, 1] ] }, { @@ -114,27 +116,26 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [18, 10, 0, 1] ] }, { "id": 6, - "parent": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [20, 344, 0, 1] ] }, { "id": 7, - "parent": 5, + "parent": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [2, 2, 0, 1] ] }, { @@ -144,17 +145,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [1, 1, 0, 1] + [8, 8, 0, 1] ] }, { "id": 9, - "parent": 5, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [1, 1, 0, 1] ] }, { @@ -164,123 +165,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 11, - "parent": 10, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 10, 0, 1] - ] - }, - { - "id": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 344, 0, 1] - ] - }, - { - "id": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 344, 0, 1] - ] - }, - { - "id": 14, - "parent": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 15, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 344, 0, 1] - ] - }, - { - "id": 16, - "parent": 15, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 17, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 18, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 19, - "parent": 18, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 20, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 21, - "parent": 20, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 22, - "parent": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }
diff --git a/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt index cec23a30..a4ffe973 100644 --- a/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -15,20 +15,20 @@ "name": "Scrolling Contents Layer", "bounds": [305, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='overlay'", "bounds": [150, 150], "backgroundColor": "#00000099", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -43,11 +43,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [58, 58, 0, 1] + [15, 15, 0, 1] ] }, { @@ -57,21 +58,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt index f6cc8b0e..69bc9767c 100644 --- a/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -18,21 +18,21 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow DIV id='box' class='composited'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -47,11 +47,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 128, 0, 1] + [15, 15, 0, 1] ] }, { @@ -61,21 +62,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt index f6704047..48e1275 100644 --- a/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -16,20 +16,20 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow DIV id='test' class='composited box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -44,11 +44,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -58,21 +59,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt b/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt index 841a2b8..d713991 100644 --- a/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/iframe-resize-expected.txt
@@ -16,20 +16,20 @@ "name": "Scrolling Contents Layer", "bounds": [385, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -44,11 +44,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -58,21 +59,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt index 2a0301b..4595f03 100644 --- a/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -15,20 +15,20 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -43,11 +43,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -57,21 +58,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt index 5f70417..b3692c4 100644 --- a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-expected.txt
@@ -16,20 +16,20 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -44,11 +44,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -58,21 +59,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt index a40983f..fbbb077 100644 --- a/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/overlapped-iframe-iframe-expected.txt
@@ -21,12 +21,12 @@ "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 3 + "transform": 2 }, { "name": "LayoutIFrame (positioned) IFRAME id='overlap'", "bounds": [304, 304], - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -41,16 +41,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -59,7 +50,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt index 6eb84e0..4d79b07 100644 --- a/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -5,64 +5,63 @@ "bounds": [785, 1650], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, { "name": "LayoutIFrame IFRAME", "bounds": [284, 204], - "transform": 3 + "transform": 2 }, { "name": "LayoutView #document", "bounds": [280, 200], + "transform": 3 + }, + { + "name": "LayoutIFrame IFRAME", + "bounds": [252, 172], + "transform": 4 + }, + { + "name": "LayoutView #document", + "bounds": [250, 170], + "backgroundColor": "#C0C0C0", + "transform": 5 + }, + { + "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", + "bounds": [210, 210], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 6 }, { "name": "LayoutIFrame IFRAME", - "bounds": [252, 172], - "transform": 10 - }, - { - "name": "LayoutView #document", - "bounds": [250, 170], - "backgroundColor": "#C0C0C0", - "transform": 12 - }, - { - "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", - "bounds": [210, 210], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 15 - }, - { - "name": "LayoutIFrame IFRAME", "bounds": [284, 204], - "transform": 17 + "transform": 7 }, { "name": "LayoutView #document", "bounds": [280, 200], - "transform": 20 + "transform": 8 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 24 + "transform": 9 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 26 + "transform": 10 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 29 + "transform": 11 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='banner'", @@ -82,11 +81,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [20, 150, 0, 1] ] }, { @@ -96,16 +96,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 150, 0, 1] + [2, 2, 0, 1] ] }, { "id": 4, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [8, 8, 0, 1] ] }, { @@ -115,7 +116,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 150, 0, 1] + [1, 1, 0, 1] ] }, { @@ -125,16 +126,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [18, 10, 0, 1] ] }, { "id": 7, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [20, 374, 0, 1] ] }, { @@ -144,7 +146,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 150, 0, 1] + [2, 2, 0, 1] ] }, { @@ -154,7 +156,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [8, 8, 0, 1] ] }, { @@ -164,189 +166,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [1, 1, 0, 1] ] }, { "id": 11, - "parent": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 12, - "parent": 11, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 13, - "parent": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 14, - "parent": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 15, - "parent": 14, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 10, 0, 1] - ] - }, - { - "id": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 17, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 374, 0, 1] - ] - }, - { - "id": 18, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 19, - "parent": 18, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 374, 0, 1] - ] - }, - { - "id": 20, - "parent": 19, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 22, - "parent": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 374, 0, 1] - ] - }, - { - "id": 23, - "parent": 22, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 24, - "parent": 23, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 25, - "parent": 23, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 26, - "parent": 25, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 27, - "parent": 23, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 28, - "parent": 27, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 29, - "parent": 28, + "parent": 10, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt b/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt index e9ee7f1..d03eddd 100644 --- a/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt +++ b/third_party/blink/web_tests/compositing/iframes/scrolling-iframe-expected.txt
@@ -16,27 +16,26 @@ "name": "Scrolling Contents Layer", "bounds": [508, 608], "backgroundColor": "#C0C0C0", - "scrollPosition": [80, 80], - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 5 + "transform": 4 }, { "name": "Scroll Corner Layer", "position": [285, 135], "bounds": [15, 15], - "transform": 7 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 8 + "transform": 5 } ], "transforms": [ @@ -51,11 +50,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -65,7 +65,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] + [-80, -80, 0, 1] ] }, { @@ -75,40 +75,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [-80, -80, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [108, 100, 0, 1] ] }, { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 28, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 8, + "id": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt index 7bc6465..4bad745 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -19,20 +19,20 @@ "bounds": [250, 50], "contentsOpaque": true, "backgroundColor": "#C0C0C0", - "transform": 5 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='test1 box')", "position": [5, 15], "bounds": [100, 100], - "transform": 8 + "transform": 3 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV class='box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 9 + "transform": 4 } ], "transforms": [ @@ -57,64 +57,16 @@ }, { "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [6, 6, 0, 1] ] }, { "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt index 6a6fd31..6116c4d 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-and-transform-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 5021], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt index f729126..98cf1ab9 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
@@ -14,14 +14,14 @@ { "name": "Scrolling Contents Layer", "bounds": [785, 1000], - "transform": 2 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='yellow fixed'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FFFF00", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -40,15 +40,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 13, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [200, 13, 0, 1] ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt index f9d98d7..3a632cad 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -52,7 +52,6 @@ "bounds": [2008, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 10], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt index a24d4f0..d7f82d0 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
@@ -6,7 +6,6 @@ "bounds": [4008, 4016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [100, 100], "transform": 2 }, { @@ -118,7 +117,6 @@ "bounds": [4008, 4016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [100, 100], "transform": 2 }, { @@ -230,7 +228,6 @@ "bounds": [4008, 4016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [100, 100], "transform": 2 }, {
diff --git a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt index 19b03543..7b6ebce 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/fixed-position-under-transform-expected.txt
@@ -5,14 +5,13 @@ "bounds": [785, 5021], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "transform": 1 }, { "name": "LayoutNGBlockFlow DIV id='transform'", "position": [100, 100], "bounds": [256, 256], - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='overlap'", @@ -33,16 +32,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -1000, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -51,8 +41,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt index 415a0eb..03b5128 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overflow-scroll-overlap-expected.txt
@@ -23,7 +23,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box')", "position": [0, 155], "bounds": [210, 100], - "transform": 7 + "transform": 4 } ], "transforms": [ @@ -64,35 +64,6 @@ [0, 0, 1, 0], [23, 58, 0, 1] ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 20, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -49, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [23, 58, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt index 9a2db50..f5b1992 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-clipping-expected.txt
@@ -25,28 +25,28 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 6 + "transform": 5 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='to-animate2' class='box animating2'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", + "transform": 7 + }, + { + "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'", + "bounds": [100, 100], + "contentsOpaque": true, + "backgroundColor": "#FFFF00", + "transform": 8 + }, + { + "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'", + "bounds": [100, 100], + "contentsOpaque": true, + "backgroundColor": "#FFFF00", "transform": 9 - }, - { - "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'", - "bounds": [100, 100], - "contentsOpaque": true, - "backgroundColor": "#FFFF00", - "transform": 11 - }, - { - "name": "LayoutNGBlockFlow (relative positioned) DIV class='box yellow'", - "bounds": [100, 100], - "contentsOpaque": true, - "backgroundColor": "#FFFF00", - "transform": 12 } ], "transforms": [ @@ -80,6 +80,7 @@ }, { "id": 4, + "parent": 3, "transform": [ [...], [...], @@ -99,7 +100,7 @@ }, { "id": 6, - "parent": 5, + "parent": 3, "transform": [ [...], [...], @@ -109,6 +110,7 @@ }, { "id": 7, + "parent": 6, "transform": [ [...], [...], @@ -118,7 +120,7 @@ }, { "id": 8, - "parent": 7, + "parent": 3, "transform": [ [...], [...], @@ -128,35 +130,6 @@ }, { "id": 9, - "parent": 8, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 10, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 11, - "parent": 10, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 12, "transform": [ [...], [...],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt index 0ee5666..43a82e18 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-container-expected.txt
@@ -26,13 +26,13 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 6 + "transform": 5 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box yellow')", "position": [-51, 451], "bounds": [100, 100], - "transform": 8 + "transform": 4 } ], "transforms": [ @@ -66,6 +66,7 @@ }, { "id": 4, + "parent": 3, "transform": [ [...], [...], @@ -82,35 +83,6 @@ [...], [...] ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] } ] } @@ -143,13 +115,13 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 6 + "transform": 5 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='first-green-box' class='box green rotate-45deg')", "position": [-51, 87], "bounds": [174, 464], - "transform": 8 + "transform": 4 } ], "transforms": [ @@ -183,6 +155,7 @@ }, { "id": 4, + "parent": 3, "transform": [ [...], [...], @@ -199,35 +172,6 @@ [...], [...] ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt index a094ea29..9e67b55 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-animation-expected.txt
@@ -16,14 +16,14 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV class='box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 6 + "transform": 4 } ], "transforms": [ @@ -38,6 +38,7 @@ }, { "id": 2, + "parent": 1, "transform": [ [...], [...], @@ -53,31 +54,12 @@ [...], [...], [...] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [...], - [...], - [...], - [...] ], "origin": [50, 50] }, { - "id": 5, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 6, - "parent": 5, + "id": 4, + "parent": 1, "transform": [ [...], [...],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt index 9bb1609..58cb176 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='green')", "position": [-400, 0], "bounds": [300, 300], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [400, 0, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [400, 0, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt index 00003ee0..e8bd8b6 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-clipping-expected.txt
@@ -24,7 +24,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='overlap')", "position": [400, 0], "bounds": [100, 100], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -45,15 +45,6 @@ [0, 0, 1, 0], [50, 200, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 200, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt index b6f950e..9621269 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-3d-expected.txt
@@ -58,7 +58,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top left')", "position": [-100, -100], "bounds": [300, 300], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -81,15 +81,6 @@ [0, 0, -1, 1] ], "origin": [50, 50] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 108, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt index d796fb0..b8d83ba 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
@@ -16,12 +16,12 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 2 + "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='over')", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -33,15 +33,6 @@ [0, 0, 1, 0], [110, 0, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [110, 0, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt index 33171e09..181475f 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
@@ -23,31 +23,31 @@ "name": "LayoutNGBlockFlow (positioned) DIV class='side side-2'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 8 + "transform": 7 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-3'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 11 + "transform": 9 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-4'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 14 + "transform": 11 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-5'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 17 + "transform": 13 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-6'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 20 + "transform": 15 } ], "transforms": [ @@ -104,26 +104,13 @@ }, { "id": 6, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { "id": 7, "parent": 6, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, "transform": [ [0, 0, -1, 0], [0, 1, 0, 0], @@ -135,27 +122,14 @@ "renderingContext": 1 }, { + "id": 8, + "parent": 3, + "flattenInheritedTransform": false, + "renderingContext": 1 + }, + { "id": 9, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 10, - "parent": 9, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 11, - "parent": 10, + "parent": 8, "transform": [ [-1, 0, 0, 0], [0, 1, 0, 0], @@ -167,27 +141,14 @@ "renderingContext": 1 }, { - "id": 12, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 10, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 13, - "parent": 12, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 14, - "parent": 13, + "id": 11, + "parent": 10, "transform": [ [0, 0, 1, 0], [0, 1, 0, 0], @@ -199,27 +160,14 @@ "renderingContext": 1 }, { - "id": 15, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 12, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 16, - "parent": 15, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 17, - "parent": 16, + "id": 13, + "parent": 12, "transform": [ [1, 0, 0, 0], [0, 0, 1, 0], @@ -231,27 +179,14 @@ "renderingContext": 1 }, { - "id": 18, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 14, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 19, - "parent": 18, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 20, - "parent": 19, + "id": 15, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 0, -1, 0], @@ -284,43 +219,43 @@ "name": "LayoutNGBlockFlow (positioned) DIV class='side side-2'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 8 + "transform": 7 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-3'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 11 + "transform": 9 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-4'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 14 + "transform": 11 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-5'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 17 + "transform": 13 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='side side-6'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 20 + "transform": 15 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='box top left'", "bounds": [100, 150], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 21 + "transform": 16 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top right')", "bounds": [300, 300], - "transform": 22 + "transform": 16 } ], "transforms": [ @@ -377,26 +312,13 @@ }, { "id": 6, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { "id": 7, "parent": 6, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, "transform": [ [0, 0, -1, 0], [0, 1, 0, 0], @@ -408,27 +330,14 @@ "renderingContext": 1 }, { + "id": 8, + "parent": 3, + "flattenInheritedTransform": false, + "renderingContext": 1 + }, + { "id": 9, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 10, - "parent": 9, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 11, - "parent": 10, + "parent": 8, "transform": [ [-1, 0, 0, 0], [0, 1, 0, 0], @@ -440,27 +349,14 @@ "renderingContext": 1 }, { - "id": 12, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 10, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 13, - "parent": 12, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 14, - "parent": 13, + "id": 11, + "parent": 10, "transform": [ [0, 0, 1, 0], [0, 1, 0, 0], @@ -472,27 +368,14 @@ "renderingContext": 1 }, { - "id": 15, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 12, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 16, - "parent": 15, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 17, - "parent": 16, + "id": 13, + "parent": 12, "transform": [ [1, 0, 0, 0], [0, 0, 1, 0], @@ -504,27 +387,14 @@ "renderingContext": 1 }, { - "id": 18, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 14, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 19, - "parent": 18, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 20, - "parent": 19, + "id": 15, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 0, -1, 0], @@ -536,16 +406,7 @@ "renderingContext": 1 }, { - "id": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 22, + "id": 16, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt index 1f82171..79387a3 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/overlap-transforms-expected.txt
@@ -16,7 +16,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -31,16 +31,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -49,8 +40,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt index 0860f19..f2d6c9f 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -26,20 +26,20 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box')", "position": [-5, 115], "bounds": [110, 110], - "transform": 4 + "transform": 2 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV class='composited box rotate45'", "position": [-5, -5], "bounds": [110, 110], "backgroundColor": "#0000FF", - "transform": 6 + "transform": 5 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='box')", "position": [-5, 115], "bounds": [110, 110], - "transform": 7 + "transform": 4 } ], "transforms": [ @@ -78,21 +78,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [172, 28, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [316, 28, 0, 1] ] }, { - "id": 6, - "parent": 5, + "id": 5, + "parent": 4, "transform": [ [0.707106781186548, 0.707106781186548, 0, 0], [-0.707106781186548, 0.707106781186548, 0, 0], @@ -100,15 +91,6 @@ [0, 0, 0, 1] ], "origin": [50, 50] - }, - { - "id": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [316, 28, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt index b12766d..dac32d8 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -14,7 +14,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='output')", "bounds": [100, 50], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -26,15 +26,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt index 596b8554..e1be4b3 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -16,7 +16,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='squashed')", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [8, 58, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 58, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt index 7f02d6c..e6697cb 100644 --- a/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt +++ b/third_party/blink/web_tests/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV class='container')", "position": [0, 10], "bounds": [142, 142], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt b/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt index f0465b3..f8b30f8 100644 --- a/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/clip-descendents-expected.txt
@@ -31,20 +31,20 @@ "bounds": [100, 150], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 8 + "transform": 7 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='container'", "position": [20, 10], "bounds": [60, 70], - "transform": 9 + "transform": 8 }, { "name": "LayoutNGBlockFlow DIV class='box'", "bounds": [100, 150], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 12 + "transform": 10 } ], "transforms": [ @@ -97,11 +97,12 @@ }, { "id": 6, + "parent": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 220, 0, 1] + [22, 22, 0, 1] ] }, { @@ -111,40 +112,21 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [22, 22, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [0, 0, 1, 1] ] }, { + "id": 8, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [220, 220, 0, 1] + ] + }, + { "id": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [220, 220, 0, 1] - ] - }, - { - "id": 10, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [220, 220, 0, 1] - ] - }, - { - "id": 11, - "parent": 10, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -153,8 +135,8 @@ ] }, { - "id": 12, - "parent": 11, + "id": 10, + "parent": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt index f0cc730..2c7c1e1 100644 --- a/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -38,7 +38,7 @@ "GraphicsLayerPaintCompositedScroll", "GraphicsLayerPaintDecoration" ], - "transform": 3 + "transform": 1 }, { "name": "Scrolling Contents Layer", @@ -61,7 +61,7 @@ "GraphicsLayerPaintMask", "GraphicsLayerPaintDecoration" ], - "transform": 4 + "transform": 1 } ], "transforms": [ @@ -83,24 +83,6 @@ [0, 0, 1, 0], [1, 11, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 20, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 20, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt index fcc9473..61f5db6 100644 --- a/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -14,12 +14,12 @@ { "name": "LayoutNGBlockFlow DIV id='scroller'", "bounds": [1200, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scrolling Contents Layer", "bounds": [1200, 10000], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -31,15 +31,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt b/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt index b09a1ad..09b8de7 100644 --- a/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/rotate-clip-expected.txt
@@ -16,7 +16,7 @@ "bounds": [400, 400], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 5 + "transform": 3 } ], "transforms": [ @@ -42,27 +42,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [0.707106781186548, 0.707106781186548, 0, 0], - [-0.707106781186548, 0.707106781186548, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ], - "origin": [120, 120] - }, - { - "id": 5, - "parent": 4, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt index cb50b2b..f4ab0315 100644 --- a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-effect-interleave-expected.txt
@@ -23,14 +23,14 @@ "bounds": [400, 100], "contentsOpaque": true, "backgroundColor": "#00FFFF", - "transform": 6 + "transform": 4 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV", "bounds": [100, 400], "contentsOpaque": true, "backgroundColor": "#FF00FF", - "transform": 7 + "transform": 5 } ], "transforms": [ @@ -66,27 +66,7 @@ }, { "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [0.707106781186548, 0.707106781186548, 0, 0], - [-0.707106781186548, 0.707106781186548, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ], - "origin": [120, 120] - }, - { - "id": 6, - "parent": 5, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -95,7 +75,7 @@ ] }, { - "id": 7, + "id": 5, "parent": 2, "transform": [ [1, 0, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt index 06963f0b..068676d 100644 --- a/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/rotate-then-clip-z-order-interleave-expected.txt
@@ -18,14 +18,14 @@ "bounds": [200, 22], "contentsOpaque": true, "backgroundColor": "#FFFF00", - "transform": 4 + "transform": 2 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV", "bounds": [50, 200], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 6 + "transform": 2 } ], "transforms": [ @@ -48,46 +48,6 @@ [0, 0, 0, 1] ], "origin": [150, 50] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [0.707106781186548, 0.707106781186548, 0, 0], - [-0.707106781186548, 0.707106781186548, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ], - "origin": [150, 50] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [0.707106781186548, 0.707106781186548, 0, 0], - [-0.707106781186548, 0.707106781186548, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ], - "origin": [150, 50] } ] }
diff --git a/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt index c612a2c..1e08ad8 100644 --- a/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -40,7 +40,7 @@ "position": [0, 44], "bounds": [60, 128], "backfaceVisibility": "hidden", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -71,16 +71,6 @@ [0, 0, 1, 0], [5, 5, 0, 1] ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [5, 5, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt index 1334485..77c1859d 100644 --- a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-expected.txt
@@ -24,94 +24,94 @@ "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='outer B'", "position": [-21, -21], "bounds": [352, 294], - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow DIV class='scroller'", "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 5 + "transform": 4 }, { "name": "Scrolling Contents Layer", "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 6 + "transform": 4 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV class='content'", "bounds": [196, 212], "contentsOpaque": true, "backgroundColor": "#DDDDDD", - "transform": 7 + "transform": 5 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='outer C'", "position": [-21, -21], "bounds": [352, 294], - "transform": 8 + "transform": 6 }, { "name": "LayoutNGBlockFlow DIV class='scroller'", "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 9 + "transform": 7 }, { "name": "Scrolling Contents Layer", "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 10 + "transform": 7 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV class='content'", "bounds": [196, 212], "contentsOpaque": true, "backgroundColor": "#DDDDDD", - "transform": 11 + "transform": 8 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='outer D'", "position": [-21, -21], "bounds": [352, 294], - "transform": 12 + "transform": 9 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV class='clipper'", "position": [-7, -7], "bounds": [292, 200], - "transform": 13 + "transform": 10 }, { "name": "LayoutNGBlockFlow DIV class='scroller'", "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 15 + "transform": 11 }, { "name": "Scrolling Contents Layer", "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 17 + "transform": 11 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV class='content'", "bounds": [196, 212], "contentsOpaque": true, "backgroundColor": "#DDDDDD", - "transform": 18 + "transform": 12 } ], "transforms": [ @@ -136,16 +136,6 @@ }, { "id": 3, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - }, - { - "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -154,23 +144,32 @@ ] }, { + "id": 4, + "parent": 3, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [41, 41, 0, 1] + ] + }, + { "id": 5, "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [41, 41, 0, 1] + [17, 17, 0, 1] ] }, { "id": 6, - "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [41, 41, 0, 1] + [21, 312, 0, 1] ] }, { @@ -180,36 +179,36 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [17, 17, 0, 1] + [40, 40, 0, 1] ] }, { "id": 8, + "parent": 7, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [21, 312, 0, 1] + [17, 17, 0, 1] ] }, { "id": 9, - "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [40, 40, 0, 1] + [370, 312, 0, 1] ] }, { "id": 10, - "parent": 8, + "parent": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [40, 40, 0, 1] + [16, 16, 0, 1] ] }, { @@ -219,71 +218,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [17, 17, 0, 1] + [24, 24, 0, 1] ] }, { "id": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 312, 0, 1] - ] - }, - { - "id": 13, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 14, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 15, - "parent": 14, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [24, 24, 0, 1] - ] - }, - { - "id": 16, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 17, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [24, 24, 0, 1] - ] - }, - { - "id": 18, - "parent": 17, + "parent": 11, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt index 3ebf4cfe..965d460 100644 --- a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-expected.txt
@@ -30,7 +30,7 @@ "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 4 + "transform": 2 }, { "name": "Scrolling Contents Layer", @@ -69,16 +69,6 @@ [0, 0, 1, 0], [17, 17, 0, 1] ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt index 538dd6d..f165bd64 100644 --- a/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
@@ -30,7 +30,7 @@ "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 4 + "transform": 2 }, { "name": "Scrolling Contents Layer", @@ -69,16 +69,6 @@ [0, 0, 1, 0], [17, 17, 0, 1] ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt index b7d50ba..3d781d9 100644 --- a/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt +++ b/third_party/blink/web_tests/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -15,67 +15,215 @@ "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [85, 144], - "scrollPosition": [0, 59], + "transform": 2 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 1 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 1 + }, + { + "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'", + "bounds": [75, 24], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 3 }, { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')", + "position": [0, 56], + "bounds": [75, 24], + "transform": 3 + }, + { + "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'", + "bounds": [104, 104], + "transform": 4 + }, + { + "name": "Scrolling Contents Layer", + "position": [2, 2], + "bounds": [105, 144], + "transform": 5 + }, + { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], "transform": 4 }, { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], + "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'", "bounds": [80, 40], - "transform": 5 + "contentsOpaque": true, + "backgroundColor": "#800080", + "transform": 6 }, { - "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'", + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')", + "position": [-21, -33], + "bounds": [75, 80], + "transform": 6 + }, + { + "name": "LayoutNGBlockFlow DIV id='container-absolute-not-contained' class='overflow'", + "bounds": [104, 104], + "transform": 7 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 7 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 7 + }, + { + "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 8 + "transform": 9 }, { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')", + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')", "position": [0, 56], "bounds": [75, 24], + "transform": 9 + }, + { + "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'", + "bounds": [104, 104], + "transform": 10 + }, + { + "name": "Scrolling Contents Layer", + "position": [2, 2], + "bounds": [85, 144], "transform": 11 }, { - "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'", - "bounds": [104, 104], + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 10 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 10 + }, + { + "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'", + "bounds": [75, 24], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 12 }, { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')", + "position": [0, 56], + "bounds": [75, 24], + "transform": 12 + }, + { + "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'", + "bounds": [104, 104], + "transform": 13 + }, + { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [105, 144], - "scrollPosition": [0, 59], "transform": 14 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 15 + "transform": 13 }, { - "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'", + "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", + "transform": 15 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')", + "position": [-21, -33], + "bounds": [75, 80], + "transform": 15 + }, + { + "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'", + "bounds": [104, 104], + "transform": 16 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 16 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 16 + }, + { + "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'", + "bounds": [75, 24], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 18 }, { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')", + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')", + "position": [0, 56], + "bounds": [75, 24], + "transform": 18 + }, + { + "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'", + "bounds": [104, 104], + "transform": 19 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 19 + }, + { + "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'", + "bounds": [80, 40], + "contentsOpaque": true, + "backgroundColor": "#800080", + "transform": 21 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')", "position": [-21, -33], "bounds": [75, 80], "transform": 21 }, { - "name": "LayoutNGBlockFlow DIV id='container-absolute-not-contained' class='overflow'", + "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'", "bounds": [104, 104], "transform": 22 }, @@ -83,508 +231,354 @@ "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 23 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], - "bounds": [80, 40], - "transform": 24 - }, - { - "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'", - "bounds": [75, 24], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 27 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')", - "position": [0, 56], - "bounds": [75, 24], - "transform": 30 - }, - { - "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'", - "bounds": [104, 104], - "transform": 31 - }, - { - "name": "Scrolling Contents Layer", - "position": [2, 2], - "bounds": [85, 144], - "scrollPosition": [0, 59], - "transform": 33 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 34 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], - "bounds": [80, 40], - "transform": 35 - }, - { - "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'", - "bounds": [75, 24], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 38 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')", - "position": [0, 56], - "bounds": [75, 24], - "transform": 41 - }, - { - "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'", - "bounds": [104, 104], - "transform": 42 - }, - { - "name": "Scrolling Contents Layer", - "position": [2, 2], - "bounds": [105, 144], - "scrollPosition": [0, 59], - "transform": 44 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 45 - }, - { - "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'", - "bounds": [80, 40], - "contentsOpaque": true, - "backgroundColor": "#800080", - "transform": 48 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')", - "position": [-21, -33], - "bounds": [75, 80], - "transform": 51 - }, - { - "name": "LayoutNGBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'", - "bounds": [104, 104], - "transform": 52 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 53 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], - "bounds": [80, 40], - "transform": 54 - }, - { - "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'", - "bounds": [75, 24], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 57 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')", - "position": [0, 56], - "bounds": [75, 24], - "transform": 60 - }, - { - "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'", - "bounds": [104, 104], - "transform": 61 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 62 - }, - { - "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'", - "bounds": [80, 40], - "contentsOpaque": true, - "backgroundColor": "#800080", - "transform": 65 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')", - "position": [-21, -33], - "bounds": [75, 80], - "transform": 68 - }, - { - "name": "LayoutNGBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'", - "bounds": [104, 104], - "transform": 69 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 70 + "transform": 22 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 73 + "transform": 24 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')", "position": [-21, -33], "bounds": [75, 80], - "transform": 76 + "transform": 24 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 77 + "transform": 25 }, { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [85, 144], - "scrollPosition": [0, 59], - "transform": 79 + "transform": 26 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 80 + "transform": 25 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 81 + "transform": 27 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 84 + "transform": 28 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 87 + "transform": 28 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 88 + "transform": 29 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 89 + "transform": 29 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 90 + "transform": 30 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 93 + "transform": 32 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 96 + "transform": 32 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 97 + "transform": 33 }, { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [85, 144], - "scrollPosition": [0, 59], - "transform": 99 + "transform": 34 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 100 + "transform": 33 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 101 + "transform": 35 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 104 + "transform": 36 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 107 + "transform": 36 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 108 + "transform": 37 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 109 + "transform": 37 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 110 + "transform": 38 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 113 + "transform": 40 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 116 + "transform": 40 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 117 + "transform": 41 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 118 + "transform": 42 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling-not-contained' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 119 + "transform": 43 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-absolute-sibling' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 120 + "transform": 44 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-fixed-sibling-grandchildren' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 121 + "transform": 45 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='sibling-fixed-sibling' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 122 + "transform": 46 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 125 + "transform": 47 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 128 + "transform": 47 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 131 + "transform": 48 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 134 + "transform": 48 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 137 + "transform": 49 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 140 + "transform": 49 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 143 + "transform": 50 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 146 + "transform": 50 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 149 + "transform": 51 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 152 + "transform": 51 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 155 + "transform": 52 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 158 + "transform": 52 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 161 + "transform": 53 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 164 + "transform": 53 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 167 + "transform": 54 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 170 + "transform": 54 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 173 + "transform": 55 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 176 + "transform": 55 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 179 + "transform": 56 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 182 + "transform": 56 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 185 + "transform": 57 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 188 + "transform": 57 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 191 + "transform": 58 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 194 + "transform": 58 } ], "transforms": [ @@ -599,11 +593,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [10, 10, 0, 1] + [0, -59, 0, 1] ] }, { @@ -613,7 +608,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -59, 0, 1] + [6, 34, 0, 1] ] }, { @@ -622,30 +617,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [10, 10, 0, 1] + [130, 10, 0, 1] ] }, { "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -654,32 +631,51 @@ ] }, { + "id": 6, + "parent": 5, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [27, 67, 0, 1] + ] + }, + { + "id": 7, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [250, 10, 0, 1] + ] + }, + { "id": 8, "parent": 7, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [6, 34, 0, 1] + [0, -59, 0, 1] ] }, { "id": 9, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [10, 10, 0, 1] + [6, 34, 0, 1] ] }, { "id": 10, - "parent": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -59, 0, 1] + [370, 10, 0, 1] ] }, { @@ -689,16 +685,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [6, 34, 0, 1] + [0, -59, 0, 1] ] }, { "id": 12, + "parent": 11, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [6, 34, 0, 1] ] }, { @@ -707,7 +704,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [10, 130, 0, 1] ] }, { @@ -722,11 +719,12 @@ }, { "id": 15, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [27, 67, 0, 1] ] }, { @@ -735,7 +733,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [130, 130, 0, 1] ] }, { @@ -755,7 +753,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [27, 67, 0, 1] + [6, 34, 0, 1] ] }, { @@ -764,7 +762,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [250, 130, 0, 1] ] }, { @@ -793,25 +791,27 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [370, 130, 0, 1] ] }, { "id": 23, + "parent": 22, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [0, -59, 0, 1] ] }, { "id": 24, + "parent": 23, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [27, 67, 0, 1] ] }, { @@ -820,7 +820,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [10, 250, 0, 1] ] }, { @@ -835,6 +835,15 @@ }, { "id": 27, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [35, 315, 0, 1] + ] + }, + { + "id": 28, "parent": 26, "transform": [ [1, 0, 0, 0], @@ -844,17 +853,26 @@ ] }, { - "id": 28, + "id": 29, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [130, 250, 0, 1] ] }, { - "id": 29, - "parent": 28, + "id": 30, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [155, 315, 0, 1] + ] + }, + { + "id": 31, + "parent": 29, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -863,8 +881,8 @@ ] }, { - "id": 30, - "parent": 29, + "id": 32, + "parent": 31, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -873,26 +891,17 @@ ] }, { - "id": 31, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 32, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { "id": 33, - "parent": 32, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [250, 250, 0, 1] + ] + }, + { + "id": 34, + "parent": 33, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -901,45 +910,17 @@ ] }, { - "id": 34, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { "id": 35, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [370, 10, 0, 1] + [275, 315, 0, 1] ] }, { "id": 36, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 37, - "parent": 36, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 38, - "parent": 37, + "parent": 34, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -948,12 +929,31 @@ ] }, { - "id": 39, + "id": 37, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [370, 10, 0, 1] + [370, 250, 0, 1] + ] + }, + { + "id": 38, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [395, 315, 0, 1] + ] + }, + { + "id": 39, + "parent": 37, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, -59, 0, 1] ] }, { @@ -963,731 +963,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -59, 0, 1] + [6, 34, 0, 1] ] }, { "id": 41, - "parent": 40, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 42, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 43, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 44, - "parent": 43, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 45, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 46, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 47, - "parent": 46, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 48, - "parent": 47, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 49, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 50, - "parent": 49, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 51, - "parent": 50, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 52, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 53, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 54, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 55, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 56, - "parent": 55, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 57, - "parent": 56, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 58, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 59, - "parent": 58, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 60, - "parent": 59, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 61, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 62, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 63, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 64, - "parent": 63, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 65, - "parent": 64, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 66, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 67, - "parent": 66, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 68, - "parent": 67, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 69, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 70, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 71, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 72, - "parent": 71, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 73, - "parent": 72, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 74, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 75, - "parent": 74, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 76, - "parent": 75, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 77, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 78, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 79, - "parent": 78, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 80, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 81, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [35, 315, 0, 1] - ] - }, - { - "id": 82, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 83, - "parent": 82, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 84, - "parent": 83, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 85, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 86, - "parent": 85, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 87, - "parent": 86, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 88, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 89, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 90, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [155, 315, 0, 1] - ] - }, - { - "id": 91, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 92, - "parent": 91, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 93, - "parent": 92, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 94, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 95, - "parent": 94, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 96, - "parent": 95, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 97, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 98, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 99, - "parent": 98, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 100, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 101, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [275, 315, 0, 1] - ] - }, - { - "id": 102, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 103, - "parent": 102, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 104, - "parent": 103, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 105, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 106, - "parent": 105, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 107, - "parent": 106, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 108, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 109, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 110, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [395, 315, 0, 1] - ] - }, - { - "id": 111, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 112, - "parent": 111, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 113, - "parent": 112, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 114, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 115, - "parent": 114, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 116, - "parent": 115, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 117, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1696,7 +976,7 @@ ] }, { - "id": 118, + "id": 42, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1705,7 +985,7 @@ ] }, { - "id": 119, + "id": 43, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1714,7 +994,7 @@ ] }, { - "id": 120, + "id": 44, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1723,7 +1003,7 @@ ] }, { - "id": 121, + "id": 45, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1732,7 +1012,7 @@ ] }, { - "id": 122, + "id": 46, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1741,27 +1021,8 @@ ] }, { - "id": 123, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 124, - "parent": 123, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 125, - "parent": 124, + "id": 47, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1770,27 +1031,8 @@ ] }, { - "id": 126, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 127, - "parent": 126, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 128, - "parent": 127, + "id": 48, + "parent": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1799,27 +1041,8 @@ ] }, { - "id": 129, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 10, 0, 1] - ] - }, - { - "id": 130, - "parent": 129, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 131, - "parent": 130, + "id": 49, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1828,27 +1051,8 @@ ] }, { - "id": 132, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 10, 0, 1] - ] - }, - { - "id": 133, - "parent": 132, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 134, - "parent": 133, + "id": 50, + "parent": 11, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1857,27 +1061,8 @@ ] }, { - "id": 135, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 10, 0, 1] - ] - }, - { - "id": 136, - "parent": 135, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 137, - "parent": 136, + "id": 51, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1886,27 +1071,8 @@ ] }, { - "id": 138, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 10, 0, 1] - ] - }, - { - "id": 139, - "parent": 138, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 140, - "parent": 139, + "id": 52, + "parent": 17, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1915,27 +1081,8 @@ ] }, { - "id": 141, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 142, - "parent": 141, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 143, - "parent": 142, + "id": 53, + "parent": 20, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1944,27 +1091,8 @@ ] }, { - "id": 144, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 145, - "parent": 144, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 146, - "parent": 145, + "id": 54, + "parent": 23, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1973,27 +1101,8 @@ ] }, { - "id": 147, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 148, - "parent": 147, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 149, - "parent": 148, + "id": 55, + "parent": 26, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -2002,27 +1111,8 @@ ] }, { - "id": 150, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 151, - "parent": 150, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 152, - "parent": 151, + "id": 56, + "parent": 31, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -2031,27 +1121,8 @@ ] }, { - "id": 153, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 154, - "parent": 153, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 155, - "parent": 154, + "id": 57, + "parent": 34, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -2060,375 +1131,8 @@ ] }, { - "id": 156, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 157, - "parent": 156, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 158, - "parent": 157, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 159, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 160, - "parent": 159, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 161, - "parent": 160, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 162, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 163, - "parent": 162, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 164, - "parent": 163, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 165, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 166, - "parent": 165, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 167, - "parent": 166, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 168, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 169, - "parent": 168, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 170, - "parent": 169, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 171, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 172, - "parent": 171, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 173, - "parent": 172, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 174, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 175, - "parent": 174, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 176, - "parent": 175, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 177, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 178, - "parent": 177, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 179, - "parent": 178, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 180, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 181, - "parent": 180, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 182, - "parent": 181, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 183, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 184, - "parent": 183, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 185, - "parent": 184, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 186, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 187, - "parent": 186, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 188, - "parent": 187, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 189, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 190, - "parent": 189, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 191, - "parent": 190, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 192, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 193, - "parent": 192, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 194, - "parent": 193, + "id": 58, + "parent": 39, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt b/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt index 558eb2a..abf1b14 100644 --- a/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt +++ b/third_party/blink/web_tests/compositing/rendering-contexts-expected.txt
@@ -18,14 +18,14 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 6 + "transform": 4 }, { "name": "LayoutNGBlockFlow DIV id='child' class='composited'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 11 + "transform": 5 } ], "transforms": [ @@ -45,59 +45,19 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] + "parent": 2, + "flattenInheritedTransform": false, + "renderingContext": 1 }, { "id": 4, "parent": 3, + "flattenInheritedTransform": false, "renderingContext": 1 }, { "id": 5, "parent": 4, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 6, - "parent": 5, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "renderingContext": 1 - }, - { - "id": 9, - "parent": 8, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 10, - "parent": 9, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 11, - "parent": 10, "renderingContext": 2 } ]
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt index 0cb4e1fb..ec078b6 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [215, 0], "transform": 1 }, { @@ -13,7 +12,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -28,16 +27,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [-215, 0, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt index cca0571..dbd39d9 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [1, 0], "transform": 1 }, { @@ -13,7 +12,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -28,16 +27,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [-1, 0, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt index 4cc19c3e..b8820c85 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [215, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt index f3700b77..9c586104 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [1, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt index d2e2d28..a622357 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt index 27d1c50..eae6632c 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt index 43ab9f3..642e7936 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt index 43ab9f3..642e7936 100644 --- a/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt index d98df46..1dcb86c 100644 --- a/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt +++ b/third_party/blink/web_tests/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -15,38 +15,37 @@ "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [400, 704], - "scrollPosition": [0, 304], - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='inner'", "bounds": [204, 204], - "transform": 6 + "transform": 3 }, { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [5000, 9000], - "transform": 9 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='grey'", "bounds": [100, 800], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 10 + "transform": 4 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='spacer')", "position": [0, 2000], "bounds": [5000, 1000], - "transform": 11 + "transform": 4 }, { "name": "Scroll Corner Layer", "position": [195, 195], "bounds": [7, 7], - "transform": 14 + "transform": 3 } ], "transforms": [ @@ -61,11 +60,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [0, -304, 0, 1] ] }, { @@ -75,115 +75,18 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -304, 0, 1] + [2, 502, 0, 1] ] }, { "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 502, 0, 1] - ] - }, - { - "id": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 502, 0, 1] - ] - }, - { - "id": 10, - "parent": 9, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [2, 2, 0, 1] ] - }, - { - "id": 11, - "parent": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 13, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ] - }, - { - "id": 14, - "parent": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 502, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt b/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt index 229f8e85..5e41acd 100644 --- a/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/add-remove-squashed-layers-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [180, 180], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -72,7 +63,7 @@ "reason": "chunk appeared" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -84,15 +75,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -124,7 +106,7 @@ "reason": "chunk disappeared" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -136,15 +118,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -181,7 +154,7 @@ "reason": "paint property change" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -193,15 +166,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -243,7 +207,7 @@ "reason": "paint property change" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -255,15 +219,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -310,7 +265,7 @@ "reason": "paint property change" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -322,15 +277,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt b/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt index 5ef5e22..d1fec12 100644 --- a/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/composited-bounds-for-negative-z-expected.txt
@@ -23,7 +23,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV)", "bounds": [285, 1000], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -44,15 +44,6 @@ [0, 0, 1, 0], [108, 100, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt b/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt index c4c7d60d..b3d4b08b5 100644 --- a/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2038], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 300], "transform": 1 } ],
diff --git a/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt index 7c2a893..3243f60 100644 --- a/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -16,7 +16,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box')", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [10, 10, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt b/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt index e5f5d65c..d5d97db 100644 --- a/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/move-squashing-layer-expected.txt
@@ -26,7 +26,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='squashed')", "position": [-92, -92], "bounds": [100, 100], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -47,15 +47,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt index 9f788cad..a89d894a 100644 --- a/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='squashed')", "position": [8, -4], "bounds": [40, 90], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt b/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt index 0137ac54..b198560 100644 --- a/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/repaint-child-of-squashed-expected.txt
@@ -18,7 +18,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top')", "position": [80, 80], "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -30,15 +30,6 @@ [0, 0, 1, 0], [50, 50, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 50, 0, 1] - ] } ] } @@ -70,7 +61,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -82,15 +73,6 @@ [0, 0, 1, 0], [50, 50, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 50, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt index 0ff4786..ba28f5f3 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-1-expected.txt
@@ -29,7 +29,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan')", "position": [0, 100], "bounds": [200, 300], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -50,15 +50,6 @@ [0, 0, 1, 0], [0, 100, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 100, 0, 1] - ] } ] } @@ -71,7 +62,6 @@ "bounds": [785, 1400], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 80], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'", @@ -105,7 +95,7 @@ "reason": "full layer" } ], - "transform": 4 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')", @@ -118,7 +108,7 @@ "reason": "full layer" } ], - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -142,35 +132,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -80, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 200, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -80, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -189,7 +151,6 @@ "bounds": [785, 1400], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 120], "transform": 1 }, { @@ -204,13 +165,13 @@ "bounds": [200, 100], "contentsOpaque": true, "backgroundColor": "#00FFFF", - "transform": 4 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')", "position": [0, 100], "bounds": [200, 300], - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -234,35 +195,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -120, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 200, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -120, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -281,7 +214,6 @@ "bounds": [785, 1400], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 170], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'", @@ -315,7 +247,7 @@ "reason": "full layer" } ], - "transform": 4 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan')", @@ -328,7 +260,7 @@ "reason": "full layer" } ], - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -352,35 +284,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -170, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 300, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -170, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt index 3f007e6..1e21fc95 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-2-expected.txt
@@ -52,7 +52,6 @@ "bounds": [785, 4050], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 80], "transform": 1 }, { @@ -74,7 +73,7 @@ "bounds": [200, 4000], "contentsOpaque": true, "backgroundColor": "#00FFFF", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -89,16 +88,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -80, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt index 624fa02..a51ccb3 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-above-fixed-3-expected.txt
@@ -36,7 +36,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -60,16 +60,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -88,7 +79,6 @@ "bounds": [785, 4100], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 10], "transform": 1 }, { @@ -102,21 +92,21 @@ "bounds": [100, 4000], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='innerFixed'", "bounds": [200, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='innerScrolling'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 7 + "transform": 4 } ], "transforms": [ @@ -131,16 +121,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -10, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -149,7 +130,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -158,27 +139,8 @@ ] }, { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -10, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, + "id": 4, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -197,7 +159,6 @@ "bounds": [785, 4100], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 110], "transform": 1 }, { @@ -217,14 +178,14 @@ "reason": "appeared" } ], - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='innerFixed'", "bounds": [200, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -239,16 +200,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -110, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -257,7 +209,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt index cfa25e9..537febd 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-compositing-hover-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -72,7 +63,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle2')", "position": [80, 80], "bounds": [180, 180], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -93,15 +84,6 @@ [0, 0, 1, 0], [180, 180, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [180, 180, 0, 1] - ] } ] } @@ -126,20 +108,20 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [100, 100], - "transform": 2 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='box middle2'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box top')", "position": [80, 80], "bounds": [100, 100], - "transform": 4 + "transform": 2 } ], "transforms": [ @@ -158,24 +140,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [260, 260, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [260, 260, 0, 1] ] } @@ -202,14 +166,14 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [180, 180], - "transform": 2 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='box top'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -228,15 +192,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [340, 340, 0, 1] ] } @@ -263,7 +218,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -275,15 +230,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt index d8c45628..ea1a072 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-onto-nephew-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [-85, -85], "bounds": [180, 190], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [125, 125, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [125, 125, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt index 0fd84259..d179a0c 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-onto-transform-backing-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [-80, -80], "bounds": [260, 260], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -40,15 +40,6 @@ [0, 0, 0, 1] ], "origin": [50, 50] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt index d10e43e..0898cd8 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-simple-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [-80, -80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt index 7e44115..f84dcb6f 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-three-layers-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [-60, -60], "bounds": [180, 190], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt index d1850ad..5f38153f 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-transform-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [-101, -101], "bounds": [281, 281], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt index 665cf7c..6c11128 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -18,7 +18,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [-101, -101], "bounds": [281, 281], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -30,15 +30,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -70,7 +61,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -82,15 +73,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -127,7 +109,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -139,15 +121,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt index 3443df8a..18202b9 100644 --- a/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -18,7 +18,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='box middle')", "position": [-96, -96], "bounds": [276, 276], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -30,15 +30,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -70,7 +61,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -82,15 +73,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -127,7 +109,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -139,15 +121,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt b/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt index b5b08a07..bfd80d0 100644 --- a/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt b/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt index 920898ce..3ee4c4b 100644 --- a/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squashed-repaints-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -72,7 +63,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -84,15 +75,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -129,7 +111,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -141,15 +123,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -186,7 +159,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -198,15 +171,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -243,7 +207,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -255,15 +219,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt b/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt index 9c5ce42..931efa44 100644 --- a/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt +++ b/third_party/blink/web_tests/compositing/squashing/squashing-sparsity-heuristic-expected.txt
@@ -17,20 +17,20 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [10, 10], - "transform": 2 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='B' class='overlap2'", "bounds": [10, 10], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 3 + "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV id='C' class='overlap3')", "position": [0, 80], "bounds": [25, 10], - "transform": 4 + "transform": 2 } ], "transforms": [ @@ -49,24 +49,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [60, 60, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [220, 220, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [220, 220, 0, 1] ] }
diff --git a/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt b/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt index 34e644c..0db1d7b 100644 --- a/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt +++ b/third_party/blink/web_tests/compositing/update-paint-phases-expected.txt
@@ -31,7 +31,7 @@ "GraphicsLayerPaintOverflowContents", "GraphicsLayerPaintCompositedScroll" ], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", @@ -43,7 +43,7 @@ "GraphicsLayerPaintMask", "GraphicsLayerPaintDecoration" ], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -55,24 +55,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt index e55a5b99..efc7b90 100644 --- a/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt +++ b/third_party/blink/web_tests/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -31,16 +31,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -49,8 +40,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt index 232ae7d..5789f216 100644 --- a/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt +++ b/third_party/blink/web_tests/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -15,7 +15,7 @@ "name": "LayoutNGBlockFlow DIV id='content'", "bounds": [285, 1000], "contentsOpaque": true, - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -27,15 +27,6 @@ [0, 0, 1, 0], [50, 50, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 50, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt index 48d6e35..74b03a5 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/absolute-inside-out-of-view-fixed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2513], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt index 086c286..1f45360 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/filters/sw-layer-overlaps-hw-shadow-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='software')", "position": [-105, -105], "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [105, 105, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [105, 105, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt index bb56e9f..b2f373fb 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/fixed-position-changed-to-absolute-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='layer-A')", "position": [12, 7], "bounds": [226, 180], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [8, 13, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 13, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt index fc7c633b..d2cc91c 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/bounds-ignores-hidden-dynamic-negzindex-expected.txt
@@ -19,14 +19,14 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow PRE id='layers')", "position": [0, -250], "bounds": [792, 100], - "transform": 2 + "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV class='indicator box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -47,15 +47,6 @@ [0, 0, 1, 0], [0, 250, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 250, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt index 6bea270..d256c36 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@ "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 9 + "transform": 6 } ], "transforms": [ @@ -76,42 +76,7 @@ }, { "id": 5, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.002], - [0, 0, 0, 1] - ], - "origin": [152, 152] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [12, 12, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 7, - "parent": 6, - "transform": [ - [0.766044443118978, -0.556670399226419, -0.32139380484327, 0], - [0, 0.5, -0.866025403784439, 0], - [0.642787609686539, 0.663413948168938, 0.383022221559489, 0], - [0, 0, 0, 1] - ], - "origin": [140, 140], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -122,8 +87,8 @@ "renderingContext": 1 }, { - "id": 9, - "parent": 8, + "id": 6, + "parent": 5, "transform": [ [0.766044443118978, 0, 0.642787609686539, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt index 41da0a6..946cba0 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-composited-nested-iframes-expected.txt
@@ -14,53 +14,53 @@ { "name": "LayoutView #document", "bounds": [280, 200], - "transform": 3 + "transform": 2 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 6 + "transform": 3 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 8 + "transform": 4 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 11 + "transform": 5 }, { "name": "LayoutIFrame IFRAME", "bounds": [284, 204], - "transform": 12 + "transform": 6 }, { "name": "LayoutView #document", "bounds": [280, 200], - "transform": 14 + "transform": 7 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 17 + "transform": 8 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 19 + "transform": 9 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 22 + "transform": 10 }, { "name": "LayoutBlockFlow DIV id='box' class='composited'", @@ -81,11 +81,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 120, 0, 1] + [2, 2, 0, 1] ] }, { @@ -95,16 +96,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [8, 8, 0, 1] ] }, { "id": 4, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 120, 0, 1] + [1, 1, 0, 1] ] }, { @@ -114,27 +116,26 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [18, 10, 0, 1] ] }, { "id": 6, - "parent": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [20, 344, 0, 1] ] }, { "id": 7, - "parent": 5, + "parent": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [2, 2, 0, 1] ] }, { @@ -144,17 +145,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [1, 1, 0, 1] + [8, 8, 0, 1] ] }, { "id": 9, - "parent": 5, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [1, 1, 0, 1] ] }, { @@ -164,123 +165,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 11, - "parent": 10, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 10, 0, 1] - ] - }, - { - "id": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 344, 0, 1] - ] - }, - { - "id": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 344, 0, 1] - ] - }, - { - "id": 14, - "parent": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 15, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 344, 0, 1] - ] - }, - { - "id": 16, - "parent": 15, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 17, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 18, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 19, - "parent": 18, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 20, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 21, - "parent": 20, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 22, - "parent": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt index 11afe43a..33989de 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/become-overlapped-iframe-expected.txt
@@ -15,20 +15,20 @@ "name": "Scrolling Contents Layer", "bounds": [305, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV id='overlay'", "bounds": [150, 150], "backgroundColor": "#00000099", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -43,11 +43,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [58, 58, 0, 1] + [15, 15, 0, 1] ] }, { @@ -57,21 +58,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt index 29f5c5b..17c62a5 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/connect-compositing-iframe-delayed-expected.txt
@@ -18,21 +18,21 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow DIV id='box' class='composited'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -47,11 +47,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 128, 0, 1] + [15, 15, 0, 1] ] }, { @@ -61,21 +62,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt index fea2ced..09468b1 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/enter-compositing-iframe-expected.txt
@@ -16,20 +16,20 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow DIV id='test' class='composited box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -44,11 +44,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -58,21 +59,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt index 2e1e54f..571379b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-resize-expected.txt
@@ -16,20 +16,20 @@ "name": "Scrolling Contents Layer", "bounds": [385, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -44,11 +44,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -58,21 +59,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt index 68828f7..0046676 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/iframe-size-from-zero-expected.txt
@@ -15,20 +15,20 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -43,11 +43,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -57,21 +58,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt index 9c44cc4..25ca3e982 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -15,32 +15,32 @@ { "name": "Scrolling Contents Layer", "bounds": [285, 193], - "transform": 3 + "transform": 2 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 4 + "transform": 3 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 6 + "transform": 4 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 9 + "transform": 5 }, { "name": "LayoutBlockFlow DIV class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 11 + "transform": 7 } ], "transforms": [ @@ -55,11 +55,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [15, 15, 0, 1] ] }, { @@ -69,7 +70,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] + [8, 8, 0, 1] ] }, { @@ -79,52 +80,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [1, 1, 0, 1] ] }, { "id": 5, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 7, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -133,7 +94,7 @@ ] }, { - "id": 10, + "id": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -142,8 +103,8 @@ ] }, { - "id": 11, - "parent": 10, + "id": 7, + "parent": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt index 415c20d..4beda0e 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-expected.txt
@@ -16,20 +16,20 @@ "name": "Scrolling Contents Layer", "bounds": [285, 230], "backgroundColor": "#C0C0C0", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 5 + "transform": 4 } ], "transforms": [ @@ -44,11 +44,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -58,21 +59,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [18, 10, 0, 1] ] }, { - "id": 5, + "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt index 637662e8..39b22448 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-iframe-iframe-expected.txt
@@ -21,12 +21,12 @@ "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 3 + "transform": 2 }, { "name": "LayoutIFrame (positioned) IFRAME id='overlap'", "bounds": [304, 304], - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -41,16 +41,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -59,7 +50,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt index fd6155e9..d3115742 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/overlapped-nested-iframes-expected.txt
@@ -5,64 +5,63 @@ "bounds": [785, 1650], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, { "name": "LayoutIFrame IFRAME", "bounds": [284, 204], - "transform": 3 + "transform": 2 }, { "name": "LayoutView #document", "bounds": [280, 200], + "transform": 3 + }, + { + "name": "LayoutIFrame IFRAME", + "bounds": [252, 172], + "transform": 4 + }, + { + "name": "LayoutView #document", + "bounds": [250, 170], + "backgroundColor": "#C0C0C0", + "transform": 5 + }, + { + "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", + "bounds": [210, 210], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 6 }, { "name": "LayoutIFrame IFRAME", - "bounds": [252, 172], - "transform": 10 - }, - { - "name": "LayoutView #document", - "bounds": [250, 170], - "backgroundColor": "#C0C0C0", - "transform": 12 - }, - { - "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", - "bounds": [210, 210], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 15 - }, - { - "name": "LayoutIFrame IFRAME", "bounds": [284, 204], - "transform": 17 + "transform": 7 }, { "name": "LayoutView #document", "bounds": [280, 200], - "transform": 20 + "transform": 8 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 24 + "transform": 9 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 26 + "transform": 10 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 29 + "transform": 11 }, { "name": "LayoutBlockFlow (positioned) DIV id='banner'", @@ -82,11 +81,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [20, 150, 0, 1] ] }, { @@ -96,16 +96,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 150, 0, 1] + [2, 2, 0, 1] ] }, { "id": 4, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [8, 8, 0, 1] ] }, { @@ -115,7 +116,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 150, 0, 1] + [1, 1, 0, 1] ] }, { @@ -125,16 +126,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [18, 10, 0, 1] ] }, { "id": 7, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [20, 374, 0, 1] ] }, { @@ -144,7 +146,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [20, 150, 0, 1] + [2, 2, 0, 1] ] }, { @@ -154,7 +156,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [8, 8, 0, 1] ] }, { @@ -164,189 +166,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [1, 1, 0, 1] ] }, { "id": 11, - "parent": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 12, - "parent": 11, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 13, - "parent": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 14, - "parent": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 15, - "parent": 14, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 10, 0, 1] - ] - }, - { - "id": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 17, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 374, 0, 1] - ] - }, - { - "id": 18, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 19, - "parent": 18, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 374, 0, 1] - ] - }, - { - "id": 20, - "parent": 19, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 22, - "parent": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 374, 0, 1] - ] - }, - { - "id": 23, - "parent": 22, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 24, - "parent": 23, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 25, - "parent": 23, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 26, - "parent": 25, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 27, - "parent": 23, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 28, - "parent": 27, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 29, - "parent": 28, + "parent": 10, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt index 7f06c8d6..cf9a651 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/iframes/scrolling-iframe-expected.txt
@@ -16,27 +16,26 @@ "name": "Scrolling Contents Layer", "bounds": [508, 608], "backgroundColor": "#C0C0C0", - "scrollPosition": [80, 80], - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow DIV id='iframe-content' class='box'", "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 5 + "transform": 4 }, { "name": "Scroll Corner Layer", "position": [285, 135], "bounds": [15, 15], - "transform": 7 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV class='overlay'", "bounds": [50, 50], "backgroundColor": "#00000033", - "transform": 8 + "transform": 5 } ], "transforms": [ @@ -51,11 +50,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 28, 0, 1] + [15, 15, 0, 1] ] }, { @@ -65,7 +65,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] + [-80, -80, 0, 1] ] }, { @@ -75,40 +75,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [-80, -80, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [108, 100, 0, 1] ] }, { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 28, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [15, 15, 0, 1] - ] - }, - { - "id": 8, + "id": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt index 1a95e47..1cbef7e 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/animation-overlap-with-children-expected.txt
@@ -19,20 +19,20 @@ "bounds": [250, 50], "contentsOpaque": true, "backgroundColor": "#C0C0C0", - "transform": 5 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='test1 box')", "position": [5, 15], "bounds": [100, 100], - "transform": 8 + "transform": 3 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 9 + "transform": 4 } ], "transforms": [ @@ -57,64 +57,16 @@ }, { "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [6, 6, 0, 1] ] }, { "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt index bc889f4a..d9e52fe 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-and-transform-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 5021], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt index db0cad5..ee1d2b9 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-in-fixed-overflow-expected.txt
@@ -14,14 +14,14 @@ { "name": "Scrolling Contents Layer", "bounds": [785, 1000], - "transform": 2 + "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV class='yellow fixed'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FFFF00", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -40,15 +40,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 13, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [200, 13, 0, 1] ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt index 2d409f0..6f84788 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -17,20 +17,20 @@ "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [285, 800], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [286, 286], "bounds": [15, 15], - "transform": 3 + "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed lime box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 4 + "transform": 2 } ], "transforms": [ @@ -49,24 +49,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 72, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 72, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [10, 100, 0, 1] ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt index 2c7ecde..3ab39dc 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-positioning-expected.txt
@@ -52,7 +52,6 @@ "bounds": [2008, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 10], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt index 0f44b85..adaafdb 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-out-of-view-scaled-scroll-expected.txt
@@ -6,7 +6,6 @@ "bounds": [4008, 4016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [100, 100], "transform": 2 }, { @@ -118,7 +117,6 @@ "bounds": [4008, 4016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [100, 100], "transform": 2 }, { @@ -230,7 +228,6 @@ "bounds": [4008, 4016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [100, 100], "transform": 2 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt index f0937590..5d3e9d5 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/fixed-position-under-transform-expected.txt
@@ -5,14 +5,13 @@ "bounds": [785, 5021], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "transform": 1 }, { "name": "LayoutBlockFlow DIV id='transform'", "position": [100, 100], "bounds": [256, 256], - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV id='overlap'", @@ -33,16 +32,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -1000, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -51,8 +41,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt index a5b9d4d..02fc149 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -19,7 +19,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#C0C0C0", - "transform": 6 + "transform": 4 } ], "transforms": [ @@ -39,21 +39,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 394, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "renderingContext": 1 - }, - { - "id": 5, - "parent": 4, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -64,8 +50,8 @@ "renderingContext": 1 }, { - "id": 6, - "parent": 5, + "id": 4, + "parent": 3, "transform": [ [0.984807753012208, 0, -0.17364817766693, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt index 8791d848..0974a19 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overflow-scroll-overlap-expected.txt
@@ -23,7 +23,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [0, 155], "bounds": [210, 100], - "transform": 7 + "transform": 4 } ], "transforms": [ @@ -64,35 +64,6 @@ [0, 0, 1, 0], [23, 58, 0, 1] ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 20, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -49, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [23, 58, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt index 4faaa53..e5c40a4 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-clipping-expected.txt
@@ -25,28 +25,28 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 6 + "transform": 5 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='to-animate2' class='box animating2'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", + "transform": 7 + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'", + "bounds": [100, 100], + "contentsOpaque": true, + "backgroundColor": "#FFFF00", + "transform": 8 + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'", + "bounds": [100, 100], + "contentsOpaque": true, + "backgroundColor": "#FFFF00", "transform": 9 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'", - "bounds": [100, 100], - "contentsOpaque": true, - "backgroundColor": "#FFFF00", - "transform": 11 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='box yellow'", - "bounds": [100, 100], - "contentsOpaque": true, - "backgroundColor": "#FFFF00", - "transform": 12 } ], "transforms": [ @@ -80,6 +80,7 @@ }, { "id": 4, + "parent": 3, "transform": [ [...], [...], @@ -99,7 +100,7 @@ }, { "id": 6, - "parent": 5, + "parent": 3, "transform": [ [...], [...], @@ -109,6 +110,7 @@ }, { "id": 7, + "parent": 6, "transform": [ [...], [...], @@ -118,7 +120,7 @@ }, { "id": 8, - "parent": 7, + "parent": 3, "transform": [ [...], [...], @@ -128,35 +130,6 @@ }, { "id": 9, - "parent": 8, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 10, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 11, - "parent": 10, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 12, "transform": [ [...], [...],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt index 47a9859..70a3e0a6 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-container-expected.txt
@@ -26,13 +26,13 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 6 + "transform": 5 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box yellow')", "position": [-51, 451], "bounds": [100, 100], - "transform": 8 + "transform": 4 } ], "transforms": [ @@ -66,6 +66,7 @@ }, { "id": 4, + "parent": 3, "transform": [ [...], [...], @@ -82,35 +83,6 @@ [...], [...] ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] } ] } @@ -143,13 +115,13 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 6 + "transform": 5 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='first-green-box' class='box green rotate-45deg')", "position": [-51, 87], "bounds": [174, 464], - "transform": 8 + "transform": 4 } ], "transforms": [ @@ -183,6 +155,7 @@ }, { "id": 4, + "parent": 3, "transform": [ [...], [...], @@ -199,35 +172,6 @@ [...], [...] ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [...], - [...], - [...], - [...] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt index 1ff7e99..4cd23d21 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-animation-expected.txt
@@ -16,14 +16,14 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 6 + "transform": 4 } ], "transforms": [ @@ -38,6 +38,7 @@ }, { "id": 2, + "parent": 1, "transform": [ [...], [...], @@ -53,31 +54,12 @@ [...], [...], [...] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [...], - [...], - [...], - [...] ], "origin": [50, 50] }, { - "id": 5, - "transform": [ - [...], - [...], - [...], - [...] - ] - }, - { - "id": 6, - "parent": 5, + "id": 4, + "parent": 1, "transform": [ [...], [...],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt index e0097cd..69f7a6fb 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-child-layer-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='green')", "position": [-400, 0], "bounds": [300, 300], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [400, 0, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [400, 0, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt index a2c11a7e..9b99b9c 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-clipping-expected.txt
@@ -24,7 +24,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='overlap')", "position": [400, 0], "bounds": [100, 100], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -45,15 +45,6 @@ [0, 0, 1, 0], [50, 200, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 200, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt index 92b0cbe..d70e370 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-3d-expected.txt
@@ -58,7 +58,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top left')", "position": [-100, -100], "bounds": [300, 300], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -81,15 +81,6 @@ [0, 0, -1, 1] ], "origin": [50, 50] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 108, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt index 84cb6c1..f498850 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-and-clipped-expected.txt
@@ -16,12 +16,12 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 2 + "transform": 1 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='over')", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -33,15 +33,6 @@ [0, 0, 1, 0], [110, 0, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [110, 0, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt index e7abc34..999add8 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transformed-preserved-3d-expected.txt
@@ -23,31 +23,31 @@ "name": "LayoutBlockFlow (positioned) DIV class='side side-2'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 8 + "transform": 7 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-3'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 11 + "transform": 9 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-4'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 14 + "transform": 11 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-5'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 17 + "transform": 13 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-6'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 20 + "transform": 15 } ], "transforms": [ @@ -104,26 +104,13 @@ }, { "id": 6, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { "id": 7, "parent": 6, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, "transform": [ [0, 0, -1, 0], [0, 1, 0, 0], @@ -135,27 +122,14 @@ "renderingContext": 1 }, { + "id": 8, + "parent": 3, + "flattenInheritedTransform": false, + "renderingContext": 1 + }, + { "id": 9, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 10, - "parent": 9, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 11, - "parent": 10, + "parent": 8, "transform": [ [-1, 0, 0, 0], [0, 1, 0, 0], @@ -167,27 +141,14 @@ "renderingContext": 1 }, { - "id": 12, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 10, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 13, - "parent": 12, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 14, - "parent": 13, + "id": 11, + "parent": 10, "transform": [ [0, 0, 1, 0], [0, 1, 0, 0], @@ -199,27 +160,14 @@ "renderingContext": 1 }, { - "id": 15, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 12, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 16, - "parent": 15, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 17, - "parent": 16, + "id": 13, + "parent": 12, "transform": [ [1, 0, 0, 0], [0, 0, 1, 0], @@ -231,27 +179,14 @@ "renderingContext": 1 }, { - "id": 18, - "parent": 2, - "transform": [ - [0.353553390593274, 0.25, -0.5, 0], - [0, 0.353553390593274, 0.707106781186548, 0], - [0.353553390593274, -0.25, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 14, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 19, - "parent": 18, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 20, - "parent": 19, + "id": 15, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 0, -1, 0], @@ -284,43 +219,43 @@ "name": "LayoutBlockFlow (positioned) DIV class='side side-2'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 8 + "transform": 7 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-3'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 11 + "transform": 9 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-4'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 14 + "transform": 11 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-5'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 17 + "transform": 13 }, { "name": "LayoutBlockFlow (positioned) DIV class='side side-6'", "bounds": [100, 100], "backgroundColor": "#00FF00CC", - "transform": 20 + "transform": 15 }, { "name": "LayoutBlockFlow (positioned) DIV class='box top left'", "bounds": [100, 150], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 21 + "transform": 16 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top right')", "bounds": [300, 300], - "transform": 22 + "transform": 16 } ], "transforms": [ @@ -377,26 +312,13 @@ }, { "id": 6, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { "id": 7, "parent": 6, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, "transform": [ [0, 0, -1, 0], [0, 1, 0, 0], @@ -408,27 +330,14 @@ "renderingContext": 1 }, { + "id": 8, + "parent": 3, + "flattenInheritedTransform": false, + "renderingContext": 1 + }, + { "id": 9, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 10, - "parent": 9, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 11, - "parent": 10, + "parent": 8, "transform": [ [-1, 0, 0, 0], [0, 1, 0, 0], @@ -440,27 +349,14 @@ "renderingContext": 1 }, { - "id": 12, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 10, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 13, - "parent": 12, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 14, - "parent": 13, + "id": 11, + "parent": 10, "transform": [ [0, 0, 1, 0], [0, 1, 0, 0], @@ -472,27 +368,14 @@ "renderingContext": 1 }, { - "id": 15, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 12, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 16, - "parent": 15, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 17, - "parent": 16, + "id": 13, + "parent": 12, "transform": [ [1, 0, 0, 0], [0, 0, 1, 0], @@ -504,27 +387,14 @@ "renderingContext": 1 }, { - "id": 18, - "parent": 2, - "transform": [ - [0.707106781186548, 0.5, -0.5, 0], - [0, 0.707106781186548, 0.707106781186548, 0], - [0.707106781186548, -0.5, 0.5, 0], - [0, 0, 0, 1] - ], - "origin": [50, 50], + "id": 14, + "parent": 3, "flattenInheritedTransform": false, "renderingContext": 1 }, { - "id": 19, - "parent": 18, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 20, - "parent": 19, + "id": 15, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 0, -1, 0], @@ -536,16 +406,7 @@ "renderingContext": 1 }, { - "id": 21, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 22, + "id": 16, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt index 4df263c..cc967ec 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/overlap-transforms-expected.txt
@@ -16,7 +16,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -31,16 +31,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -49,8 +40,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt index 0444493..bf7309d 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/rotate3d-overlap-expected.txt
@@ -26,20 +26,20 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [-5, 115], "bounds": [110, 110], - "transform": 4 + "transform": 2 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='composited box rotate45'", "position": [-5, -5], "bounds": [110, 110], "backgroundColor": "#0000FF", - "transform": 6 + "transform": 5 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='box')", "position": [-5, 115], "bounds": [110, 110], - "transform": 7 + "transform": 4 } ], "transforms": [ @@ -78,21 +78,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [172, 28, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [316, 28, 0, 1] ] }, { - "id": 6, - "parent": 5, + "id": 5, + "parent": 4, "transform": [ [0.707106781186548, 0.707106781186548, 0, 0], [-0.707106781186548, 0.707106781186548, 0, 0], @@ -100,15 +91,6 @@ [0, 0, 0, 1] ], "origin": [50, 50] - }, - { - "id": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [316, 28, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt index 4d2d52cb..12b80e89 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/spanOverlapsCanvas-expected.txt
@@ -14,7 +14,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='output')", "bounds": [100, 50], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -26,15 +26,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt index 092b880..d13b85f1 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/squashing-into-ancestor-clipping-layer-change-expected.txt
@@ -16,7 +16,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [8, 58, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 58, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt index e493af69..19552ad1 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/layer-creation/stacking-context-overlap-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV class='container')", "position": [0, 10], "bounds": [142, 142], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt index e282df8..51cba51 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/clip-descendents-expected.txt
@@ -31,20 +31,20 @@ "bounds": [100, 150], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 8 + "transform": 7 }, { "name": "LayoutBlockFlow (positioned) DIV class='container'", "position": [20, 10], "bounds": [60, 70], - "transform": 9 + "transform": 8 }, { "name": "LayoutBlockFlow DIV class='box'", "bounds": [100, 150], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 12 + "transform": 10 } ], "transforms": [ @@ -97,11 +97,12 @@ }, { "id": 6, + "parent": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [28, 220, 0, 1] + [22, 22, 0, 1] ] }, { @@ -111,40 +112,21 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [22, 22, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [0, 0, 1, 1] ] }, { + "id": 8, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [220, 220, 0, 1] + ] + }, + { "id": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [220, 220, 0, 1] - ] - }, - { - "id": 10, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [220, 220, 0, 1] - ] - }, - { - "id": 11, - "parent": 10, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -153,8 +135,8 @@ ] }, { - "id": 12, - "parent": 11, + "id": 10, + "parent": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt index 87ba463..f395ca3 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/composited-scrolling-paint-phases-expected.txt
@@ -38,7 +38,7 @@ "GraphicsLayerPaintCompositedScroll", "GraphicsLayerPaintDecoration" ], - "transform": 3 + "transform": 1 }, { "name": "Scrolling Contents Layer", @@ -61,7 +61,7 @@ "GraphicsLayerPaintMask", "GraphicsLayerPaintDecoration" ], - "transform": 4 + "transform": 1 } ], "transforms": [ @@ -83,24 +83,6 @@ [0, 0, 1, 0], [1, 11, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 20, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 20, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt index dc875d5..9ae1786 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt
@@ -14,12 +14,12 @@ { "name": "LayoutBlockFlow DIV id='scroller'", "bounds": [1200, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scrolling Contents Layer", "bounds": [1200, 10000], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -31,15 +31,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt index 1a068196..9b6fb5bc 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/rotate-clip-expected.txt
@@ -16,7 +16,7 @@ "bounds": [400, 400], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 5 + "transform": 3 } ], "transforms": [ @@ -42,27 +42,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [0.707106781186548, 0.707106781186548, 0, 0], - [-0.707106781186548, 0.707106781186548, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ], - "origin": [120, 120] - }, - { - "id": 5, - "parent": 4, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt index b3615cd..92b63cc 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scroll-parent-with-non-stacking-context-composited-ancestor-expected.txt
@@ -40,7 +40,7 @@ "position": [0, 44], "bounds": [60, 128], "backfaceVisibility": "hidden", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -71,16 +71,6 @@ [0, 0, 1, 0], [5, 5, 0, 1] ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [5, 5, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt index 65e7e38..2b75c2a 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-expected.txt
@@ -24,94 +24,94 @@ "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV class='outer B'", "position": [-21, -21], "bounds": [352, 294], - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 5 + "transform": 4 }, { "name": "Scrolling Contents Layer", "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 6 + "transform": 4 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='content'", "bounds": [196, 212], "contentsOpaque": true, "backgroundColor": "#DDDDDD", - "transform": 7 + "transform": 5 }, { "name": "LayoutBlockFlow (positioned) DIV class='outer C'", "position": [-21, -21], "bounds": [352, 294], - "transform": 8 + "transform": 6 }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 9 + "transform": 7 }, { "name": "Scrolling Contents Layer", "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 10 + "transform": 7 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='content'", "bounds": [196, 212], "contentsOpaque": true, "backgroundColor": "#DDDDDD", - "transform": 11 + "transform": 8 }, { "name": "LayoutBlockFlow (positioned) DIV class='outer D'", "position": [-21, -21], "bounds": [352, 294], - "transform": 12 + "transform": 9 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='clipper'", "position": [-7, -7], "bounds": [292, 200], - "transform": 13 + "transform": 10 }, { "name": "LayoutBlockFlow DIV class='scroller'", "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 15 + "transform": 11 }, { "name": "Scrolling Contents Layer", "position": [5, 5], "bounds": [220, 236], "backgroundColor": "#FFFFFF", - "transform": 17 + "transform": 11 }, { "name": "LayoutBlockFlow (relative positioned) DIV class='content'", "bounds": [196, 212], "contentsOpaque": true, "backgroundColor": "#DDDDDD", - "transform": 18 + "transform": 12 } ], "transforms": [ @@ -136,16 +136,6 @@ }, { "id": 3, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - }, - { - "id": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -154,23 +144,32 @@ ] }, { + "id": 4, + "parent": 3, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [41, 41, 0, 1] + ] + }, + { "id": 5, "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [41, 41, 0, 1] + [17, 17, 0, 1] ] }, { "id": 6, - "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [41, 41, 0, 1] + [21, 312, 0, 1] ] }, { @@ -180,36 +179,36 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [17, 17, 0, 1] + [40, 40, 0, 1] ] }, { "id": 8, + "parent": 7, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [21, 312, 0, 1] + [17, 17, 0, 1] ] }, { "id": 9, - "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [40, 40, 0, 1] + [370, 312, 0, 1] ] }, { "id": 10, - "parent": 8, + "parent": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [40, 40, 0, 1] + [16, 16, 0, 1] ] }, { @@ -219,71 +218,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [17, 17, 0, 1] + [24, 24, 0, 1] ] }, { "id": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 312, 0, 1] - ] - }, - { - "id": 13, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 14, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 15, - "parent": 14, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [24, 24, 0, 1] - ] - }, - { - "id": 16, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 17, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [24, 24, 0, 1] - ] - }, - { - "id": 18, - "parent": 17, + "parent": 11, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt index 6d42fdf..508ee8b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt
@@ -30,7 +30,7 @@ "position": [-30, -30], "bounds": [290, 230], "backgroundColor": "#FFFFFF", - "transform": 4 + "transform": 2 }, { "name": "Scrolling Contents Layer", @@ -69,16 +69,6 @@ [0, 0, 1, 0], [17, 17, 0, 1] ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt index eaa0c48b..eec7ca7 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/overflow/universal-accelerated-overflow-scroll-expected.txt
@@ -15,67 +15,215 @@ "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [85, 144], - "scrollPosition": [0, 59], + "transform": 2 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 1 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 1 + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'", + "bounds": [75, 24], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 3 }, { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')", + "position": [0, 56], + "bounds": [75, 24], + "transform": 3 + }, + { + "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'", + "bounds": [104, 104], + "transform": 4 + }, + { + "name": "Scrolling Contents Layer", + "position": [2, 2], + "bounds": [105, 144], + "transform": 5 + }, + { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], "transform": 4 }, { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], + "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'", "bounds": [80, 40], - "transform": 5 + "contentsOpaque": true, + "backgroundColor": "#800080", + "transform": 6 }, { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled'", + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')", + "position": [-21, -33], + "bounds": [75, 80], + "transform": 6 + }, + { + "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'", + "bounds": [104, 104], + "transform": 7 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 7 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 7 + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 8 + "transform": 9 }, { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled')", + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')", "position": [0, 56], "bounds": [75, 24], + "transform": 9 + }, + { + "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'", + "bounds": [104, 104], + "transform": 10 + }, + { + "name": "Scrolling Contents Layer", + "position": [2, 2], + "bounds": [85, 144], "transform": 11 }, { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-grandchildren' class='positionAbsolute overflow'", - "bounds": [104, 104], + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 10 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 10 + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'", + "bounds": [75, 24], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 12 }, { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')", + "position": [0, 56], + "bounds": [75, 24], + "transform": 12 + }, + { + "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'", + "bounds": [104, 104], + "transform": 13 + }, + { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [105, 144], - "scrollPosition": [0, 59], "transform": 14 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 15 + "transform": 13 }, { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-grandchildren' class='positionAbsolute positioned'", + "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", + "transform": 15 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')", + "position": [-21, -33], + "bounds": [75, 80], + "transform": 15 + }, + { + "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'", + "bounds": [104, 104], + "transform": 16 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 16 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')", + "position": [25, 65], + "bounds": [80, 40], + "transform": 16 + }, + { + "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'", + "bounds": [75, 24], + "contentsOpaque": true, + "backgroundColor": "#0000FF", "transform": 18 }, { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled')", + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')", + "position": [0, 56], + "bounds": [75, 24], + "transform": 18 + }, + { + "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'", + "bounds": [104, 104], + "transform": 19 + }, + { + "name": "Scroll Corner Layer", + "position": [87, 87], + "bounds": [15, 15], + "transform": 19 + }, + { + "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'", + "bounds": [80, 40], + "contentsOpaque": true, + "backgroundColor": "#800080", + "transform": 21 + }, + { + "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')", "position": [-21, -33], "bounds": [75, 80], "transform": 21 }, { - "name": "LayoutBlockFlow DIV id='container-absolute-not-contained' class='overflow'", + "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'", "bounds": [104, 104], "transform": 22 }, @@ -83,508 +231,354 @@ "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 23 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], - "bounds": [80, 40], - "transform": 24 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled'", - "bounds": [75, 24], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 27 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled')", - "position": [0, 56], - "bounds": [75, 24], - "transform": 30 - }, - { - "name": "LayoutBlockFlow DIV id='container-absolute-sibling-grandchildren-not-contained' class='overflow'", - "bounds": [104, 104], - "transform": 31 - }, - { - "name": "Scrolling Contents Layer", - "position": [2, 2], - "bounds": [85, 144], - "scrollPosition": [0, 59], - "transform": 33 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 34 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], - "bounds": [80, 40], - "transform": 35 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled'", - "bounds": [75, 24], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 38 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled')", - "position": [0, 56], - "bounds": [75, 24], - "transform": 41 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling-grandchildren' class='positionAbsolute overflow'", - "bounds": [104, 104], - "transform": 42 - }, - { - "name": "Scrolling Contents Layer", - "position": [2, 2], - "bounds": [105, 144], - "scrollPosition": [0, 59], - "transform": 44 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 45 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-grandchildren' class='positionAbsolute positioned'", - "bounds": [80, 40], - "contentsOpaque": true, - "backgroundColor": "#800080", - "transform": 48 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled')", - "position": [-21, -33], - "bounds": [75, 80], - "transform": 51 - }, - { - "name": "LayoutBlockFlow DIV id='container-absolute-sibling-not-contained' class='overflow'", - "bounds": [104, 104], - "transform": 52 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 53 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling-not-contained' class='positionAbsolute positioned')", - "position": [25, 65], - "bounds": [80, 40], - "transform": 54 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled'", - "bounds": [75, 24], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 57 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled')", - "position": [0, 56], - "bounds": [75, 24], - "transform": 60 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute-sibling' class='positionAbsolute overflow'", - "bounds": [104, 104], - "transform": 61 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 62 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute-sibling' class='positionAbsolute positioned'", - "bounds": [80, 40], - "contentsOpaque": true, - "backgroundColor": "#800080", - "transform": 65 - }, - { - "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled')", - "position": [-21, -33], - "bounds": [75, 80], - "transform": 68 - }, - { - "name": "LayoutBlockFlow (positioned) DIV id='container-absolute' class='positionAbsolute overflow'", - "bounds": [104, 104], - "transform": 69 - }, - { - "name": "Scroll Corner Layer", - "position": [87, 87], - "bounds": [15, 15], - "transform": 70 + "transform": 22 }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-absolute' class='positionAbsolute positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 73 + "transform": 24 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled')", "position": [-21, -33], "bounds": [75, 80], - "transform": 76 + "transform": 24 }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling-grandchildren' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 77 + "transform": 25 }, { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [85, 144], - "scrollPosition": [0, 59], - "transform": 79 + "transform": 26 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 80 + "transform": 25 }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling-grandchildren' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 81 + "transform": 27 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 84 + "transform": 28 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 87 + "transform": 28 }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-sibling' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 88 + "transform": 29 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 89 + "transform": 29 }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-sibling' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 90 + "transform": 30 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 93 + "transform": 32 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 96 + "transform": 32 }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed-grandchildren' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 97 + "transform": 33 }, { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [85, 144], - "scrollPosition": [0, 59], - "transform": 99 + "transform": 34 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 100 + "transform": 33 }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed-grandchildren' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 101 + "transform": 35 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 104 + "transform": 36 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 107 + "transform": 36 }, { "name": "LayoutBlockFlow (positioned) DIV id='container-fixed' class='positionAbsolute overflow'", "bounds": [104, 104], - "transform": 108 + "transform": 37 }, { "name": "Scroll Corner Layer", "position": [87, 87], "bounds": [15, 15], - "transform": 109 + "transform": 37 }, { "name": "LayoutBlockFlow (positioned) DIV id='positioned-fixed' class='positionFixed positioned'", "bounds": [80, 40], "contentsOpaque": true, "backgroundColor": "#800080", - "transform": 110 + "transform": 38 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 113 + "transform": 40 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled')", "position": [0, 56], "bounds": [75, 24], - "transform": 116 + "transform": 40 }, { "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren-not-contained' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 117 + "transform": 41 }, { "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-grandchildren' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 118 + "transform": 42 }, { "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling-not-contained' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 119 + "transform": 43 }, { "name": "LayoutBlockFlow (positioned) DIV id='sibling-absolute-sibling' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 120 + "transform": 44 }, { "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling-grandchildren' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 121 + "transform": 45 }, { "name": "LayoutBlockFlow (positioned) DIV id='sibling-fixed-sibling' class='positionFixed sibling'", "bounds": [50, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 122 + "transform": 46 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 125 + "transform": 47 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 128 + "transform": 47 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 131 + "transform": 48 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 134 + "transform": 48 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 137 + "transform": 49 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 140 + "transform": 49 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 143 + "transform": 50 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 146 + "transform": 50 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 149 + "transform": 51 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 152 + "transform": 51 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 155 + "transform": 52 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling-not-contained' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 158 + "transform": 52 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 161 + "transform": 53 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute-sibling' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 164 + "transform": 53 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 167 + "transform": 54 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-absolute' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 170 + "transform": 54 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 173 + "transform": 55 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 176 + "transform": 55 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 179 + "transform": 56 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-sibling' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 182 + "transform": 56 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 185 + "transform": 57 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed-grandchildren' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 188 + "transform": 57 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop'", "bounds": [75, 24], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 191 + "transform": 58 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='scrolled-fixed' class='scrolled onTop')", "position": [0, 56], "bounds": [75, 80], - "transform": 194 + "transform": 58 } ], "transforms": [ @@ -599,11 +593,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [10, 10, 0, 1] + [0, -59, 0, 1] ] }, { @@ -613,7 +608,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -59, 0, 1] + [6, 34, 0, 1] ] }, { @@ -622,30 +617,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [10, 10, 0, 1] + [130, 10, 0, 1] ] }, { "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -654,32 +631,51 @@ ] }, { + "id": 6, + "parent": 5, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [27, 67, 0, 1] + ] + }, + { + "id": 7, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [250, 10, 0, 1] + ] + }, + { "id": 8, "parent": 7, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [6, 34, 0, 1] + [0, -59, 0, 1] ] }, { "id": 9, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [10, 10, 0, 1] + [6, 34, 0, 1] ] }, { "id": 10, - "parent": 9, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -59, 0, 1] + [370, 10, 0, 1] ] }, { @@ -689,16 +685,17 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [6, 34, 0, 1] + [0, -59, 0, 1] ] }, { "id": 12, + "parent": 11, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [6, 34, 0, 1] ] }, { @@ -707,7 +704,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [10, 130, 0, 1] ] }, { @@ -722,11 +719,12 @@ }, { "id": 15, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [27, 67, 0, 1] ] }, { @@ -735,7 +733,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [130, 130, 0, 1] ] }, { @@ -755,7 +753,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [27, 67, 0, 1] + [6, 34, 0, 1] ] }, { @@ -764,7 +762,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [130, 10, 0, 1] + [250, 130, 0, 1] ] }, { @@ -793,25 +791,27 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [370, 130, 0, 1] ] }, { "id": 23, + "parent": 22, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [0, -59, 0, 1] ] }, { "id": 24, + "parent": 23, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [27, 67, 0, 1] ] }, { @@ -820,7 +820,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [10, 250, 0, 1] ] }, { @@ -835,6 +835,15 @@ }, { "id": 27, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [35, 315, 0, 1] + ] + }, + { + "id": 28, "parent": 26, "transform": [ [1, 0, 0, 0], @@ -844,17 +853,26 @@ ] }, { - "id": 28, + "id": 29, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [250, 10, 0, 1] + [130, 250, 0, 1] ] }, { - "id": 29, - "parent": 28, + "id": 30, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [155, 315, 0, 1] + ] + }, + { + "id": 31, + "parent": 29, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -863,8 +881,8 @@ ] }, { - "id": 30, - "parent": 29, + "id": 32, + "parent": 31, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -873,26 +891,17 @@ ] }, { - "id": 31, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 32, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { "id": 33, - "parent": 32, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [250, 250, 0, 1] + ] + }, + { + "id": 34, + "parent": 33, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -901,45 +910,17 @@ ] }, { - "id": 34, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { "id": 35, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [370, 10, 0, 1] + [275, 315, 0, 1] ] }, { "id": 36, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 37, - "parent": 36, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 38, - "parent": 37, + "parent": 34, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -948,12 +929,31 @@ ] }, { - "id": 39, + "id": 37, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [370, 10, 0, 1] + [370, 250, 0, 1] + ] + }, + { + "id": 38, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [395, 315, 0, 1] + ] + }, + { + "id": 39, + "parent": 37, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, -59, 0, 1] ] }, { @@ -963,731 +963,11 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -59, 0, 1] + [6, 34, 0, 1] ] }, { "id": 41, - "parent": 40, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 42, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 43, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 44, - "parent": 43, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 45, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 46, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 47, - "parent": 46, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 48, - "parent": 47, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 49, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 50, - "parent": 49, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 51, - "parent": 50, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 52, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 53, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 54, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 55, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 56, - "parent": 55, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 57, - "parent": 56, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 58, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 59, - "parent": 58, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 60, - "parent": 59, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 61, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 62, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 63, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 64, - "parent": 63, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 65, - "parent": 64, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 66, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 67, - "parent": 66, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 68, - "parent": 67, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 69, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 70, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 71, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 72, - "parent": 71, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 73, - "parent": 72, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 74, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 75, - "parent": 74, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 76, - "parent": 75, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [27, 67, 0, 1] - ] - }, - { - "id": 77, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 78, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 79, - "parent": 78, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 80, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 81, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [35, 315, 0, 1] - ] - }, - { - "id": 82, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 83, - "parent": 82, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 84, - "parent": 83, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 85, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 86, - "parent": 85, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 87, - "parent": 86, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 88, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 89, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 90, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [155, 315, 0, 1] - ] - }, - { - "id": 91, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 92, - "parent": 91, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 93, - "parent": 92, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 94, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 95, - "parent": 94, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 96, - "parent": 95, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 97, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 98, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 99, - "parent": 98, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 100, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 101, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [275, 315, 0, 1] - ] - }, - { - "id": 102, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 103, - "parent": 102, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 104, - "parent": 103, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 105, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 106, - "parent": 105, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 107, - "parent": 106, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 108, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 109, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 110, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [395, 315, 0, 1] - ] - }, - { - "id": 111, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 112, - "parent": 111, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 113, - "parent": 112, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 114, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 115, - "parent": 114, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 116, - "parent": 115, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 34, 0, 1] - ] - }, - { - "id": 117, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1696,7 +976,7 @@ ] }, { - "id": 118, + "id": 42, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1705,7 +985,7 @@ ] }, { - "id": 119, + "id": 43, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1714,7 +994,7 @@ ] }, { - "id": 120, + "id": 44, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1723,7 +1003,7 @@ ] }, { - "id": 121, + "id": 45, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1732,7 +1012,7 @@ ] }, { - "id": 122, + "id": 46, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1741,27 +1021,8 @@ ] }, { - "id": 123, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 124, - "parent": 123, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 125, - "parent": 124, + "id": 47, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1770,27 +1031,8 @@ ] }, { - "id": 126, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] - }, - { - "id": 127, - "parent": 126, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 128, - "parent": 127, + "id": 48, + "parent": 5, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1799,27 +1041,8 @@ ] }, { - "id": 129, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 10, 0, 1] - ] - }, - { - "id": 130, - "parent": 129, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 131, - "parent": 130, + "id": 49, + "parent": 8, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1828,27 +1051,8 @@ ] }, { - "id": 132, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 10, 0, 1] - ] - }, - { - "id": 133, - "parent": 132, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 134, - "parent": 133, + "id": 50, + "parent": 11, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1857,27 +1061,8 @@ ] }, { - "id": 135, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 10, 0, 1] - ] - }, - { - "id": 136, - "parent": 135, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 137, - "parent": 136, + "id": 51, + "parent": 14, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1886,27 +1071,8 @@ ] }, { - "id": 138, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 10, 0, 1] - ] - }, - { - "id": 139, - "parent": 138, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 140, - "parent": 139, + "id": 52, + "parent": 17, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1915,27 +1081,8 @@ ] }, { - "id": 141, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 142, - "parent": 141, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 143, - "parent": 142, + "id": 53, + "parent": 20, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1944,27 +1091,8 @@ ] }, { - "id": 144, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 10, 0, 1] - ] - }, - { - "id": 145, - "parent": 144, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 146, - "parent": 145, + "id": 54, + "parent": 23, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -1973,27 +1101,8 @@ ] }, { - "id": 147, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 148, - "parent": 147, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 149, - "parent": 148, + "id": 55, + "parent": 26, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -2002,27 +1111,8 @@ ] }, { - "id": 150, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 130, 0, 1] - ] - }, - { - "id": 151, - "parent": 150, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 152, - "parent": 151, + "id": 56, + "parent": 31, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -2031,27 +1121,8 @@ ] }, { - "id": 153, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 154, - "parent": 153, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 155, - "parent": 154, + "id": 57, + "parent": 34, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -2060,375 +1131,8 @@ ] }, { - "id": 156, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 130, 0, 1] - ] - }, - { - "id": 157, - "parent": 156, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 158, - "parent": 157, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 159, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 160, - "parent": 159, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 161, - "parent": 160, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 162, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 130, 0, 1] - ] - }, - { - "id": 163, - "parent": 162, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 164, - "parent": 163, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 165, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 166, - "parent": 165, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 167, - "parent": 166, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 168, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 130, 0, 1] - ] - }, - { - "id": 169, - "parent": 168, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 170, - "parent": 169, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 171, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 172, - "parent": 171, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 173, - "parent": 172, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 174, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 250, 0, 1] - ] - }, - { - "id": 175, - "parent": 174, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 176, - "parent": 175, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 177, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 178, - "parent": 177, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 179, - "parent": 178, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 180, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [130, 250, 0, 1] - ] - }, - { - "id": 181, - "parent": 180, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 182, - "parent": 181, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 183, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 184, - "parent": 183, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 185, - "parent": 184, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 186, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [250, 250, 0, 1] - ] - }, - { - "id": 187, - "parent": 186, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 188, - "parent": 187, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 189, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 190, - "parent": 189, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 191, - "parent": 190, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [6, 6, 0, 1] - ] - }, - { - "id": 192, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 250, 0, 1] - ] - }, - { - "id": 193, - "parent": 192, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -59, 0, 1] - ] - }, - { - "id": 194, - "parent": 193, + "id": 58, + "parent": 39, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt index a44c9077..7bb0a18 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rendering-contexts-expected.txt
@@ -18,14 +18,14 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 6 + "transform": 4 }, { "name": "LayoutBlockFlow DIV id='child' class='composited'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 11 + "transform": 5 } ], "transforms": [ @@ -45,59 +45,19 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] + "parent": 2, + "flattenInheritedTransform": false, + "renderingContext": 1 }, { "id": 4, "parent": 3, + "flattenInheritedTransform": false, "renderingContext": 1 }, { "id": 5, "parent": 4, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 6, - "parent": 5, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "renderingContext": 1 - }, - { - "id": 9, - "parent": 8, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 10, - "parent": 9, - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 11, - "parent": 10, "renderingContext": 2 } ]
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt index 04b06d4..f45865a7 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [215, 0], "transform": 1 }, { @@ -13,7 +12,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -28,16 +27,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [-215, 0, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt index a3b3d61..7bbcbdb3 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-absolute-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [1, 0], "transform": 1 }, { @@ -13,7 +12,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -28,16 +27,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [-1, 0, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt index 8597c97e..30ce4c0 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [215, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt index 4b508db..d020c6b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-fixed-overflow-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1000, 1000], "contentsOpaque": true, "backgroundColor": "#FF0000", - "scrollPosition": [1, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt index 1b419af..cd8aaea 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt index 31becff..3f60348 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-absolute-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt index ee03641..77d9bc1 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt index ee03641..77d9bc1 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/rtl/rtl-iframe-fixed-overflow-scrolled-expected.txt
@@ -15,7 +15,6 @@ "position": [15, 0], "bounds": [1000, 1000], "backgroundColor": "#FF0000", - "scrollPosition": [615, 0], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt index 3091d7d..4be6b751 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/scrollbars/nested-overlay-scrollbars-expected.txt
@@ -15,38 +15,37 @@ "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [400, 704], - "scrollPosition": [0, 304], - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV id='inner'", "bounds": [204, 204], - "transform": 6 + "transform": 3 }, { "name": "Scrolling Contents Layer", "position": [2, 2], "bounds": [5000, 9000], - "transform": 9 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV id='grey'", "bounds": [100, 800], "contentsOpaque": true, "backgroundColor": "#808080", - "transform": 10 + "transform": 4 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='spacer')", "position": [0, 2000], "bounds": [5000, 1000], - "transform": 11 + "transform": 4 }, { "name": "Scroll Corner Layer", "position": [195, 195], "bounds": [7, 7], - "transform": 14 + "transform": 3 } ], "transforms": [ @@ -61,11 +60,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [0, -304, 0, 1] ] }, { @@ -75,115 +75,18 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -304, 0, 1] + [2, 502, 0, 1] ] }, { "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 502, 0, 1] - ] - }, - { - "id": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 502, 0, 1] - ] - }, - { - "id": 10, - "parent": 9, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [2, 2, 0, 1] ] - }, - { - "id": 11, - "parent": 9, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 13, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -304, 0, 1] - ] - }, - { - "id": 14, - "parent": 13, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 502, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt index af4575dd..193a8264 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/add-remove-squashed-layers-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [180, 180], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -72,7 +63,7 @@ "reason": "chunk appeared" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -84,15 +75,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -124,7 +106,7 @@ "reason": "chunk disappeared" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -136,15 +118,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -181,7 +154,7 @@ "reason": "paint property change" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -193,15 +166,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -243,7 +207,7 @@ "reason": "paint property change" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -255,15 +219,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -310,7 +265,7 @@ "reason": "paint property change" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -322,15 +277,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt index 8cb719c..79f966d5 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/composited-bounds-for-negative-z-expected.txt
@@ -23,7 +23,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV)", "bounds": [285, 1000], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -44,15 +44,6 @@ [0, 0, 1, 0], [108, 100, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt index 013c63e..0a94427 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/invisible-layers-should-not-affect-geometry-expected.txt
@@ -16,7 +16,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box')", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [10, 10, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [10, 10, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt index f4840e8..5c610a81 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/move-squashing-layer-expected.txt
@@ -26,7 +26,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='squashed')", "position": [-92, -92], "bounds": [100, 100], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -47,15 +47,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt index 3e467c7..d616b34 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/opacity-squashed-owner-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='squashed')", "position": [8, -4], "bounds": [40, 90], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt index ab3de66..69933e97 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/repaint-child-of-squashed-expected.txt
@@ -18,7 +18,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [80, 80], "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -30,15 +30,6 @@ [0, 0, 1, 0], [50, 50, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 50, 0, 1] - ] } ] } @@ -70,7 +61,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -82,15 +73,6 @@ [0, 0, 1, 0], [50, 50, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 50, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt index 924b729..8079d9a0 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-1-expected.txt
@@ -29,7 +29,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-c' class='overlapping cyan')", "position": [0, 100], "bounds": [200, 300], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -50,15 +50,6 @@ [0, 0, 1, 0], [0, 100, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 100, 0, 1] - ] } ] } @@ -71,7 +62,6 @@ "bounds": [785, 1400], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 80], "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-f' class='overlapping lime'", @@ -105,7 +95,7 @@ "reason": "full layer" } ], - "transform": 4 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')", @@ -118,7 +108,7 @@ "reason": "full layer" } ], - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -142,35 +132,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -80, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 200, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -80, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -189,7 +151,6 @@ "bounds": [785, 1400], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 120], "transform": 1 }, { @@ -204,13 +165,13 @@ "bounds": [200, 100], "contentsOpaque": true, "backgroundColor": "#00FFFF", - "transform": 4 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-d' class='overlapping lime')", "position": [0, 100], "bounds": [200, 300], - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -234,35 +195,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -120, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 200, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -120, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -281,7 +214,6 @@ "bounds": [785, 1400], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 170], "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='paragraph-g' class='overlapping cyan'", @@ -315,7 +247,7 @@ "reason": "full layer" } ], - "transform": 4 + "transform": 3 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (relative positioned) DIV id='paragraph-e' class='overlapping cyan')", @@ -328,7 +260,7 @@ "reason": "full layer" } ], - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -352,35 +284,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -170, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 300, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -170, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt index 88f602814..996e3430 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-2-expected.txt
@@ -52,7 +52,6 @@ "bounds": [785, 4050], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 80], "transform": 1 }, { @@ -74,7 +73,7 @@ "bounds": [200, 4000], "contentsOpaque": true, "backgroundColor": "#00FFFF", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -89,16 +88,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -80, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt index b5be30aa..ae32965 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-above-fixed-3-expected.txt
@@ -36,7 +36,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -60,16 +60,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -88,7 +79,6 @@ "bounds": [785, 4100], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 10], "transform": 1 }, { @@ -102,21 +92,21 @@ "bounds": [100, 4000], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", "bounds": [200, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 7 + "transform": 4 } ], "transforms": [ @@ -131,16 +121,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -10, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -149,7 +130,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -158,27 +139,8 @@ ] }, { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -10, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, + "id": 4, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -197,7 +159,6 @@ "bounds": [785, 4100], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 110], "transform": 1 }, { @@ -217,14 +178,14 @@ "reason": "appeared" } ], - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", "bounds": [200, 100], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -239,16 +200,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -110, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -257,7 +209,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt index a339790c1..cc16ca2 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-compositing-hover-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -72,7 +63,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle2')", "position": [80, 80], "bounds": [180, 180], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -93,15 +84,6 @@ [0, 0, 1, 0], [180, 180, 0, 1] ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [180, 180, 0, 1] - ] } ] } @@ -126,20 +108,20 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [100, 100], - "transform": 2 + "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV class='box middle2'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box top')", "position": [80, 80], "bounds": [100, 100], - "transform": 4 + "transform": 2 } ], "transforms": [ @@ -158,24 +140,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [260, 260, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [260, 260, 0, 1] ] } @@ -202,14 +166,14 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [180, 180], - "transform": 2 + "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV class='box top'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -228,15 +192,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [100, 100, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [340, 340, 0, 1] ] } @@ -263,7 +218,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -275,15 +230,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt index a9afc551..0fde92b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-nephew-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [-85, -85], "bounds": [180, 190], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [125, 125, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [125, 125, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt index f8cf3be..6a1f58a 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-onto-transform-backing-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [-80, -80], "bounds": [260, 260], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -40,15 +40,6 @@ [0, 0, 0, 1] ], "origin": [50, 50] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt index 5bad095c..ed8c296 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-simple-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [-80, -80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt index 8b8b1d2..a3935bb 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-three-layers-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [-60, -60], "bounds": [180, 190], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt index f1cf5ab..e3b77d38 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-expected.txt
@@ -17,7 +17,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [-101, -101], "bounds": [281, 281], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -29,15 +29,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt index cb5de08..a8c968e 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-child-expected.txt
@@ -18,7 +18,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [-101, -101], "bounds": [281, 281], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -30,15 +30,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -70,7 +61,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -82,15 +73,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -127,7 +109,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -139,15 +121,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt index eed5dc91..3ef87fb 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squash-transform-repainting-transformed-child-expected.txt
@@ -18,7 +18,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='box middle')", "position": [-96, -96], "bounds": [276, 276], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -30,15 +30,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -70,7 +61,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -82,15 +73,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] } @@ -127,7 +109,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -139,15 +121,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt index 4619668..f84ab15 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-layer-loses-graphicslayer-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt index 1847d66..71571c75 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashed-repaints-expected.txt
@@ -20,7 +20,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [260, 260], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -32,15 +32,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -72,7 +63,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -84,15 +75,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -129,7 +111,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -141,15 +123,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -186,7 +159,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -198,15 +171,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] } @@ -243,7 +207,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -255,15 +219,6 @@ [0, 0, 1, 0], [60, 60, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [60, 60, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt index 2a61ab19..a8b4348 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/squashing/squashing-sparsity-heuristic-expected.txt
@@ -17,20 +17,20 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='A' class='overlap1')", "position": [80, 80], "bounds": [10, 10], - "transform": 2 + "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV id='B' class='overlap2'", "bounds": [10, 10], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 3 + "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV id='C' class='overlap3')", "position": [0, 80], "bounds": [25, 10], - "transform": 4 + "transform": 2 } ], "transforms": [ @@ -49,24 +49,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [60, 60, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [220, 220, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [220, 220, 0, 1] ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt index efc1d22..c6f594b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/compositing/update-paint-phases-expected.txt
@@ -31,7 +31,7 @@ "GraphicsLayerPaintOverflowContents", "GraphicsLayerPaintCompositedScroll" ], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", @@ -43,7 +43,7 @@ "GraphicsLayerPaintMask", "GraphicsLayerPaintDecoration" ], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -55,24 +55,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt index 770d1ff..2b4da3a 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -15,7 +15,7 @@ "bounds": [10, 10], "contentsOpaque": true, "backgroundColor": "#FFFF00", - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -27,15 +27,6 @@ [0, 0, 1, 0], [8, 18, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 18, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt index b118c48d..ab64e55 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -31,16 +31,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -49,8 +40,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt index 24b124c..31c8281 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/fast/borders/overflow-hidden-border-radius-force-backing-store-expected.txt
@@ -15,7 +15,7 @@ "name": "LayoutBlockFlow DIV id='content'", "bounds": [285, 1000], "contentsOpaque": true, - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -27,15 +27,6 @@ [0, 0, 1, 0], [50, 50, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [50, 50, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt index 4047644..b5a8000b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
@@ -17,7 +17,6 @@ "bounds": [400, 2000], "contentsOpaque": true, "backgroundColor": "#0000FF", - "scrollPosition": [0, 1600], "paintInvalidations": [ { "object": "Scrolling background of LayoutBlockFlow DIV id='container'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt index 4be9d80..b5a8000b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
@@ -17,7 +17,6 @@ "bounds": [400, 2000], "contentsOpaque": true, "backgroundColor": "#0000FF", - "scrollPosition": [0, 1600], "paintInvalidations": [ { "object": "Scrolling background of LayoutBlockFlow DIV id='container'", @@ -25,19 +24,19 @@ "reason": "incremental" } ], - "transform": 3 + "transform": 2 }, { "name": "Horizontal Scrollbar Layer", "position": [0, 400], "bounds": [400, 0], - "transform": 4 + "transform": 1 }, { "name": "Vertical Scrollbar Layer", "position": [400, 0], "bounds": [0, 400], - "transform": 5 + "transform": 1 } ], "transforms": [ @@ -52,40 +51,13 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, -1600, 0, 1] ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt index 329dc4ba..f2c232a0 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 30020], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, { @@ -13,20 +12,20 @@ "bounds": [500, 500], "contentsOpaque": true, "backgroundColor": "#00FFFF", - "transform": 3 + "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV class='containerOverlapsComposited')", "position": [12, 12], "bounds": [100, 30000], - "transform": 5 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV class='fixed'", "bounds": [50, 50], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -41,44 +40,16 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [8, 8, 0, 1] ] }, { "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt index bbf39de4..1f69818 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
@@ -11,7 +11,7 @@ "contentsOpaque": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow HTML (foreground) Layer", @@ -23,7 +23,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -38,16 +38,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -200, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -56,7 +47,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt index cc6c397..1ca9937 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
@@ -24,7 +24,7 @@ "reason": "disappeared" } ], - "transform": 2 + "transform": 1 }, { "name": "LayoutBlockFlow (positioned) DIV id='target'", @@ -38,7 +38,7 @@ "reason": "full layer" } ], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -57,15 +57,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [50, 50, 0, 1] ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt index 9e81f13c..172ae11c 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt index 02659d8..e45da36f 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/new-stacking-context-expected.txt
@@ -21,19 +21,19 @@ "reason": "chunk disappeared" } ], - "transform": 2 + "transform": 1 }, { "name": "Horizontal Scrollbar Layer", "position": [0, 100], "bounds": [100, 0], - "transform": 3 + "transform": 1 }, { "name": "Vertical Scrollbar Layer", "position": [100, 0], "bounds": [0, 100], - "transform": 4 + "transform": 1 }, { "name": "LayoutBlockFlow DIV id='target'", @@ -47,7 +47,7 @@ "reason": "full layer" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -59,33 +59,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt index e4a4fc9..b15e18f5 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt index c2621813..caf2117 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt index 0139d73..58ea852 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt index e9f82b97..d2631bd 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt index 889bb44..0345e98 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/scrolling-without-painting-expected.txt
@@ -15,14 +15,13 @@ "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [185, 1025], - "scrollPosition": [0, 25], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [186, 186], "bounds": [15, 15], - "transform": 4 + "transform": 1 } ], "transforms": [ @@ -37,31 +36,13 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, -25, 0, 1] ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt index cc80b47d..9fb8948 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "scrollPosition": [500, 400], "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'", @@ -22,13 +21,13 @@ "reason": "background" } ], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [385, 285], "bounds": [15, 15], - "transform": 4 + "transform": 1 } ], "transforms": [ @@ -43,31 +42,13 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [-500, -400, 0, 1] ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt index 748d2d1f..689f19f6 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2008, 1516], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [900, 700], "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='content'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt index db7eb2f..29d7340 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
@@ -15,7 +15,6 @@ { "name": "Scrolling Contents Layer", "bounds": [3000, 3000], - "scrollPosition": [0, 400], "transform": 2 }, { @@ -23,12 +22,12 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow DIV id='container' (foreground) Layer", "bounds": [3000, 3000], - "transform": 4 + "transform": 2 }, { "name": "Scroll Corner Layer", @@ -56,26 +55,6 @@ [0, 0, 1, 0], [0, -400, 0, 1] ] - }, - { - "id": 3, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt index 38ab911f..ad9e0cce 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt index b21768ac..bd0ecef 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 5 + "transform": 2 } ], "transforms": [ @@ -49,22 +49,6 @@ "parent": 2, "flattenInheritedTransform": false, "renderingContext": 1 - }, - { - "id": 4, - "renderingContext": 1 - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false, - "renderingContext": 1 } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt index da2b7a44..97f5a96 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
@@ -16,7 +16,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt index 94e3bda..baa4049 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/compositing/updating-scrolling-content-expected.txt
@@ -21,13 +21,13 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [185, 185], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -39,24 +39,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt index b7bb166..0e443de 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -22,7 +22,7 @@ "reason": "geometry" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -34,15 +34,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt index 37c753a..eb67efc 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -16,7 +16,7 @@ "bounds": [100, 200], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index 7cd80a19..2db28e78 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2350], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1750], "paintInvalidations": [ { "object": "LayoutBlockFlow HTML",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt index 7cdf7e9a..fa435443 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1016, 585], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [216, 0], "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt index 67022869..70e24901 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
@@ -33,13 +33,13 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [195, 195], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -51,24 +51,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt index eb20064..8419448 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/absolute-position-changed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 500], "paintInvalidations": [ { "object": "LayoutBlockFlow HTML", @@ -34,7 +33,7 @@ "reason": "full layer" } ], - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -58,16 +57,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -500, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt index 187cf27..aa051a5 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 20], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt index 9e2a3c95..0e30813 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-scale-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t' class='green translated'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt index 95229ff..1f47949 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/position/fixed-tranformed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 1000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 50], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt index e018aec1..2227ec3 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/raster-under-invalidation-checking-expected.txt
@@ -955,7 +955,6 @@ { "name": "Scrolling Contents Layer", "bounds": [4000, 20060], - "scrollPosition": [50, 9950], "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='target4'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt index 298d5b10..0b1ab6c 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute red'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt index ef2b843..15d8f890 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt index 7788a86..8d11bfa 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt index dc4d87b..4725b20 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/repaint-overlay/layers-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 20], "transform": 1 }, { @@ -19,12 +18,12 @@ "reason": "background" } ], - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='scrollable'", "bounds": [302, 302], - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow (relative positioned) DIV id='transform'", @@ -38,19 +37,19 @@ "reason": "background" } ], - "transform": 7 + "transform": 6 }, { "name": "Horizontal Scrollbar Layer", "position": [1, 301], "bounds": [300, 0], - "transform": 4 + "transform": 3 }, { "name": "Vertical Scrollbar Layer", "position": [301, 1], "bounds": [0, 300], - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -65,11 +64,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -20, 0, 1] + [40, 50, 0, 1] ] }, { @@ -79,7 +79,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [40, 50, 0, 1] + [64, 53, 0, 1] ] }, { @@ -89,7 +89,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [64, 53, 0, 1] + [0, -30, 0, 1] ] }, { @@ -99,23 +99,13 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -30, 0, 1] + [89, 78, 0, 1] ] }, { "id": 6, "parent": 5, "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [89, 78, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ [3.53553390593274, 3.53553390593274, 0, 0], [-3.53553390593274, 3.53553390593274, 0, 0], [0, 0, 1, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt index 5625380..d383459 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [205, 1022], - "scrollPosition": [0, 922], "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='text'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt index 68cf9e1..cd63182 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
@@ -15,25 +15,24 @@ "name": "Scrolling Contents Layer", "bounds": [300, 516], "backgroundColor": "#EEEEEE", - "scrollPosition": [0, 20], - "transform": 4 + "transform": 3 }, { "name": "LayoutBlockFlow BODY", "bounds": [284, 500], - "transform": 5 + "transform": 4 }, { "name": "Horizontal Scrollbar Layer", "position": [0, 150], "bounds": [300, 0], - "transform": 7 + "transform": 2 }, { "name": "Vertical Scrollbar Layer", "position": [300, 0], "bounds": [0, 150], - "transform": 9 + "transform": 2 } ], "transforms": [ @@ -48,11 +47,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [2, 2, 0, 1] ] }, { @@ -62,7 +62,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [0, -20, 0, 1] ] }, { @@ -72,56 +72,8 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -20, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt index adad0f8..121555dc 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 500], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='t' class='green absolute'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt index 7b4df14..da256ca 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 500], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt index 3fdfe84..8e8ccca7 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt index 3fdfe84..8e8ccca7 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt index b548e7a..3e5955f 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt index 3fdfe84..8e8ccca7 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt index 4f33add..15e6b7e 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt index ef10b2c2..ca2bc98 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2001], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 400], "transform": 1 }, { @@ -14,7 +13,7 @@ "contentsOpaque": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed'", @@ -42,16 +41,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt index eb1f9d77..eef35cc2 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2001], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 400], "transform": 1 }, { @@ -14,7 +13,7 @@ "contentsOpaque": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutBlockFlow (positioned) DIV id='fixed'", @@ -42,16 +41,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index 6fe796d..792cce6 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2000, 2000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [200, 200], "paintInvalidations": [ { "object": "InlineTextBox 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt index 6efacfc..cbf5035 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [185, 4900], - "scrollPosition": [0, 2350], "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index b1c36be..45da238 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 4936], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 2350], "paintInvalidations": [ { "object": "InlineTextBox 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt index 9916a80..7cad2ed6 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 400], "paintInvalidations": [ { "object": "LayoutBlockFlow DIV id='div'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt index ca1077c..44fe7b6 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [685, 600], - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt index f45c4941..a39f710 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [285, 900], - "scrollPosition": [0, 150], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt index 79f5fa4..9e55ad2a 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -17,7 +17,6 @@ "bounds": [185, 552], "contentsOpaque": true, "backgroundColor": "#0000FF", - "scrollPosition": [0, 367], "paintInvalidations": [ { "object": "Scrolling background of LayoutBlockFlow DIV id='scroller'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt index 5ce7f5df..9d4792f 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 1895], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV id='ul'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt index decd7a3..365697b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt index 64c4b228..228b835 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt index 32f5d31..c092287 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt index 4d8b3371..7dadb065 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 5056], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1400], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 29673e9..3862a3f 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@ "bounds": [200, 1620], "contentsOpaque": true, "backgroundColor": "#D3D3D3", - "scrollPosition": [0, 450], "paintInvalidations": [ { "object": "InlineTextBox 'test'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index b3a1c266..7896ecc 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1026, 996], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 411], "paintInvalidations": [ { "object": "InlineTextBox 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt index 6a4985cc..4141e86 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -30,7 +30,7 @@ "name": "Squashing Layer (first squashed layer: LayoutBlockFlow (positioned) DIV)", "position": [100, 100], "bounds": [300, 440], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -42,15 +42,6 @@ [0, 0, 1, 0], [8, 58, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 58, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt index bfc70a5..09a85d13 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-cell-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutTableCell TD id='moveMe'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt index 683375a..a67c8b5 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt index 00fe7ae..1d945111 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt index 49592e8a..6ddbea9 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1566, 1781], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [766, 1181], "paintInvalidations": [ { "object": "LayoutBlockFlow (relative positioned) DIV class='relative red'",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index 07bf197..a34083d1 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@ "bounds": [939, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [339, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer", @@ -35,7 +34,6 @@ "bounds": [939, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [539, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt deleted file mode 100644 index 87ba463..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/composited-scrolling-paint-phases-expected.txt +++ /dev/null
@@ -1,108 +0,0 @@ -{ - "layers": [ - { - "name": "LayoutBlockFlow HTML", - "bounds": [800, 242], - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ] - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='composited'", - "bounds": [80, 10], - "contentsOpaque": true, - "backgroundColor": "#008000", - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ], - "transform": 2 - }, - { - "name": "LayoutBlockFlow HTML (foreground) Layer", - "bounds": [800, 242], - "paintingPhases": [ - "GraphicsLayerPaintForeground" - ] - }, - { - "name": "LayoutBlockFlow DIV class='container'", - "bounds": [202, 202], - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintCompositedScroll", - "GraphicsLayerPaintDecoration" - ], - "transform": 3 - }, - { - "name": "Scrolling Contents Layer", - "position": [1, 1], - "bounds": [185, 715], - "paintingPhases": [ - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintOverflowContents", - "GraphicsLayerPaintCompositedScroll" - ], - "transform": 1 - }, - { - "name": "Scroll Corner Layer", - "position": [186, 186], - "bounds": [15, 15], - "paintingPhases": [ - "GraphicsLayerPaintBackground", - "GraphicsLayerPaintForeground", - "GraphicsLayerPaintMask", - "GraphicsLayerPaintDecoration" - ], - "transform": 4 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 20, 0, 1] - ] - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 11, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 20, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [28, 20, 0, 1] - ] - } - ] -} - -
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt index 454055cf..6b5354b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [285, 285], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -32,24 +32,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt index 454055cf..6b5354b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [285, 285], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -32,24 +32,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt index 454055cf..6b5354b 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [285, 285], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -32,24 +32,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt deleted file mode 100644 index dc875d5..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/reparented-scrollbars-non-sc-anc-expected.txt +++ /dev/null
@@ -1,46 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [1208, 821], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV id='positioned'", - "bounds": [1200, 800], - "transform": 1 - }, - { - "name": "LayoutBlockFlow DIV id='scroller'", - "bounds": [1200, 1000], - "transform": 2 - }, - { - "name": "Scrolling Contents Layer", - "bounds": [1200, 10000], - "transform": 2 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/rotate-clip-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/rotate-clip-expected.txt deleted file mode 100644 index 1a068196..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/rotate-clip-expected.txt +++ /dev/null
@@ -1,75 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow DIV", - "bounds": [240, 240], - "transform": 2 - }, - { - "name": "LayoutBlockFlow DIV", - "bounds": [400, 400], - "contentsOpaque": true, - "backgroundColor": "#0000FF", - "transform": 5 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] - }, - { - "id": 2, - "parent": 1, - "transform": [ - [0.707106781186548, 0.707106781186548, 0, 0], - [-0.707106781186548, 0.707106781186548, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ], - "origin": [120, 120] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [108, 100, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [0.707106781186548, 0.707106781186548, 0, 0], - [-0.707106781186548, 0.707106781186548, 0, 0], - [0, 0, 1, 0], - [0, 0, 0, 1] - ], - "origin": [120, 120] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [20, 20, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt deleted file mode 100644 index 65e7e38..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-expected.txt +++ /dev/null
@@ -1,296 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer A'", - "position": [-21, -21], - "bounds": [352, 294], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='scroller'", - "position": [-30, -30], - "bounds": [290, 230], - "backgroundColor": "#FFFFFF", - "transform": 2 - }, - { - "name": "Scrolling Contents Layer", - "position": [5, 5], - "bounds": [220, 236], - "backgroundColor": "#FFFFFF", - "transform": 3 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer B'", - "position": [-21, -21], - "bounds": [352, 294], - "transform": 4 - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [-30, -30], - "bounds": [290, 230], - "backgroundColor": "#FFFFFF", - "transform": 5 - }, - { - "name": "Scrolling Contents Layer", - "position": [5, 5], - "bounds": [220, 236], - "backgroundColor": "#FFFFFF", - "transform": 6 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "bounds": [196, 212], - "contentsOpaque": true, - "backgroundColor": "#DDDDDD", - "transform": 7 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer C'", - "position": [-21, -21], - "bounds": [352, 294], - "transform": 8 - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [-30, -30], - "bounds": [290, 230], - "backgroundColor": "#FFFFFF", - "transform": 9 - }, - { - "name": "Scrolling Contents Layer", - "position": [5, 5], - "bounds": [220, 236], - "backgroundColor": "#FFFFFF", - "transform": 10 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "bounds": [196, 212], - "contentsOpaque": true, - "backgroundColor": "#DDDDDD", - "transform": 11 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer D'", - "position": [-21, -21], - "bounds": [352, 294], - "transform": 12 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='clipper'", - "position": [-7, -7], - "bounds": [292, 200], - "transform": 13 - }, - { - "name": "LayoutBlockFlow DIV class='scroller'", - "position": [-30, -30], - "bounds": [290, 230], - "backgroundColor": "#FFFFFF", - "transform": 15 - }, - { - "name": "Scrolling Contents Layer", - "position": [5, 5], - "bounds": [220, 236], - "backgroundColor": "#FFFFFF", - "transform": 17 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "bounds": [196, 212], - "contentsOpaque": true, - "backgroundColor": "#DDDDDD", - "transform": 18 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [21, 21, 0, 1] - ] - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - }, - { - "id": 3, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 21, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - }, - { - "id": 6, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [17, 17, 0, 1] - ] - }, - { - "id": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [21, 312, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [40, 40, 0, 1] - ] - }, - { - "id": 10, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [40, 40, 0, 1] - ] - }, - { - "id": 11, - "parent": 10, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [17, 17, 0, 1] - ] - }, - { - "id": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [370, 312, 0, 1] - ] - }, - { - "id": 13, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 14, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 15, - "parent": 14, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [24, 24, 0, 1] - ] - }, - { - "id": 16, - "parent": 12, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 17, - "parent": 16, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [24, 24, 0, 1] - ] - }, - { - "id": 18, - "parent": 17, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [17, 17, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt deleted file mode 100644 index 6d42fdf..0000000 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/compositing/overflow/scrollbar-layer-placement-negative-z-index-child-positioned-expected.txt +++ /dev/null
@@ -1,85 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer'", - "position": [-21, -21], - "bounds": [352, 294], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='content'", - "bounds": [196, 212], - "contentsOpaque": true, - "backgroundColor": "#DDDDDD", - "transform": 3 - }, - { - "name": "LayoutBlockFlow (positioned) DIV class='outer' (foreground) Layer", - "position": [-21, -21], - "bounds": [352, 294], - "transform": 1 - }, - { - "name": "LayoutBlockFlow (relative positioned) DIV class='scroller'", - "position": [-30, -30], - "bounds": [290, 230], - "backgroundColor": "#FFFFFF", - "transform": 4 - }, - { - "name": "Scrolling Contents Layer", - "position": [5, 5], - "bounds": [220, 236], - "backgroundColor": "#FFFFFF", - "transform": 2 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [21, 21, 0, 1] - ] - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [17, 17, 0, 1] - ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [41, 41, 0, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt index ebbc6a0..c22a880c 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
@@ -14,19 +14,18 @@ "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [400, 602], - "scrollPosition": [0, 302], "transform": 1 }, { "name": "LayoutBlockFlow DIV id='inner'", "bounds": [102, 102], - "transform": 3 + "transform": 2 }, { "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [100, 500], - "transform": 5 + "transform": 2 } ], "transforms": [ @@ -41,35 +40,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -302, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 501, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -302, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt index ad38d645..22d34d94 100644 --- a/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt +++ b/third_party/blink/web_tests/flag-specific/disable-blink-features=LayoutNG/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@ "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -31,16 +31,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -49,8 +40,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test-expected.txt b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test-expected.txt new file mode 100644 index 0000000..a2064d8 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test-expected.txt
@@ -0,0 +1,6 @@ +Performance panel loaded. +Loading a performance model. +Running aXe on the event log pane. +aXe violations: [] + +
diff --git a/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test.js b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test.js new file mode 100644 index 0000000..af7be99 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/devtools/a11y-axe-core/performance/performance_event_log_a11y_test.js
@@ -0,0 +1,25 @@ +// Copyright 2019 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +(async function() { + await TestRunner.loadModule('axe_core_test_runner'); + await TestRunner.loadModule('performance_test_runner'); + + await TestRunner.showPanel('timeline'); + TestRunner.addResult('Performance panel loaded.'); + + const tabbedPane = UI.panels.timeline._flameChart._detailsView._tabbedPane; + tabbedPane.selectTab(Timeline.TimelineDetailsView.Tab.EventLog); + + TestRunner.addResult('Loading a performance model.'); + const view = tabbedPane.visibleView; + const model = PerformanceTestRunner.createPerformanceModelWithEvents([{}]); + view.setModel(model, PerformanceTestRunner.mainTrack()); + view.updateContents(Timeline.TimelineSelection.fromRange( + model.timelineModel().minimumRecordTime(), model.timelineModel().maximumRecordTime())); + + TestRunner.addResult('Running aXe on the event log pane.'); + await AxeCoreTestRunner.runValidation(view.contentElement); + TestRunner.completeTest(); +})();
diff --git a/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt b/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt index d4a97f9..cb1fad6 100644 --- a/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/background/animated-svg-background-offscreen-firstline-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2008, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "transform": 1 } ],
diff --git a/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt b/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt index aec4a42..d3f63787 100644 --- a/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/background/full-viewport-repaint-for-background-attachment-fixed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 5000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "paintInvalidations": [ { "object": "Scrolling background of LayoutView #document",
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt index d1718706..db8c4146 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-composited-expected.txt
@@ -17,7 +17,6 @@ "bounds": [400, 2000], "contentsOpaque": true, "backgroundColor": "#0000FF", - "scrollPosition": [0, 1600], "paintInvalidations": [ { "object": "Scrolling background of LayoutNGBlockFlow DIV id='container'",
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt index a128a84..db8c4146 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/background-attachment-local-equivalent-expected.txt
@@ -17,7 +17,6 @@ "bounds": [400, 2000], "contentsOpaque": true, "backgroundColor": "#0000FF", - "scrollPosition": [0, 1600], "paintInvalidations": [ { "object": "Scrolling background of LayoutNGBlockFlow DIV id='container'", @@ -25,19 +24,19 @@ "reason": "incremental" } ], - "transform": 3 + "transform": 2 }, { "name": "Horizontal Scrollbar Layer", "position": [0, 400], "bounds": [400, 0], - "transform": 4 + "transform": 1 }, { "name": "Vertical Scrollbar Layer", "position": [400, 0], "bounds": [0, 400], - "transform": 5 + "transform": 1 } ], "transforms": [ @@ -52,40 +51,13 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, -1600, 0, 1] ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt index 74d61db..6125265f 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-pos-inside-composited-intermediate-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 30020], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, { @@ -13,20 +12,20 @@ "bounds": [500, 500], "contentsOpaque": true, "backgroundColor": "#00FFFF", - "transform": 3 + "transform": 2 }, { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV class='containerOverlapsComposited')", "position": [12, 12], "bounds": [100, 30000], - "transform": 5 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='fixed'", "bounds": [50, 50], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 6 + "transform": 3 } ], "transforms": [ @@ -41,44 +40,16 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -100, 0, 1] + [8, 8, 0, 1] ] }, { "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -100, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt index ce27241..4677f96 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/fixed-scroll-in-empty-root-layer-expected.txt
@@ -11,7 +11,7 @@ "contentsOpaque": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow HTML (foreground) Layer", @@ -23,7 +23,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -38,16 +38,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -200, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -56,7 +47,7 @@ ] }, { - "id": 4, + "id": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt index cbdf227..7e4b43b7 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/invalidate-when-leaving-squashed-layer-expected.txt
@@ -24,7 +24,7 @@ "reason": "disappeared" } ], - "transform": 2 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='target'", @@ -38,7 +38,7 @@ "reason": "full layer" } ], - "transform": 3 + "transform": 2 } ], "transforms": [ @@ -57,15 +57,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [50, 50, 0, 1] ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt index de9e9fa3..c405f6c 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/invalidation-for-subpixel-offset-of-squashed-layer-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt index 300e926..433a9042 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/new-stacking-context-expected.txt
@@ -21,19 +21,19 @@ "reason": "chunk disappeared" } ], - "transform": 2 + "transform": 1 }, { "name": "Horizontal Scrollbar Layer", "position": [0, 100], "bounds": [100, 0], - "transform": 3 + "transform": 1 }, { "name": "Vertical Scrollbar Layer", "position": [100, 0], "bounds": [0, 100], - "transform": 4 + "transform": 1 }, { "name": "LayoutNGBlockFlow DIV id='target'", @@ -47,7 +47,7 @@ "reason": "full layer" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -59,33 +59,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt index 42b3c73..38b201d 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-squashed-layer-in-rect-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt index 4fbea54..004cbd8 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/repaint-via-layout-offset-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt index 72daa84..ed08e35 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-no-content-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 } ],
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt index b943454..5321425a 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-layer-out-of-view-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt index 396f579..b5504b7 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/scroll-fixed-squahed-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt index dc00d2d..b3dc2123 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-without-painting-expected.txt
@@ -15,14 +15,13 @@ "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [185, 1025], - "scrollPosition": [0, 25], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [186, 186], "bounds": [15, 15], - "transform": 4 + "transform": 1 } ], "transforms": [ @@ -37,31 +36,13 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, -25, 0, 1] ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt index 13cd5495..d157e13 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-overflow-scrolling-layer-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "scrollPosition": [500, 400], "paintInvalidations": [ { "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='content'", @@ -22,13 +21,13 @@ "reason": "background" } ], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [385, 285], "bounds": [15, 15], - "transform": 4 + "transform": 1 } ], "transforms": [ @@ -43,31 +42,13 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [-500, -400, 0, 1] ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt index 81a1b91..51d462b9 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-clip-composited-viewport-scrolling-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2008, 1516], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [900, 700], "paintInvalidations": [ { "object": "NGPhysicalBoxFragment LayoutNGBlockFlow DIV id='content'",
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt index a01b1b5..a698223 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/should-not-paint-outline-on-foreground-layer-expected.txt
@@ -15,7 +15,6 @@ { "name": "Scrolling Contents Layer", "bounds": [3000, 3000], - "scrollPosition": [0, 400], "transform": 2 }, { @@ -23,12 +22,12 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow DIV id='container' (foreground) Layer", "bounds": [3000, 3000], - "transform": 4 + "transform": 2 }, { "name": "Scroll Corner Layer", @@ -56,26 +55,6 @@ [0, 0, 1, 0], [0, -400, 0, 1] ] - }, - { - "id": 3, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] - }, - { - "id": 4, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt index 4486267..52b4a19 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/squash-partial-repaint-inside-squashed-layer-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -36,15 +36,6 @@ [0, 0, 1, 0], [100, 100, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [100, 100, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt index 94770dc..c9767c85 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/squashing-inside-preserve-3d-element-expected.txt
@@ -24,7 +24,7 @@ "reason": "background" } ], - "transform": 5 + "transform": 2 } ], "transforms": [ @@ -49,22 +49,6 @@ "parent": 2, "flattenInheritedTransform": false, "renderingContext": 1 - }, - { - "id": 4, - "renderingContext": 1 - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false, - "renderingContext": 1 } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt index 20e720a8..34a4581 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/tricky-element-removal-crash-expected.txt
@@ -16,7 +16,7 @@ { "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)", "bounds": [100, 100], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt index 36692c6f..b7d7dd2 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/updating-scrolling-content-expected.txt
@@ -21,13 +21,13 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [185, 185], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -39,24 +39,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt b/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt index a87b336..c3970f3 100644 --- a/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/outline/outline-change-vertical-rl-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1016, 585], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [216, 0], "paintInvalidations": [ { "object": "LayoutNGBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt b/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt index 39ac02bf..970441d 100644 --- a/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/overflow/composited-overflow-with-borderbox-background-expected.txt
@@ -33,13 +33,13 @@ "reason": "background" } ], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [195, 195], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -51,24 +51,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt b/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt index 239bd1d..653436f 100644 --- a/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/position/absolute-position-changed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 500], "paintInvalidations": [ { "object": "LayoutNGBlockFlow HTML", @@ -34,7 +33,7 @@ "reason": "full layer" } ], - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -58,16 +57,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -500, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt b/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt index d55d84a..03da40d 100644 --- a/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/position/fixed-scale-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV id='t' class='green translated'",
diff --git a/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt b/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt index 80bbfed..3189fc7b 100644 --- a/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/position/fixed-tranformed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 1000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 50], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt b/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt index fb44ccda..7cd4593 100644 --- a/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/raster-under-invalidation-checking-expected.txt
@@ -955,7 +955,6 @@ { "name": "Scrolling Contents Layer", "bounds": [4000, 20060], - "scrollPosition": [50, 9950], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (relative positioned) DIV id='target4'",
diff --git a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt index 0b989a9..3ef0134 100644 --- a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-absolute-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV class='absolute red'",
diff --git a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt index 40df891..0a8c544 100644 --- a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-layer-with-reflection-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt index 7474843..d556bf70 100644 --- a/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/reflection/scroll-fixed-reflected-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green reflected'",
diff --git a/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt b/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt index c073a92..80ea4e4 100644 --- a/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/repaint-overlay/layers-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 20], "transform": 1 }, { @@ -19,12 +18,12 @@ "reason": "background" } ], - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='scrollable'", "bounds": [302, 302], - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow (relative positioned) DIV id='transform'", @@ -38,19 +37,19 @@ "reason": "background" } ], - "transform": 7 + "transform": 6 }, { "name": "Horizontal Scrollbar Layer", "position": [1, 301], "bounds": [300, 0], - "transform": 4 + "transform": 3 }, { "name": "Vertical Scrollbar Layer", "position": [301, 1], "bounds": [0, 300], - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -65,11 +64,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -20, 0, 1] + [40, 50, 0, 1] ] }, { @@ -79,7 +79,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [40, 50, 0, 1] + [64, 53, 0, 1] ] }, { @@ -89,7 +89,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [64, 53, 0, 1] + [0, -30, 0, 1] ] }, { @@ -99,23 +99,13 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -30, 0, 1] + [89, 78, 0, 1] ] }, { "id": 6, "parent": 5, "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [89, 78, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ [3.53553390593274, 3.53553390593274, 0, 0], [-3.53553390593274, 3.53553390593274, 0, 0], [0, 0, 1, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt index 58fc1b59..6b1e65d 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/composited-iframe-scroll-repaint-expected.txt
@@ -15,25 +15,24 @@ "name": "Scrolling Contents Layer", "bounds": [300, 516], "backgroundColor": "#EEEEEE", - "scrollPosition": [0, 20], - "transform": 4 + "transform": 3 }, { "name": "LayoutNGBlockFlow BODY", "bounds": [284, 500], - "transform": 5 + "transform": 4 }, { "name": "Horizontal Scrollbar Layer", "position": [0, 150], "bounds": [300, 0], - "transform": 7 + "transform": 2 }, { "name": "Vertical Scrollbar Layer", "position": [300, 0], "bounds": [0, 150], - "transform": 9 + "transform": 2 } ], "transforms": [ @@ -48,11 +47,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [2, 2, 0, 1] ] }, { @@ -62,7 +62,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [2, 2, 0, 1] + [0, -20, 0, 1] ] }, { @@ -72,56 +72,8 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -20, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] - }, - { - "id": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [2, 2, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt index ee2a56f..dad3158 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 500], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV id='t' class='green absolute'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt index 7bbe584..152c49e 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-and-absolute-position-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 500], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV id='absoluteDiv' class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt index 251a021..2131405 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt index 251a021..2131405 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt index 958294a5..4707012 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-child-of-transformed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV id='toMove'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt index 251a021..2131405 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-move-after-scroll-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 3016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt index e876538..3ad68d29 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-scroll-simple-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV class='green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt index 2fdb9dd6..6a583b86 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2001], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 400], "transform": 1 }, { @@ -14,7 +13,7 @@ "contentsOpaque": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='fixed'", @@ -42,16 +41,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt index da04f4b..36657808 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/fixed-with-border-under-composited-absolute-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2001], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 400], "transform": 1 }, { @@ -14,7 +13,7 @@ "contentsOpaque": true, "backfaceVisibility": "hidden", "backgroundColor": "#FF0000", - "transform": 3 + "transform": 2 }, { "name": "LayoutNGBlockFlow (positioned) DIV id='fixed'", @@ -42,16 +41,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -400, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt index fa25cd0..8032319 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/invalidate-after-composited-scroll-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [185, 4900], - "scrollPosition": [0, 2350], "paintInvalidations": [ { "object": "LayoutNGBlockFlow DIV id='target'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt index f993c1e..6763d3dd 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/nested-fixed-iframe-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 400], "paintInvalidations": [ { "object": "LayoutNGBlockFlow DIV id='div'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt index aafa1815..fa59184e 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-move-after-scroll-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [685, 600], - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt index be56aec..578b034 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/overflow-scroll-after-move-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [285, 900], - "scrollPosition": [0, 150], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV id='block'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt index 4eb5617..bbe122c 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-no-visible-content-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt index b5ca04b..aa700c2 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-fixed-layer-with-transformed-parent-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 180], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt index fbc97f2..ad75c447 100644 --- a/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/scroll/scroll-in-fixed-layer-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) DIV class='absolute green'",
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt index d4a97f9..cb1fad6 100644 --- a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-background-offscreen-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2008, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "transform": 1 } ],
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt index d4a97f9..cb1fad6 100644 --- a/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/svg/animated-svg-as-image-offscreen-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2008, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1000], "transform": 1 } ],
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt index 5cc2afe0..6a82996 100644 --- a/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/svg/repaint-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2000, 2000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [400, 400], "paintInvalidations": [ { "object": "LayoutSVGRect rect id='rect'",
diff --git a/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt index c7d6d46..b80817f9 100644 --- a/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -30,7 +30,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)", "position": [100, 100], "bounds": [300, 440], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -42,15 +42,6 @@ [0, 0, 1, 0], [8, 58, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 58, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt index d15b795..30cc276d 100644 --- a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-cell-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutNGTableCell TD id='moveMe'",
diff --git a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt index 9b0567e7..150acfff 100644 --- a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt index c1a01ad..7dbbc3c 100644 --- a/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/table/fixed-table-overflow-zindex-expected.txt
@@ -5,7 +5,6 @@ "bounds": [800, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 100], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (positioned) TD id='moveMe' class='fixed'",
diff --git a/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt b/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt index 4b43ce01..36129f0 100644 --- a/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/table/scroll-relative-table-inside-table-cell-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1566, 1781], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [766, 1181], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (relative positioned) DIV class='relative red'",
diff --git a/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt index 91dc27c4..e8694b60 100644 --- a/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt +++ b/third_party/blink/web_tests/platform/linux/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@ "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 9 + "transform": 6 } ], "transforms": [ @@ -76,42 +76,7 @@ }, { "id": 5, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.002], - [0, 0, 0, 1] - ], - "origin": [152, 152] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [12, 12, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 7, - "parent": 6, - "transform": [ - [0.766044443118978, -0.556670399226419, -0.32139380484327, 0], - [0, 0.5, -0.866025403784439, 0], - [0.642787609686539, 0.663413948168938, 0.383022221559489, 0], - [0, 0, 0, 1] - ], - "origin": [140, 140], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -122,8 +87,8 @@ "renderingContext": 1 }, { - "id": 9, - "parent": 8, + "id": 6, + "parent": 5, "transform": [ [0.766044443118978, 0, 0.642787609686539, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt index ebc0d47..7792506a 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -22,7 +22,7 @@ "reason": "geometry" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -34,15 +34,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt index 394ee36..c3c442e 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -16,7 +16,7 @@ "bounds": [100, 200], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index 0dbcb4d..efe64ac 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2350], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1750], "paintInvalidations": [ { "object": "LayoutNGBlockFlow HTML",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index 9d5334fb..58e78dc 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2000, 2000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [200, 200], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index 19f89d5..a2ccf03 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 4936], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 2350], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 2547ef9..a811dac 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@ "bounds": [200, 1620], "contentsOpaque": true, "backgroundColor": "#D3D3D3", - "scrollPosition": [0, 450], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'test'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index 7137b61..36cff711f 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1026, 996], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 411], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index 80e14f8..e6dcac36 100644 --- a/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/blink/web_tests/platform/linux/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@ "bounds": [939, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [339, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer", @@ -35,7 +34,6 @@ "bounds": [939, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [539, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt index 91dc27c4..e8694b60 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt +++ b/third_party/blink/web_tests/platform/mac/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@ "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 9 + "transform": 6 } ], "transforms": [ @@ -76,42 +76,7 @@ }, { "id": 5, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.002], - [0, 0, 0, 1] - ], - "origin": [152, 152] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [12, 12, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 7, - "parent": 6, - "transform": [ - [0.766044443118978, -0.556670399226419, -0.32139380484327, 0], - [0, 0.5, -0.866025403784439, 0], - [0.642787609686539, 0.663413948168938, 0.383022221559489, 0], - [0, 0, 0, 1] - ], - "origin": [140, 140], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -122,8 +87,8 @@ "renderingContext": 1 }, { - "id": 9, - "parent": 8, + "id": 6, + "parent": 5, "transform": [ [0.766044443118978, 0, 0.642787609686539, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt index 2fbf270a..51ade3e 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt +++ b/third_party/blink/web_tests/platform/mac/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -15,32 +15,32 @@ { "name": "Scrolling Contents Layer", "bounds": [285, 192], - "transform": 3 + "transform": 2 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 4 + "transform": 3 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 6 + "transform": 4 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 9 + "transform": 5 }, { "name": "LayoutNGBlockFlow DIV class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 11 + "transform": 7 } ], "transforms": [ @@ -55,11 +55,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [15, 15, 0, 1] ] }, { @@ -69,7 +70,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] + [8, 8, 0, 1] ] }, { @@ -79,52 +80,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [1, 1, 0, 1] ] }, { "id": 5, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 7, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -133,7 +94,7 @@ ] }, { - "id": 10, + "id": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -142,8 +103,8 @@ ] }, { - "id": 11, - "parent": 10, + "id": 7, + "parent": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt index e6cf92b..a18de54 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt +++ b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -17,20 +17,20 @@ "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [285, 800], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [286, 286], "bounds": [15, 15], - "transform": 3 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='fixed lime box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 4 + "transform": 2 } ], "transforms": [ @@ -49,24 +49,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 68, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 68, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [10, 100, 0, 1] ] }
diff --git a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt index 57c0093..9518537f 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt +++ b/third_party/blink/web_tests/platform/mac/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -19,7 +19,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#C0C0C0", - "transform": 6 + "transform": 4 } ], "transforms": [ @@ -39,21 +39,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 390, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "renderingContext": 1 - }, - { - "id": 5, - "parent": 4, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -64,8 +50,8 @@ "renderingContext": 1 }, { - "id": 6, - "parent": 5, + "id": 4, + "parent": 3, "transform": [ [0.984807753012208, 0, -0.17364817766693, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt index 9b89814..f464bdb 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/blink/web_tests/platform/mac/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -19,20 +19,19 @@ "bounds": [189, 270], "contentsOpaque": true, "backgroundColor": "#CCCCCC", - "scrollPosition": [0, 50], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [190, 110], "bounds": [15, 15], - "transform": 4 + "transform": 1 }, { "name": "LayoutTextControl TEXTAREA", "bounds": [206, 126], "backgroundColor": "#CCCCCC", - "transform": 5 + "transform": 3 }, { "name": "Scrolling Contents Layer", @@ -40,14 +39,13 @@ "bounds": [189, 270], "contentsOpaque": true, "backgroundColor": "#CCCCCC", - "scrollPosition": [0, 50], - "transform": 7 + "transform": 4 }, { "name": "Scroll Corner Layer", "position": [190, 110], "bounds": [15, 15], - "transform": 8 + "transform": 3 } ], "transforms": [ @@ -62,68 +60,32 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [18, 18, 0, 1] + [0, -50, 0, 1] ] }, { "id": 3, - "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -50, 0, 1] + [248, 18, 0, 1] ] }, { "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 18, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [248, 18, 0, 1] - ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [248, 18, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, -50, 0, 1] ] - }, - { - "id": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [248, 18, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt b/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt index 0cb06ca..139d82a 100644 --- a/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt +++ b/third_party/blink/web_tests/platform/mac/compositing/squashing/frame-clip-squashed-scrolled-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2036], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 300], "transform": 1 } ],
diff --git a/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt index 243f13e..a172d8f 100644 --- a/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt +++ b/third_party/blink/web_tests/platform/mac/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -15,7 +15,7 @@ "bounds": [10, 10], "contentsOpaque": true, "backgroundColor": "#FFFF00", - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -27,15 +27,6 @@ [0, 0, 1, 0], [8, 18, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 18, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt index 8d2cbc9..af1287ff 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
@@ -34,7 +34,7 @@ "reason": "chunk appeared" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -46,15 +46,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt index ebc0d47..7792506a 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-accelerated-child-with-filter-child-expected.txt
@@ -22,7 +22,7 @@ "reason": "geometry" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -34,15 +34,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt index 394ee36..c3c442e 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/filters/filter-repaint-on-accelerated-layer-expected.txt
@@ -16,7 +16,7 @@ "bounds": [100, 200], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -28,15 +28,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index c7dcf18a..b236d87f 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2350], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1750], "paintInvalidations": [ { "object": "LayoutNGBlockFlow HTML",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt index f93d48ba..570522c9 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/position/fixed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 20], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt index bb98a11..e199371 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [205, 1019], - "scrollPosition": [0, 919], "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='text'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index f1460e5..1b536f2 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2000, 2000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [200, 200], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index 3c3d0d6..9f231f8 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 4934], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 2350], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt index 2cb468ef..11f3860 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -17,7 +17,6 @@ "bounds": [185, 550], "contentsOpaque": true, "backgroundColor": "#0000FF", - "scrollPosition": [0, 365], "paintInvalidations": [ { "object": "Scrolling background of LayoutNGBlockFlow DIV id='scroller'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt index 1f4b51b..ed1a3e5 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 1893], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (relative positioned) DIV id='ul'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt index 2943c01..3988ea5 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 5054], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1400], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 33b5a4a..59948cec 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@ "bounds": [200, 1620], "contentsOpaque": true, "backgroundColor": "#D3D3D3", - "scrollPosition": [0, 450], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'test'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index 5f90814..736e21f 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1026, 1016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 431], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt index f03ef16..be97385a 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/svg/transform-focus-ring-repaint-expected.txt
@@ -30,7 +30,7 @@ "name": "Squashing Layer (first squashed layer: LayoutNGBlockFlow (positioned) DIV)", "position": [100, 100], "bounds": [300, 440], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -42,15 +42,6 @@ [0, 0, 1, 0], [8, 58, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 58, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index 9c6da0c..a8b42ed 100644 --- a/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/blink/web_tests/platform/mac/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@ "bounds": [913, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [313, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer", @@ -35,7 +34,6 @@ "bounds": [913, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [513, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt index e1b2aa7..0416f42 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt +++ b/third_party/blink/web_tests/platform/mac/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
@@ -14,13 +14,12 @@ { "name": "Scrolling Contents Layer", "bounds": [345, 2018], - "scrollPosition": [0, 35], - "transform": 5 + "transform": 3 }, { "name": "LayoutNGBlockFlow (sticky positioned) DIV id='sticky'", "bounds": [345, 18], - "transform": 9 + "transform": 4 } ], "transforms": [ @@ -47,13 +46,14 @@ }, { "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], - [0, 0, 1, -0.1], - [0, 0, 0, 1] + [0, 0, 1, 0], + [0, -35, 0, 1] ], - "origin": [188, 328] + "flattenInheritedTransform": false }, { "id": 4, @@ -62,60 +62,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -35, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.1], - [0, 0, 0, 1] - ], - "origin": [188, 328] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -35, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 9, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [0, 35, 0, 1] ], "flattenInheritedTransform": false
diff --git a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt deleted file mode 100644 index e55a5b99..0000000 --- a/third_party/blink/web_tests/platform/mac/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt +++ /dev/null
@@ -1,63 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [800, 600], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutNGBlockFlow DIV class='filtered box'", - "bounds": [144, 144], - "transform": 1 - }, - { - "name": "LayoutNGBlockFlow DIV class='compositing box'", - "bounds": [100, 100], - "contentsOpaque": true, - "backgroundColor": "#FF0000", - "transform": 4 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [22, 22, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 0, 1, 1] - ] - } - ] -} -
diff --git a/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt b/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt index e54214e2..940d29f 100644 --- a/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt +++ b/third_party/blink/web_tests/platform/win/compositing/geometry/preserve-3d-switching-expected.txt
@@ -26,7 +26,7 @@ "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#008000", - "transform": 9 + "transform": 6 } ], "transforms": [ @@ -76,42 +76,7 @@ }, { "id": 5, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.002], - [0, 0, 0, 1] - ], - "origin": [152, 152] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [12, 12, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 7, - "parent": 6, - "transform": [ - [0.766044443118978, -0.556670399226419, -0.32139380484327, 0], - [0, 0.5, -0.866025403784439, 0], - [0.642787609686539, 0.663413948168938, 0.383022221559489, 0], - [0, 0, 0, 1] - ], - "origin": [140, 140], - "flattenInheritedTransform": false, - "renderingContext": 1 - }, - { - "id": 8, - "parent": 7, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -122,8 +87,8 @@ "renderingContext": 1 }, { - "id": 9, - "parent": 8, + "id": 6, + "parent": 5, "transform": [ [0.766044443118978, 0, 0.642787609686539, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt b/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt index 5a129e6..c7e4761 100644 --- a/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt +++ b/third_party/blink/web_tests/platform/win/compositing/iframes/invisible-nested-iframe-show-expected.txt
@@ -15,32 +15,32 @@ { "name": "Scrolling Contents Layer", "bounds": [285, 193], - "transform": 3 + "transform": 2 }, { "name": "LayoutIFrame IFRAME", "bounds": [252, 172], - "transform": 4 + "transform": 3 }, { "name": "LayoutView #document", "bounds": [250, 170], "backgroundColor": "#C0C0C0", - "transform": 6 + "transform": 4 }, { "name": "LayoutNGBlockFlow DIV id='iframe-content' class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 9 + "transform": 5 }, { "name": "LayoutNGBlockFlow DIV class='box'", "bounds": [210, 210], "contentsOpaque": true, "backgroundColor": "#0000FF", - "transform": 11 + "transform": 7 } ], "transforms": [ @@ -55,11 +55,12 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [15, 15, 0, 1] ] }, { @@ -69,7 +70,7 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [15, 15, 0, 1] + [8, 8, 0, 1] ] }, { @@ -79,52 +80,12 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 8, 0, 1] + [1, 1, 0, 1] ] }, { "id": 5, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 6, - "parent": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 7, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 1, 0, 1] - ] - }, - { - "id": 9, - "parent": 8, + "parent": 4, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -133,7 +94,7 @@ ] }, { - "id": 10, + "id": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -142,8 +103,8 @@ ] }, { - "id": 11, - "parent": 10, + "id": 7, + "parent": 6, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt b/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt index 776666d..8ec3dc06 100644 --- a/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt +++ b/third_party/blink/web_tests/platform/win/compositing/layer-creation/fixed-position-nonscrollable-body-mismatch-containers-expected.txt
@@ -17,20 +17,20 @@ "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [285, 800], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [286, 286], "bounds": [15, 15], - "transform": 3 + "transform": 1 }, { "name": "LayoutNGBlockFlow (positioned) DIV class='fixed lime box'", "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#00FF00", - "transform": 4 + "transform": 2 } ], "transforms": [ @@ -49,24 +49,6 @@ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [8, 72, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 72, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], [10, 100, 0, 1] ] }
diff --git a/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt b/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt index 6006dee..412f11c 100644 --- a/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt +++ b/third_party/blink/web_tests/platform/win/compositing/layer-creation/no-compositing-for-preserve-3d-expected.txt
@@ -19,7 +19,7 @@ "bounds": [100, 100], "contentsOpaque": true, "backgroundColor": "#C0C0C0", - "transform": 6 + "transform": 4 } ], "transforms": [ @@ -39,21 +39,7 @@ }, { "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 394, 0, 1] - ] - }, - { - "id": 4, - "parent": 3, - "renderingContext": 1 - }, - { - "id": 5, - "parent": 4, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -64,8 +50,8 @@ "renderingContext": 1 }, { - "id": 6, - "parent": 5, + "id": 4, + "parent": 3, "transform": [ [0.984807753012208, 0, -0.17364817766693, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt b/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt index deab175..335ebfc 100644 --- a/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt +++ b/third_party/blink/web_tests/platform/win/compositing/overflow/textarea-scroll-touch-expected.txt
@@ -19,20 +19,19 @@ "bounds": [189, 328], "contentsOpaque": true, "backgroundColor": "#CCCCCC", - "scrollPosition": [0, 50], - "transform": 3 + "transform": 2 }, { "name": "Scroll Corner Layer", "position": [190, 110], "bounds": [15, 15], - "transform": 4 + "transform": 1 }, { "name": "LayoutTextControl TEXTAREA", "bounds": [206, 126], "backgroundColor": "#CCCCCC", - "transform": 5 + "transform": 3 }, { "name": "Scrolling Contents Layer", @@ -40,14 +39,13 @@ "bounds": [189, 328], "contentsOpaque": true, "backgroundColor": "#CCCCCC", - "scrollPosition": [0, 50], - "transform": 7 + "transform": 4 }, { "name": "Scroll Corner Layer", "position": [190, 110], "bounds": [15, 15], - "transform": 8 + "transform": 3 } ], "transforms": [ @@ -62,68 +60,32 @@ }, { "id": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [18, 18, 0, 1] + [0, -50, 0, 1] ] }, { "id": 3, - "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], - [0, -50, 0, 1] + [248, 18, 0, 1] ] }, { "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [18, 18, 0, 1] - ] - }, - { - "id": 5, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [248, 18, 0, 1] - ] - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [248, 18, 0, 1] - ] - }, - { - "id": 7, - "parent": 6, + "parent": 3, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, -50, 0, 1] ] - }, - { - "id": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [248, 18, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt b/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt index 8b7ef9a..2be66e4c 100644 --- a/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt +++ b/third_party/blink/web_tests/platform/win/css3/blending/mix-blend-mode-composited-layers-expected.txt
@@ -15,7 +15,7 @@ "bounds": [10, 10], "contentsOpaque": true, "backgroundColor": "#FFFF00", - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -27,15 +27,6 @@ [0, 0, 1, 0], [8, 18, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 18, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt index 0b084a3..f1ae139 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/compositing/iframe-inside-squashed-layer-expected.txt
@@ -34,7 +34,7 @@ "reason": "chunk appeared" } ], - "transform": 2 + "transform": 1 } ], "transforms": [ @@ -46,15 +46,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt index 61da017..2a95ff29 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/invalidation-after-opacity-change-subtree-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2350], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1750], "paintInvalidations": [ { "object": "LayoutNGBlockFlow HTML",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt index 63227dc..018f92e 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/position/fixed-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 2016], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 20], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt index 1b9cdab38..5916bdb6 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/caret-with-composited-scroll-expected.txt
@@ -14,7 +14,6 @@ { "name": "Scrolling Contents Layer", "bounds": [205, 1022], - "scrollPosition": [0, 922], "paintInvalidations": [ { "object": "LayoutTextControl INPUT id='text'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt index 72f35f3..42cc3210 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/inline-style-change-in-scrolled-view-expected.txt
@@ -5,7 +5,6 @@ "bounds": [2000, 2000], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [200, 200], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'Text Text Text Text Text Text Text Text Text Text Text Text Text'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt index e651b27..f0bfca12 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/invalidate-after-composited-scroll-of-window-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 4936], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 2350], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'Tests that invalidation of a div after scrolling invalidates just the div and no other area.'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt index 2a9edab3..2aac395a 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/overflow-scroll-local-background-text-color-change-expected.txt
@@ -17,7 +17,6 @@ "bounds": [185, 552], "contentsOpaque": true, "backgroundColor": "#0000FF", - "scrollPosition": [0, 367], "paintInvalidations": [ { "object": "Scrolling background of LayoutNGBlockFlow DIV id='scroller'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt index 1531206..388a0122 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-descendant-with-cached-cliprects-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 1895], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 200], "paintInvalidations": [ { "object": "LayoutNGBlockFlow (relative positioned) DIV id='ul'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt index 8a88d53..760e5b6 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/scroll/scroll-stacking-context-backface-visiblity-leaves-traces-expected.txt
@@ -5,7 +5,6 @@ "bounds": [785, 5056], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 1400], "transform": 1 }, {
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt index 759e924..13de8a8 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/selection/selection-within-composited-scroller-expected.txt
@@ -17,7 +17,6 @@ "bounds": [200, 1620], "contentsOpaque": true, "backgroundColor": "#D3D3D3", - "scrollPosition": [0, 450], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'test'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt index ca76ab6e..7d486fd 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/svg/scrolling-embedded-svg-file-image-repaint-problem-expected.txt
@@ -5,7 +5,6 @@ "bounds": [1026, 1036], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [0, 451], "paintInvalidations": [ { "object": "NGPhysicalTextFragment 'pservers-pattern-01-b \u2190'",
diff --git a/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt b/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt index e067a48..3d1894b 100644 --- a/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt +++ b/third_party/blink/web_tests/platform/win/paint/invalidation/window-resize/window-resize-vertical-writing-mode-expected.txt
@@ -5,7 +5,6 @@ "bounds": [939, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [339, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer", @@ -35,7 +34,6 @@ "bounds": [939, 235], "contentsOpaque": true, "backgroundColor": "#FFFFFF", - "scrollPosition": [539, 0], "paintInvalidations": [ { "object": "Scrolling Contents Layer",
diff --git a/third_party/blink/web_tests/platform/win/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt b/third_party/blink/web_tests/platform/win/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt new file mode 100644 index 0000000..f59fc24 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt
@@ -0,0 +1,71 @@ +{ + "layers": [ + { + "name": "Scrolling Contents Layer", + "bounds": [785, 656], + "contentsOpaque": true, + "backgroundColor": "#FFFFFF" + }, + { + "name": "LayoutNGBlockFlow MAT id='scroller'", + "bounds": [360, 640], + "transform": 2 + }, + { + "name": "Scrolling Contents Layer", + "bounds": [345, 2020], + "transform": 3 + }, + { + "name": "LayoutNGBlockFlow (sticky positioned) DIV id='sticky'", + "bounds": [345, 20], + "transform": 4 + } + ], + "transforms": [ + { + "id": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, -0.1], + [0, 0, 0, 1] + ], + "origin": [188, 328] + }, + { + "id": 2, + "parent": 1, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [8, 8, 0, 1] + ], + "flattenInheritedTransform": false + }, + { + "id": 3, + "parent": 2, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, -35, 0, 1] + ], + "flattenInheritedTransform": false + }, + { + "id": 4, + "parent": 3, + "transform": [ + [1, 0, 0, 0], + [0, 1, 0, 0], + [0, 0, 1, 0], + [0, 35, 0, 1] + ], + "flattenInheritedTransform": false + } + ] +} +
diff --git a/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt similarity index 83% rename from third_party/blink/web_tests/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt rename to third_party/blink/web_tests/platform/win/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt index d18fb43..035b16c 100644 --- a/third_party/blink/web_tests/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt +++ b/third_party/blink/web_tests/platform/win/virtual/scalefactor200/css3/filters/filtered-compositing-descendant-expected.txt
@@ -16,7 +16,7 @@ "bounds": [200, 200], "contentsOpaque": true, "backgroundColor": "#FF0000", - "transform": 4 + "transform": 3 } ], "transforms": [ @@ -31,16 +31,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [16, 16, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0], @@ -49,8 +40,8 @@ ] }, { - "id": 4, - "parent": 3, + "id": 3, + "parent": 2, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/blink/web_tests/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt b/third_party/blink/web_tests/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt deleted file mode 100644 index d9f5c84..0000000 --- a/third_party/blink/web_tests/virtual/compositor_threaded_scrollbar_scrolling/paint/invalidation/scroll/sticky/invalidate-after-composited-scroll-with-sticky-expected.txt +++ /dev/null
@@ -1,125 +0,0 @@ -{ - "layers": [ - { - "name": "Scrolling Contents Layer", - "bounds": [785, 656], - "contentsOpaque": true, - "backgroundColor": "#FFFFFF" - }, - { - "name": "LayoutNGBlockFlow MAT id='scroller'", - "bounds": [360, 640], - "transform": 2 - }, - { - "name": "Scrolling Contents Layer", - "bounds": [345, 2020], - "scrollPosition": [0, 35], - "transform": 5 - }, - { - "name": "LayoutNGBlockFlow (sticky positioned) DIV id='sticky'", - "bounds": [345, 20], - "transform": 9 - } - ], - "transforms": [ - { - "id": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.1], - [0, 0, 0, 1] - ], - "origin": [188, 328] - }, - { - "id": 2, - "parent": 1, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.1], - [0, 0, 0, 1] - ], - "origin": [188, 328] - }, - { - "id": 4, - "parent": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 5, - "parent": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -35, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, -0.1], - [0, 0, 0, 1] - ], - "origin": [188, 328] - }, - { - "id": 7, - "parent": 6, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 8, - "parent": 7, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -35, 0, 1] - ], - "flattenInheritedTransform": false - }, - { - "id": 9, - "parent": 8, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, 35, 0, 1] - ], - "flattenInheritedTransform": false - } - ] -} -
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt index 3274c19..6c30c19a 100644 --- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt +++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [285, 285], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -32,24 +32,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt index 3274c19..6c30c19a 100644 --- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt +++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-auto-with-touch-toggle-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [285, 285], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -32,24 +32,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt index 3274c19..6c30c19a 100644 --- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt +++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/compositing/overflow/overflow-overlay-with-touch-expected.txt
@@ -14,13 +14,13 @@ { "name": "Scrolling Contents Layer", "bounds": [1000, 1000], - "transform": 2 + "transform": 1 }, { "name": "Scroll Corner Layer", "position": [285, 285], "bounds": [15, 15], - "transform": 3 + "transform": 1 } ], "transforms": [ @@ -32,24 +32,6 @@ [0, 0, 1, 0], [8, 8, 0, 1] ] - }, - { - "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] - }, - { - "id": 3, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [8, 8, 0, 1] - ] } ] }
diff --git a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt index 8140bed..01ed37b 100644 --- a/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt +++ b/third_party/blink/web_tests/virtual/prefer_compositing_to_lcd_text/scrollbars/overlay-scrollbars-within-overflow-scroll-expected.txt
@@ -14,19 +14,18 @@ "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [400, 602], - "scrollPosition": [0, 302], "transform": 1 }, { "name": "LayoutNGBlockFlow DIV id='inner'", "bounds": [102, 102], - "transform": 3 + "transform": 2 }, { "name": "Scrolling Contents Layer", "position": [1, 1], "bounds": [100, 500], - "transform": 5 + "transform": 2 } ], "transforms": [ @@ -41,35 +40,7 @@ }, { "id": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -302, 0, 1] - ] - }, - { - "id": 3, - "parent": 2, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [1, 501, 0, 1] - ] - }, - { - "id": 4, - "transform": [ - [1, 0, 0, 0], - [0, 1, 0, 0], - [0, 0, 1, 0], - [0, -302, 0, 1] - ] - }, - { - "id": 5, - "parent": 4, + "parent": 1, "transform": [ [1, 0, 0, 0], [0, 1, 0, 0],
diff --git a/third_party/dav1d/README.chromium b/third_party/dav1d/README.chromium index b66f0ef8..2bd66f38 100644 --- a/third_party/dav1d/README.chromium +++ b/third_party/dav1d/README.chromium
@@ -1,7 +1,7 @@ Name: dav1d is an AV1 decoder :) Short Name: dav1d URL: https://code.videolan.org/videolan/dav1d -Version: a91a03b0e143f77bd647b481aff034eb3315ee7b +Version: 62fcd0cb19d2fe46af7541d8185de86d45d58697 License: 2-Clause BSD License File: LICENSE Security Critical: yes
diff --git a/third_party/dav1d/dav1d_generated.gni b/third_party/dav1d/dav1d_generated.gni index 2599d8b..99b70bc 100644 --- a/third_party/dav1d/dav1d_generated.gni +++ b/third_party/dav1d/dav1d_generated.gni
@@ -33,6 +33,7 @@ ] arm32_asm_sources = [ + "libdav1d/src/arm/32/cdef.S", "libdav1d/src/arm/32/looprestoration.S", "libdav1d/src/arm/32/mc.S", "libdav1d/src/arm/32/util.S", @@ -40,6 +41,7 @@ arm64_asm_sources = [ "libdav1d/src/arm/64/cdef.S", + "libdav1d/src/arm/64/ipred.S", "libdav1d/src/arm/64/itx.S", "libdav1d/src/arm/64/loopfilter.S", "libdav1d/src/arm/64/looprestoration.S", @@ -50,6 +52,7 @@ arm_template_sources = [ "libdav1d/src/arm/cdef_init_tmpl.c", + "libdav1d/src/arm/ipred_init_tmpl.c", "libdav1d/src/arm/itx_init_tmpl.c", "libdav1d/src/arm/loopfilter_init_tmpl.c", "libdav1d/src/arm/looprestoration_init_tmpl.c",
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 0db61b5..258271f 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -10194,6 +10194,7 @@ <int value="2" label="Activity Not Accessible"/> <int value="3" label="Out of Date"/> <int value="4" label="Search by Image Unavailable"/> + <int value="5" label="OS Below Android O"/> </enum> <enum name="ContextMenuOption"> @@ -20855,6 +20856,8 @@ <int value="1389" label="AUTOTESTPRIVATE_SETCLIPBOARDTEXTDATA"/> <int value="1390" label="AUTOTESTPRIVATE_INITIALIZEEVENTS"/> <int value="1391" label="AUTOTESTPRIVATE_WAITFORDISPLAYROTATION"/> + <int value="1392" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTART"/> + <int value="1393" label="AUTOTESTPRIVATE_ARCAPPTRACINGSTOPANDANALYZE"/> </enum> <enum name="ExtensionIconState"> @@ -32279,6 +32282,17 @@ <int value="7" label="Cache write failed"/> </enum> +<enum name="InstallDateBackfill"> + <int value="0" + label="Valid install date was already persisted (no backfill)"/> + <int value="1" + label="Unable to get a valid install date from Android PackageManager + (no backfill)"/> + <int value="2" + label="Backfilled the install date by looking up a value in + PackageManager"/> +</enum> + <enum name="InstallStatus"> <int value="0" label="FIRST_INSTALL_SUCCESS"/> <int value="1" label="INSTALL_REPAIRED"/> @@ -36003,6 +36017,7 @@ <int value="-885601782" label="enable-contextual-search"/> <int value="-884864731" label="WebPaymentsSingleAppUiSkip:enabled"/> <int value="-883694393" label="SyncPseudoUSSSupervisedUsers:disabled"/> + <int value="-882434910" label="EnableAggregatedMlSearchRanking:enabled"/> <int value="-881447505" label="ash-disable-shelf-model-synchronization"/> <int value="-881054479" label="WebAssemblyStreaming:disabled"/> <int value="-879055117" label="ClipboardContentSetting:enabled"/> @@ -36082,6 +36097,7 @@ <int value="-787238455" label="OmniboxZeroSuggestionsOnSERP:disabled"/> <int value="-780798969" label="disable-single-click-autofill"/> <int value="-778126349" label="DownloadsLocationChange:enabled"/> + <int value="-778098896" label="EnableAggregatedMlSearchRanking:disabled"/> <int value="-777126951" label="FontSrcLocalMatching:enabled"/> <int value="-776686417" label="SiteExplorationUi:disabled"/> <int value="-775321548" label="UseNewDoodleApi:disabled"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml index c8ec672..9b2ed98c 100644 --- a/tools/metrics/histograms/histograms.xml +++ b/tools/metrics/histograms/histograms.xml
@@ -4103,6 +4103,17 @@ </summary> </histogram> +<histogram name="Android.WebView.Metrics.BackfillInstallDate" + enum="InstallDateBackfill" expires_after="M83"> + <owner>ntfschr@chromium.org</owner> + <owner>src/android_webview/OWNERS</owner> + <summary> + Records whether WebView needed to backfill the install date pref with + Android frameworks APIs. Recorded once during startup (metrics service + initializtion). + </summary> +</histogram> + <histogram name="Android.WebView.Mimetype.AppProvided" enum="WebViewAppProvidedMimeType" expires_after="2020-05-14"> <owner>ntfschr@chromium.org</owner> @@ -10560,6 +10571,19 @@ </summary> </histogram> +<histogram name="Autofill.BetterAuth.CardUnmaskPreflightDuration" units="ms" + expires_after="2020-12-15"> + <owner>jsaul@google.com</owner> + <owner>manasverma@google.com</owner> + <owner>autofill-auth-team@google.com</owner> + <summary> + Tracking the latency of a GetDetailsForGetRealPan call to Payments servers. + This duration should be comparable to that of Autofill.UnmaskPrompt.Duration + and should ideally stay under 500 ms in order for the user to autofill their + credit card without experiencing much friction. + </summary> +</histogram> + <histogram name="Autofill.CanLogUKM" enum="BooleanEnabled" expires_after="M78"> <owner>dlkumar@google.com</owner> <owner>chrome-autofill@google.com</owner>
diff --git a/tools/perf/core/shard_maps/timing_data/android_go_webview_story_timing.json b/tools/perf/core/shard_maps/timing_data/android_go_webview_story_timing.json deleted file mode 100644 index e19e27f..0000000 --- a/tools/perf/core/shard_maps/timing_data/android_go_webview_story_timing.json +++ /dev/null
@@ -1,678 +0,0 @@ -[ - { - "duration": "24.0", - "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna" - }, - { - "duration": "35.0", - "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "24.0", - "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "30.0", - "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "27.0", - "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "28.0", - "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science" - }, - { - "duration": "27.0", - "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "28.0", - "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "29.0", - "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google" - }, - { - "duration": "28.0", - "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "28.0", - "name": "memory.top_10_mobile/https_m_facebook_com_rihanna" - }, - { - "duration": "28.0", - "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "33.0", - "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "75.0", - "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom" - }, - { - "duration": "81.0", - "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180" - }, - { - "duration": "70.0", - "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404" - }, - { - "duration": "93.0", - "name": "power.typical_10_mobile/http://m.facebook.com/barackobama" - }, - { - "duration": "75.0", - "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486" - }, - { - "duration": "77.0", - "name": "power.typical_10_mobile/http://m.ynet.co.il" - }, - { - "duration": "99.0", - "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/" - }, - { - "duration": "72.0", - "name": "power.typical_10_mobile/http://wapbaike.baidu.com/" - }, - { - "duration": "75.0", - "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html" - }, - { - "duration": "84.0", - "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html" - }, - { - "duration": "75.0", - "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif" - }, - { - "duration": "39.0", - "name": "start_with_url.cold.startup_pages/about:blank" - }, - { - "duration": "42.0", - "name": "start_with_url.cold.startup_pages/http://bbc.co.uk" - }, - { - "duration": "35.0", - "name": "start_with_url.warm.startup_pages/about:blank" - }, - { - "duration": "36.0", - "name": "start_with_url.warm.startup_pages/http://bbc.co.uk" - }, - { - "duration": "30.0", - "name": "system_health.common_mobile/background:media:imgur" - }, - { - "duration": "66.0", - "name": "system_health.common_mobile/background:news:nytimes" - }, - { - "duration": "32.0", - "name": "system_health.common_mobile/background:search:google" - }, - { - "duration": "55.0", - "name": "system_health.common_mobile/background:social:facebook" - }, - { - "duration": "48.0", - "name": "system_health.common_mobile/background:tools:gmail" - }, - { - "duration": "209.0", - "name": "system_health.common_mobile/browse:chrome:newtab" - }, - { - "duration": "54.0", - "name": "system_health.common_mobile/browse:chrome:omnibox" - }, - { - "duration": "149.0", - "name": "system_health.common_mobile/browse:media:facebook_photos" - }, - { - "duration": "69.0", - "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "105.0", - "name": "system_health.common_mobile/browse:media:imgur" - }, - { - "duration": "156.0", - "name": "system_health.common_mobile/browse:media:youtube" - }, - { - "duration": "247.0", - "name": "system_health.common_mobile/browse:news:cnn" - }, - { - "duration": "91.0", - "name": "system_health.common_mobile/browse:news:cricbuzz" - }, - { - "duration": "77.0", - "name": "system_health.common_mobile/browse:news:qq" - }, - { - "duration": "84.0", - "name": "system_health.common_mobile/browse:news:reddit" - }, - { - "duration": "307.0", - "name": "system_health.common_mobile/browse:news:toi" - }, - { - "duration": "75.0", - "name": "system_health.common_mobile/browse:news:washingtonpost" - }, - { - "duration": "115.0", - "name": "system_health.common_mobile/browse:shopping:amazon" - }, - { - "duration": "115.0", - "name": "system_health.common_mobile/browse:shopping:avito" - }, - { - "duration": "57.0", - "name": "system_health.common_mobile/browse:shopping:lazada" - }, - { - "duration": "97.0", - "name": "system_health.common_mobile/browse:social:facebook" - }, - { - "duration": "156.0", - "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "120.0", - "name": "system_health.common_mobile/browse:social:instagram" - }, - { - "duration": "126.0", - "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "154.0", - "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "75.0", - "name": "system_health.common_mobile/browse:social:twitter" - }, - { - "duration": "99.0", - "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "68.0", - "name": "system_health.common_mobile/browse:tools:maps" - }, - { - "duration": "26.0", - "name": "system_health.common_mobile/load:chrome:blank" - }, - { - "duration": "37.0", - "name": "system_health.common_mobile/load:games:bubbles" - }, - { - "duration": "27.0", - "name": "system_health.common_mobile/load:games:lazors" - }, - { - "duration": "50.0", - "name": "system_health.common_mobile/load:games:spychase" - }, - { - "duration": "37.0", - "name": "system_health.common_mobile/load:media:dailymotion" - }, - { - "duration": "32.0", - "name": "system_health.common_mobile/load:media:facebook_photos" - }, - { - "duration": "31.0", - "name": "system_health.common_mobile/load:media:google_images" - }, - { - "duration": "31.0", - "name": "system_health.common_mobile/load:media:imgur" - }, - { - "duration": "30.0", - "name": "system_health.common_mobile/load:media:soundcloud" - }, - { - "duration": "31.0", - "name": "system_health.common_mobile/load:media:youtube" - }, - { - "duration": "69.0", - "name": "system_health.common_mobile/load:news:cnn" - }, - { - "duration": "47.0", - "name": "system_health.common_mobile/load:news:irctc" - }, - { - "duration": "41.0", - "name": "system_health.common_mobile/load:news:nytimes" - }, - { - "duration": "31.0", - "name": "system_health.common_mobile/load:news:qq" - }, - { - "duration": "33.0", - "name": "system_health.common_mobile/load:news:reddit" - }, - { - "duration": "36.0", - "name": "system_health.common_mobile/load:news:washingtonpost" - }, - { - "duration": "33.0", - "name": "system_health.common_mobile/load:news:wikipedia" - }, - { - "duration": "31.0", - "name": "system_health.common_mobile/load:search:baidu" - }, - { - "duration": "55.0", - "name": "system_health.common_mobile/load:search:ebay" - }, - { - "duration": "29.0", - "name": "system_health.common_mobile/load:search:google" - }, - { - "duration": "31.0", - "name": "system_health.common_mobile/load:search:taobao" - }, - { - "duration": "29.0", - "name": "system_health.common_mobile/load:search:yahoo" - }, - { - "duration": "30.0", - "name": "system_health.common_mobile/load:search:yandex" - }, - { - "duration": "30.0", - "name": "system_health.common_mobile/load:social:twitter" - }, - { - "duration": "29.0", - "name": "system_health.common_mobile/load:tools:docs" - }, - { - "duration": "36.0", - "name": "system_health.common_mobile/load:tools:drive" - }, - { - "duration": "28.0", - "name": "system_health.common_mobile/load:tools:dropbox" - }, - { - "duration": "48.0", - "name": "system_health.common_mobile/load:tools:gmail" - }, - { - "duration": "32.0", - "name": "system_health.common_mobile/load:tools:stackoverflow" - }, - { - "duration": "45.0", - "name": "system_health.common_mobile/load:tools:weather" - }, - { - "duration": "146.0", - "name": "system_health.common_mobile/long_running:tools:gmail-background" - }, - { - "duration": "145.0", - "name": "system_health.common_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "30.0", - "name": "system_health.memory_mobile/background:media:imgur" - }, - { - "duration": "31.0", - "name": "system_health.memory_mobile/background:search:google" - }, - { - "duration": "37.0", - "name": "system_health.memory_mobile/background:social:facebook" - }, - { - "duration": "42.0", - "name": "system_health.memory_mobile/background:tools:gmail" - }, - { - "duration": "180.0", - "name": "system_health.memory_mobile/browse:chrome:newtab" - }, - { - "duration": "52.0", - "name": "system_health.memory_mobile/browse:chrome:omnibox" - }, - { - "duration": "100.0", - "name": "system_health.memory_mobile/browse:media:facebook_photos" - }, - { - "duration": "55.0", - "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "81.0", - "name": "system_health.memory_mobile/browse:media:imgur" - }, - { - "duration": "106.0", - "name": "system_health.memory_mobile/browse:media:youtube" - }, - { - "duration": "178.0", - "name": "system_health.memory_mobile/browse:news:cnn" - }, - { - "duration": "68.0", - "name": "system_health.memory_mobile/browse:news:cricbuzz" - }, - { - "duration": "61.0", - "name": "system_health.memory_mobile/browse:news:qq" - }, - { - "duration": "79.0", - "name": "system_health.memory_mobile/browse:news:reddit" - }, - { - "duration": "184.0", - "name": "system_health.memory_mobile/browse:news:toi" - }, - { - "duration": "59.0", - "name": "system_health.memory_mobile/browse:news:washingtonpost" - }, - { - "duration": "78.0", - "name": "system_health.memory_mobile/browse:shopping:amazon" - }, - { - "duration": "94.0", - "name": "system_health.memory_mobile/browse:shopping:avito" - }, - { - "duration": "47.0", - "name": "system_health.memory_mobile/browse:shopping:lazada" - }, - { - "duration": "75.0", - "name": "system_health.memory_mobile/browse:social:facebook" - }, - { - "duration": "98.0", - "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "89.0", - "name": "system_health.memory_mobile/browse:social:instagram" - }, - { - "duration": "94.0", - "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "104.0", - "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "61.0", - "name": "system_health.memory_mobile/browse:social:twitter" - }, - { - "duration": "82.0", - "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "58.0", - "name": "system_health.memory_mobile/browse:tools:maps" - }, - { - "duration": "27.0", - "name": "system_health.memory_mobile/load:chrome:blank" - }, - { - "duration": "31.0", - "name": "system_health.memory_mobile/load:games:bubbles" - }, - { - "duration": "28.0", - "name": "system_health.memory_mobile/load:games:lazors" - }, - { - "duration": "47.0", - "name": "system_health.memory_mobile/load:games:spychase" - }, - { - "duration": "36.0", - "name": "system_health.memory_mobile/load:media:dailymotion" - }, - { - "duration": "40.0", - "name": "system_health.memory_mobile/load:media:facebook_photos" - }, - { - "duration": "32.0", - "name": "system_health.memory_mobile/load:media:google_images" - }, - { - "duration": "30.0", - "name": "system_health.memory_mobile/load:media:imgur" - }, - { - "duration": "31.0", - "name": "system_health.memory_mobile/load:media:soundcloud" - }, - { - "duration": "40.0", - "name": "system_health.memory_mobile/load:media:youtube" - }, - { - "duration": "59.0", - "name": "system_health.memory_mobile/load:news:cnn" - }, - { - "duration": "37.0", - "name": "system_health.memory_mobile/load:news:irctc" - }, - { - "duration": "39.0", - "name": "system_health.memory_mobile/load:news:nytimes" - }, - { - "duration": "31.0", - "name": "system_health.memory_mobile/load:news:qq" - }, - { - "duration": "34.0", - "name": "system_health.memory_mobile/load:news:reddit" - }, - { - "duration": "34.0", - "name": "system_health.memory_mobile/load:news:washingtonpost" - }, - { - "duration": "33.0", - "name": "system_health.memory_mobile/load:news:wikipedia" - }, - { - "duration": "40.0", - "name": "system_health.memory_mobile/load:search:baidu" - }, - { - "duration": "30.0", - "name": "system_health.memory_mobile/load:search:ebay" - }, - { - "duration": "30.0", - "name": "system_health.memory_mobile/load:search:google" - }, - { - "duration": "31.0", - "name": "system_health.memory_mobile/load:search:taobao" - }, - { - "duration": "29.0", - "name": "system_health.memory_mobile/load:search:yahoo" - }, - { - "duration": "30.0", - "name": "system_health.memory_mobile/load:search:yandex" - }, - { - "duration": "30.0", - "name": "system_health.memory_mobile/load:social:twitter" - }, - { - "duration": "30.0", - "name": "system_health.memory_mobile/load:tools:docs" - }, - { - "duration": "33.0", - "name": "system_health.memory_mobile/load:tools:drive" - }, - { - "duration": "29.0", - "name": "system_health.memory_mobile/load:tools:dropbox" - }, - { - "duration": "32.0", - "name": "system_health.memory_mobile/load:tools:stackoverflow" - }, - { - "duration": "41.0", - "name": "system_health.memory_mobile/load:tools:weather" - }, - { - "duration": "290.0", - "name": "system_health.memory_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "141.0", - "name": "v8.browsing_mobile/browse:chrome:newtab" - }, - { - "duration": "50.0", - "name": "v8.browsing_mobile/browse:chrome:omnibox" - }, - { - "duration": "146.0", - "name": "v8.browsing_mobile/browse:media:facebook_photos" - }, - { - "duration": "81.0", - "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "125.0", - "name": "v8.browsing_mobile/browse:media:imgur" - }, - { - "duration": "103.0", - "name": "v8.browsing_mobile/browse:news:cricbuzz" - }, - { - "duration": "84.0", - "name": "v8.browsing_mobile/browse:news:qq" - }, - { - "duration": "93.0", - "name": "v8.browsing_mobile/browse:news:reddit" - }, - { - "duration": "423.0", - "name": "v8.browsing_mobile/browse:news:toi" - }, - { - "duration": "88.0", - "name": "v8.browsing_mobile/browse:news:washingtonpost" - }, - { - "duration": "167.0", - "name": "v8.browsing_mobile/browse:shopping:amazon" - }, - { - "duration": "121.0", - "name": "v8.browsing_mobile/browse:social:facebook" - }, - { - "duration": "146.0", - "name": "v8.browsing_mobile/browse:social:instagram" - }, - { - "duration": "82.0", - "name": "v8.browsing_mobile/browse:social:twitter" - }, - { - "duration": "83.0", - "name": "v8.browsing_mobile/browse:tools:maps" - }, - { - "duration": "133.0", - "name": "speedometer/http://browserbench.org/Speedometer/" - }, - { - "duration": "250.0", - "name": "speedometer2/Speedometer2" - } -]
diff --git a/tools/perf/core/shard_maps/timing_data/android_one_story_timing.json b/tools/perf/core/shard_maps/timing_data/android_one_story_timing.json deleted file mode 100644 index 867ec34..0000000 --- a/tools/perf/core/shard_maps/timing_data/android_one_story_timing.json +++ /dev/null
@@ -1,7766 +0,0 @@ -[ - { - "duration": "46.11588017676768", - "name": "blink_perf.bindings/append-child.html" - }, - { - "duration": "16.958273373737367", - "name": "blink_perf.bindings/create-element.html" - }, - { - "duration": "14.5496565", - "name": "blink_perf.bindings/document-implementation.html" - }, - { - "duration": "16.948656121212125", - "name": "blink_perf.bindings/dom-attribute-on-prototoype.html" - }, - { - "duration": "14.822673656565655", - "name": "blink_perf.bindings/first-child.html" - }, - { - "duration": "33.83953399999999", - "name": "blink_perf.bindings/gc-forest.html" - }, - { - "duration": "43.957746161616164", - "name": "blink_perf.bindings/gc-mini-tree.html" - }, - { - "duration": "141.21343432323235", - "name": "blink_perf.bindings/gc-tree.html" - }, - { - "duration": "15.903650722222219", - "name": "blink_perf.bindings/get-attribute-rare.html" - }, - { - "duration": "14.907034525252529", - "name": "blink_perf.bindings/get-attribute.html" - }, - { - "duration": "14.581188954545443", - "name": "blink_perf.bindings/get-element-by-id.html" - }, - { - "duration": "17.277657515151517", - "name": "blink_perf.bindings/get-elements-by-tag-name.html" - }, - { - "duration": "14.380509030303024", - "name": "blink_perf.bindings/id-getter.html" - }, - { - "duration": "15.543626989898987", - "name": "blink_perf.bindings/id-setter.html" - }, - { - "duration": "22.60305574747475", - "name": "blink_perf.bindings/indexed-getter.html" - }, - { - "duration": "14.349146757575758", - "name": "blink_perf.bindings/insert-before.html" - }, - { - "duration": "14.458588505050503", - "name": "blink_perf.bindings/named-property-enumerator.html" - }, - { - "duration": "137.87292016161615", - "name": "blink_perf.bindings/node-list-access.html" - }, - { - "duration": "14.885836641414139", - "name": "blink_perf.bindings/node-type.html" - }, - { - "duration": "8.835963313131312", - "name": "blink_perf.bindings/post-message.html" - }, - { - "duration": "15.741981792929295", - "name": "blink_perf.bindings/sequence-conversion-array.html" - }, - { - "duration": "14.268819131313137", - "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html" - }, - { - "duration": "9.770539151515154", - "name": "blink_perf.bindings/serialize-array.html" - }, - { - "duration": "7.976985844444439", - "name": "blink_perf.bindings/serialize-long-string.html" - }, - { - "duration": "19.88010763636364", - "name": "blink_perf.bindings/serialize-map.html" - }, - { - "duration": "7.711226951515152", - "name": "blink_perf.bindings/serialize-nested-array.html" - }, - { - "duration": "14.113388747474751", - "name": "blink_perf.bindings/set-attribute-rare.html" - }, - { - "duration": "14.538455333333333", - "name": "blink_perf.bindings/set-attribute.html" - }, - { - "duration": "2.4408102000000002E-4", - "name": "blink_perf.bindings/structured-clone-json-deserialize.html" - }, - { - "duration": "6.849169650000001E-4", - "name": "blink_perf.bindings/structured-clone-json-serialize.html" - }, - { - "duration": "4.0650367625E-4", - "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html" - }, - { - "duration": "4.3269991875E-4", - "name": "blink_perf.bindings/structured-clone-long-string-serialize.html" - }, - { - "duration": "15.192348070707075", - "name": "blink_perf.bindings/typed-array-construct-from-array.html" - }, - { - "duration": "17.304833262626268", - "name": "blink_perf.bindings/typed-array-construct-from-same-type.html" - }, - { - "duration": "14.785067257575758", - "name": "blink_perf.bindings/typed-array-construct-from-typed.html" - }, - { - "duration": "14.01034472727272", - "name": "blink_perf.bindings/typed-array-set-from-typed.html" - }, - { - "duration": "14.761959520202018", - "name": "blink_perf.bindings/undefined-first-child.html" - }, - { - "duration": "14.571300479797983", - "name": "blink_perf.bindings/undefined-get-element-by-id.html" - }, - { - "duration": "14.570636954545458", - "name": "blink_perf.bindings/undefined-id-getter.html" - }, - { - "duration": "61.69041369696972", - "name": "blink_perf.css/AttributeDescendantSelector.html" - }, - { - "duration": "19.13635702020202", - "name": "blink_perf.css/CSSPropertySetterGetter.html" - }, - { - "duration": "19.339181656565653", - "name": "blink_perf.css/CSSPropertySetterGetterMethods.html" - }, - { - "duration": "19.191257545454537", - "name": "blink_perf.css/CSSPropertyUpdateValue.html" - }, - { - "duration": "16.541487671717167", - "name": "blink_perf.css/ChangeStyleChildClassSelector.html" - }, - { - "duration": "13.316393287878789", - "name": "blink_perf.css/ChangeStyleChildElementSelectors.html" - }, - { - "duration": "13.463064919191917", - "name": "blink_perf.css/ChangeStyleElementSelector.html" - }, - { - "duration": "13.185796838383839", - "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html" - }, - { - "duration": "13.107075353535354", - "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html" - }, - { - "duration": "13.22913037878788", - "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html" - }, - { - "duration": "12.920253080808086", - "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html" - }, - { - "duration": "13.074909363636365", - "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html" - }, - { - "duration": "17.373338101010102", - "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html" - }, - { - "duration": "13.185479878787879", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html" - }, - { - "duration": "13.190450914141406", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "15.71650965151515", - "name": "blink_perf.css/ChangeStyleShallowTree.html" - }, - { - "duration": "13.085204212121216", - "name": "blink_perf.css/ChangeStyleSingleClassSelector.html" - }, - { - "duration": "13.269187762626261", - "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html" - }, - { - "duration": "12.953174176767671", - "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html" - }, - { - "duration": "13.111936696969694", - "name": "blink_perf.css/ChangeStyleUniversalSelector.html" - }, - { - "duration": "13.34662251515152", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html" - }, - { - "duration": "13.085113540404045", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "27.715978272727277", - "name": "blink_perf.css/ClassDescendantSelector.html" - }, - { - "duration": "24.381304606060596", - "name": "blink_perf.css/ClassInvalidation.html" - }, - { - "duration": "17.685935535353536", - "name": "blink_perf.css/FocusUpdate.html" - }, - { - "duration": "14.598226055555557", - "name": "blink_perf.css/LoadBootstrapBlog.html" - }, - { - "duration": "15.423096469696976", - "name": "blink_perf.css/LoadMaterializeStarterPage.html" - }, - { - "duration": "17.16691754545455", - "name": "blink_perf.css/LoadSemanticPageExample.html" - }, - { - "duration": "18.817650404040403", - "name": "blink_perf.css/PseudoClassSelectors.html" - }, - { - "duration": "16.922282974747475", - "name": "blink_perf.css/SelectorCountScaling.html" - }, - { - "duration": "65.69019256565656", - "name": "blink_perf.dom/addRange.html" - }, - { - "duration": "10.54878385858586", - "name": "blink_perf.dom/delete-in-password-field.html" - }, - { - "duration": "28.800839848484852", - "name": "blink_perf.dom/div-editable.html" - }, - { - "duration": "7.753005648484851", - "name": "blink_perf.dom/inner_html_with_selection.html" - }, - { - "duration": "29.6456075959596", - "name": "blink_perf.dom/long-sibling-list.html" - }, - { - "duration": "20.321591131313127", - "name": "blink_perf.dom/modify-element-classname.html" - }, - { - "duration": "15.275251292929296", - "name": "blink_perf.dom/modify-element-id.html" - }, - { - "duration": "15.726046449494952", - "name": "blink_perf.dom/modify-element-title.html" - }, - { - "duration": "9.845529904040406", - "name": "blink_perf.dom/move-down-with-hidden-elements.html" - }, - { - "duration": "9.873290505050502", - "name": "blink_perf.dom/move-up-with-hidden-elements.html" - }, - { - "duration": "8.13497367474747", - "name": "blink_perf.dom/remove_child_with_selection.html" - }, - { - "duration": "19.941283414141413", - "name": "blink_perf.dom/select-multiple-add.html" - }, - { - "duration": "19.91597686868687", - "name": "blink_perf.dom/select-single-add.html" - }, - { - "duration": "23.339194989898992", - "name": "blink_perf.dom/select-single-remove.html" - }, - { - "duration": "13.849071040404043", - "name": "blink_perf.dom/textarea-dom.html" - }, - { - "duration": "37.093740464646466", - "name": "blink_perf.dom/textarea-edit.html" - }, - { - "duration": "29.98875238888889", - "name": "blink_perf.events/EventsDispatching.html" - }, - { - "duration": "21.052653161616163", - "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html" - }, - { - "duration": "5.635564945454546E-4", - "name": "blink_perf.events/EventsDispatchingInShadowTrees.html" - }, - { - "duration": "136.06589464646467", - "name": "blink_perf.events/hit-test-lots-of-layers.html" - }, - { - "duration": "99.12477192929296", - "name": "blink_perf.image_decoder/decode-gif.html" - }, - { - "duration": "43.500876888888904", - "name": "blink_perf.image_decoder/decode-jpeg.html" - }, - { - "duration": "74.2216951313131", - "name": "blink_perf.image_decoder/decode-lossless-webp.html" - }, - { - "duration": "30.68299281818182", - "name": "blink_perf.image_decoder/decode-lossy-webp.html" - }, - { - "duration": "47.08008320202019", - "name": "blink_perf.image_decoder/decode-png-palette-opaque.html" - }, - { - "duration": "30.539590020202017", - "name": "blink_perf.image_decoder/decode-png-palette.html" - }, - { - "duration": "66.46277998989896", - "name": "blink_perf.image_decoder/decode-png.html" - }, - { - "duration": "17.4390527979798", - "name": "blink_perf.layout/ArabicLineLayout.html" - }, - { - "duration": "9.042170202020204", - "name": "blink_perf.layout/Shapes/MultipleShapes.html" - }, - { - "duration": "20.984609454545442", - "name": "blink_perf.layout/SimpleTextPathLineLayout.html" - }, - { - "duration": "14.823463853535348", - "name": "blink_perf.layout/add-remove-inline-floats.html" - }, - { - "duration": "19.89757577777777", - "name": "blink_perf.layout/attach-inlines-2.html" - }, - { - "duration": "16.10371115656566", - "name": "blink_perf.layout/attach-inlines.html" - }, - { - "duration": "17.035539474747473", - "name": "blink_perf.layout/auto-grid-lots-of-data.html" - }, - { - "duration": "15.775934348484842", - "name": "blink_perf.layout/chapter-reflow-once-random.html" - }, - { - "duration": "16.817956484848487", - "name": "blink_perf.layout/chapter-reflow-once.html" - }, - { - "duration": "14.153643818181816", - "name": "blink_perf.layout/chapter-reflow-thrice.html" - }, - { - "duration": "14.37794466161616", - "name": "blink_perf.layout/chapter-reflow-twice.html" - }, - { - "duration": "14.87248212121212", - "name": "blink_perf.layout/chapter-reflow.html" - }, - { - "duration": "12.27108771717172", - "name": "blink_perf.layout/character_fallback.html" - }, - { - "duration": "9.37203184343434", - "name": "blink_perf.layout/character_fallback_aat.html" - }, - { - "duration": "19.517009080808077", - "name": "blink_perf.layout/fixed-grid-lots-of-data.html" - }, - { - "duration": "19.008170404040403", - "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html" - }, - { - "duration": "45.59447960606062", - "name": "blink_perf.layout/flexbox-column-nowrap.html" - }, - { - "duration": "17.46395046464647", - "name": "blink_perf.layout/flexbox-column-wrap.html" - }, - { - "duration": "19.185982868686867", - "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html" - }, - { - "duration": "18.651157666666663", - "name": "blink_perf.layout/flexbox-lots-of-data.html" - }, - { - "duration": "17.18123377272727", - "name": "blink_perf.layout/flexbox-row-nowrap.html" - }, - { - "duration": "17.274999040404044", - "name": "blink_perf.layout/flexbox-row-wrap.html" - }, - { - "duration": "15.15245080808081", - "name": "blink_perf.layout/flexbox-with-stretch-layout.html" - }, - { - "duration": "143.9531676262626", - "name": "blink_perf.layout/floats_100_100.html" - }, - { - "duration": "145.81074535353537", - "name": "blink_perf.layout/floats_100_100_nested.html" - }, - { - "duration": "64.99751345454547", - "name": "blink_perf.layout/floats_10_1000.html" - }, - { - "duration": "26.00215734343435", - "name": "blink_perf.layout/floats_20_100.html" - }, - { - "duration": "30.909975858585863", - "name": "blink_perf.layout/floats_20_100_nested.html" - }, - { - "duration": "16.5200756010101", - "name": "blink_perf.layout/floats_2_100.html" - }, - { - "duration": "18.324629828282834", - "name": "blink_perf.layout/floats_2_100_nested.html" - }, - { - "duration": "43.982632141414136", - "name": "blink_perf.layout/floats_50_100.html" - }, - { - "duration": "45.676144383838405", - "name": "blink_perf.layout/floats_50_100_nested.html" - }, - { - "duration": "19.07882637373738", - "name": "blink_perf.layout/hindi-line-layout.html" - }, - { - "duration": "56.14791616161616", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html" - }, - { - "duration": "55.33814324242425", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html" - }, - { - "duration": "55.16999016161618", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html" - }, - { - "duration": "8.355988558585862", - "name": "blink_perf.layout/latin-complex-text.html" - }, - { - "duration": "13.816607297979804", - "name": "blink_perf.layout/layers_overlap_2d.html" - }, - { - "duration": "14.691070934343427", - "name": "blink_perf.layout/layers_overlap_3d.html" - }, - { - "duration": "61.910897626262624", - "name": "blink_perf.layout/line-layout-line-height.html" - }, - { - "duration": "17.49636109090909", - "name": "blink_perf.layout/line-layout-repeat-append.html" - }, - { - "duration": "16.218182060606054", - "name": "blink_perf.layout/line-layout.html" - }, - { - "duration": "9.823211005050505", - "name": "blink_perf.layout/long-line-nowrap-collapse.html" - }, - { - "duration": "11.646156136363638", - "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html" - }, - { - "duration": "26.90012944444445", - "name": "blink_perf.layout/long-line-nowrap.html" - }, - { - "duration": "18.99501368686869", - "name": "blink_perf.layout/multicol/deeply-nested-tables.html" - }, - { - "duration": "14.022372070707068", - "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html" - }, - { - "duration": "16.71774947474747", - "name": "blink_perf.layout/multicol/lots-of-text-autofill.html" - }, - { - "duration": "16.89946072727272", - "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html" - }, - { - "duration": "16.88104084848485", - "name": "blink_perf.layout/multicol/lots-of-text-balanced.html" - }, - { - "duration": "17.365956883838386", - "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html" - }, - { - "duration": "19.290936484848476", - "name": "blink_perf.layout/multicol/tall-content-short-columns.html" - }, - { - "duration": "17.691987414141416", - "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html" - }, - { - "duration": "15.683902126262621", - "name": "blink_perf.layout/nested-grid.html" - }, - { - "duration": "16.033607530303033", - "name": "blink_perf.layout/nested-percent-height-tables.html" - }, - { - "duration": "215.13033382828283", - "name": "blink_perf.layout/subtree-detaching.html" - }, - { - "duration": "17.123495368686868", - "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html" - }, - { - "duration": "25.958471121212106", - "name": "blink_perf.layout/word-break-break-all.html" - }, - { - "duration": "24.225948595959597", - "name": "blink_perf.layout/word-break-break-word.html" - }, - { - "duration": "24.232047171717173", - "name": "blink_perf.layout/word-wrap-break-word.html" - }, - { - "duration": "46.61487470707067", - "name": "blink_perf.owp_storage/blob-perf-files.html" - }, - { - "duration": "30.82406958585858", - "name": "blink_perf.owp_storage/blob-perf-ipc.html" - }, - { - "duration": "28.947062080808085", - "name": "blink_perf.owp_storage/blob-perf-shm.html" - }, - { - "duration": "29.7789653131313", - "name": "blink_perf.owp_storage/blob-perf-tiny.html" - }, - { - "duration": "32.96900536363636", - "name": "blink_perf.owp_storage/idb-load-docs.html" - }, - { - "duration": "33.72758421717172", - "name": "blink_perf.parser/css-parser-yui.html" - }, - { - "duration": "66.4045916767677", - "name": "blink_perf.parser/html-parser-threaded.html" - }, - { - "duration": "81.41358826262626", - "name": "blink_perf.parser/html-parser.html" - }, - { - "duration": "4.0349364125E-4", - "name": "blink_perf.parser/html5-full-render.html" - }, - { - "duration": "14.808145494949493", - "name": "blink_perf.parser/iframe-append-remove.html" - }, - { - "duration": "17.203239313131316", - "name": "blink_perf.parser/innerHTML-setter-siblings.html" - }, - { - "duration": "15.875073202020195", - "name": "blink_perf.parser/innerHTML-setter.html" - }, - { - "duration": "15.367305939393942", - "name": "blink_perf.parser/query-selector-all-attribute-complex.html" - }, - { - "duration": "15.32187304040404", - "name": "blink_perf.parser/query-selector-all-attribute.html" - }, - { - "duration": "17.601194106060603", - "name": "blink_perf.parser/query-selector-all-class-deep.html" - }, - { - "duration": "18.13945328282828", - "name": "blink_perf.parser/query-selector-all-class-first.html" - }, - { - "duration": "15.904186277777777", - "name": "blink_perf.parser/query-selector-all-class-last.html" - }, - { - "duration": "14.115226121212123", - "name": "blink_perf.parser/query-selector-all-class.html" - }, - { - "duration": "16.18732083838383", - "name": "blink_perf.parser/query-selector-all-deep.html" - }, - { - "duration": "19.091935914141416", - "name": "blink_perf.parser/query-selector-all-first.html" - }, - { - "duration": "24.55646744444445", - "name": "blink_perf.parser/query-selector-all-id-deep.html" - }, - { - "duration": "18.086754898989895", - "name": "blink_perf.parser/query-selector-all-id-first.html" - }, - { - "duration": "26.15980541414142", - "name": "blink_perf.parser/query-selector-all-id-last.html" - }, - { - "duration": "15.550700924242415", - "name": "blink_perf.parser/query-selector-all-last.html" - }, - { - "duration": "17.006558944444443", - "name": "blink_perf.parser/query-selector-deep.html" - }, - { - "duration": "18.03450713131312", - "name": "blink_perf.parser/query-selector-first.html" - }, - { - "duration": "19.657671040404026", - "name": "blink_perf.parser/query-selector-id-deep.html" - }, - { - "duration": "22.588081151515148", - "name": "blink_perf.parser/query-selector-id-last.html" - }, - { - "duration": "15.788842535353535", - "name": "blink_perf.parser/query-selector-last.html" - }, - { - "duration": "21.046585707070708", - "name": "blink_perf.parser/simple-url.html" - }, - { - "duration": "18.62458833333334", - "name": "blink_perf.parser/textarea-parsing.html" - }, - { - "duration": "32.91694304040405", - "name": "blink_perf.parser/tiny-innerHTML.html" - }, - { - "duration": "16.920294631313137", - "name": "blink_perf.parser/url-parser.html" - }, - { - "duration": "15.02444823737374", - "name": "blink_perf.parser/xml-parser.html" - }, - { - "duration": "23.420363333333345", - "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html" - }, - { - "duration": "12.240019111111105", - "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html" - }, - { - "duration": "12.256521939393938", - "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html" - }, - { - "duration": "8.530290705050506", - "name": "blink_perf.shadow_dom/shadow-style-share.html" - }, - { - "duration": "9.645421439393939", - "name": "blink_perf.shadow_dom/style-sheet-insert.html" - }, - { - "duration": "10.80601707070707", - "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html" - }, - { - "duration": "18.38711732323233", - "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html" - }, - { - "duration": "35.23128183838385", - "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html" - }, - { - "duration": "39.11045890909092", - "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html" - }, - { - "duration": "10.056312080808079", - "name": "blink_perf.shadow_dom/v0-content-reprojection.html" - }, - { - "duration": "8.673109136363633", - "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html" - }, - { - "duration": "8.43266895151515", - "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html" - }, - { - "duration": "10.449778055555555", - "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html" - }, - { - "duration": "9.106470732323235", - "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html" - }, - { - "duration": "94.71011717171722", - "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html" - }, - { - "duration": "8.098405365656566", - "name": "blink_perf.shadow_dom/v1-distribution.html" - }, - { - "duration": "8.329176944444445", - "name": "blink_perf.shadow_dom/v1-host-child-append.html" - }, - { - "duration": "87.73995875757576", - "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html" - }, - { - "duration": "253.66173848484874", - "name": "blink_perf.shadow_dom/v1-large-deep-layout.html" - }, - { - "duration": "8.146064798989894", - "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html" - }, - { - "duration": "8.090373575757576", - "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html" - }, - { - "duration": "12.385857883838383", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html" - }, - { - "duration": "8.122181270707065", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "8.20882502323232", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html" - }, - { - "duration": "10.111110398989897", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html" - }, - { - "duration": "8.15515672828283", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "14.128646833333342", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html" - }, - { - "duration": "7.719611421212118", - "name": "blink_perf.shadow_dom/v1-slot-append.html" - }, - { - "duration": "24.600128242424226", - "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html" - }, - { - "duration": "24.598114505050493", - "name": "blink_perf.shadow_dom/v1-small-deep-layout.html" - }, - { - "duration": "7.645644859595962", - "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html" - }, - { - "duration": "7.745897417171716", - "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html" - }, - { - "duration": "15.907482181818184", - "name": "blink_perf.svg/AzLizardBenjiPark.html" - }, - { - "duration": "21.331298101010095", - "name": "blink_perf.svg/Bamboo.html" - }, - { - "duration": "10.371573535353537", - "name": "blink_perf.svg/Cactus.html" - }, - { - "duration": "10.643708439393938", - "name": "blink_perf.svg/Cowboy.html" - }, - { - "duration": "12.554780833333332", - "name": "blink_perf.svg/Cowboy_transform.html" - }, - { - "duration": "8.705071404040405", - "name": "blink_perf.svg/CrawFishGanson.html" - }, - { - "duration": "9.582054782828283", - "name": "blink_perf.svg/Debian.html" - }, - { - "duration": "8.41623482222222", - "name": "blink_perf.svg/DropsOnABlade.html" - }, - { - "duration": "8.636321712121216", - "name": "blink_perf.svg/FlowerFromMyGarden.html" - }, - { - "duration": "8.948276621212123", - "name": "blink_perf.svg/FoodLeifLodahl.html" - }, - { - "duration": "9.347815186868687", - "name": "blink_perf.svg/France.html" - }, - { - "duration": "8.136593308080808", - "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html" - }, - { - "duration": "10.356708782828285", - "name": "blink_perf.svg/GearFlowers.html" - }, - { - "duration": "8.858241535353537", - "name": "blink_perf.svg/HarveyRayner.html" - }, - { - "duration": "16.043189540404043", - "name": "blink_perf.svg/HereGear.html" - }, - { - "duration": "22.754950444444447", - "name": "blink_perf.svg/MtSaintHelens.html" - }, - { - "duration": "7.991205082828283", - "name": "blink_perf.svg/Samurai.html" - }, - { - "duration": "32.0023292", - "name": "blink_perf.svg/SierpinskiCarpet.html" - }, - { - "duration": "12.137011707070709", - "name": "blink_perf.svg/SvgCubics.html" - }, - { - "duration": "12.484785217171718", - "name": "blink_perf.svg/SvgHitTesting.html" - }, - { - "duration": "15.615543646464646", - "name": "blink_perf.svg/SvgNestedUse.html" - }, - { - "duration": "9.620697813131315", - "name": "blink_perf.svg/UnderTheSee.html" - }, - { - "duration": "11.160207944444442", - "name": "blink_perf.svg/WorldIso.html" - }, - { - "duration": "20.824468656565653", - "name": "blink_perf.svg/Worldcup.html" - }, - { - "duration": "53.155898777777765", - "name": "dromaeo/http://dromaeo.com?dom-attr" - }, - { - "duration": "47.9726883939394", - "name": "dromaeo/http://dromaeo.com?dom-modify" - }, - { - "duration": "56.1269846262626", - "name": "dromaeo/http://dromaeo.com?dom-query" - }, - { - "duration": "34.765811171717175", - "name": "dromaeo/http://dromaeo.com?dom-traverse" - }, - { - "duration": "33.62477897979797", - "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html" - }, - { - "duration": "18.792705909090913", - "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html" - }, - { - "duration": "19.725633959595964", - "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html" - }, - { - "duration": "917.7858718181816", - "name": "jetstream/http://browserbench.org/JetStream/" - }, - { - "duration": "289.5452808080808", - "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html" - }, - { - "duration": "31.956614871212114", - "name": "loading.mobile/58Pic" - }, - { - "duration": "60.59536039473685", - "name": "loading.mobile/58Pic_3g" - }, - { - "duration": "46.20916877525253", - "name": "loading.mobile/Amazon" - }, - { - "duration": "99.08260418421052", - "name": "loading.mobile/Amazon_3g" - }, - { - "duration": "46.1637123510101", - "name": "loading.mobile/BOLNoticias" - }, - { - "duration": "89.38759730263158", - "name": "loading.mobile/BOLNoticias_3g" - }, - { - "duration": "37.18312434848485", - "name": "loading.mobile/Baidu" - }, - { - "duration": "67.70539143421054", - "name": "loading.mobile/Baidu_3g" - }, - { - "duration": "56.09196488888889", - "name": "loading.mobile/Bradesco" - }, - { - "duration": "131.17041710526317", - "name": "loading.mobile/Bradesco_3g" - }, - { - "duration": "43.02147597727272", - "name": "loading.mobile/Dailymotion" - }, - { - "duration": "83.23533499999999", - "name": "loading.mobile/Dailymotion_3g" - }, - { - "duration": "47.15194810606061", - "name": "loading.mobile/Dawn" - }, - { - "duration": "86.90406444736841", - "name": "loading.mobile/Dawn_3g" - }, - { - "duration": "30.667632087542096", - "name": "loading.mobile/DevOpera" - }, - { - "duration": "18.991100671052635", - "name": "loading.mobile/DevOpera_cold" - }, - { - "duration": "61.76827615789473", - "name": "loading.mobile/DevOpera_cold_3g" - }, - { - "duration": "26.104528171052635", - "name": "loading.mobile/DevOpera_hot" - }, - { - "duration": "30.33898446052631", - "name": "loading.mobile/DevOpera_hot_3g" - }, - { - "duration": "22.006514118421048", - "name": "loading.mobile/DevOpera_warm" - }, - { - "duration": "26.286113671052636", - "name": "loading.mobile/DevOpera_warm_3g" - }, - { - "duration": "58.01909592676769", - "name": "loading.mobile/Dramaq" - }, - { - "duration": "121.84758748684212", - "name": "loading.mobile/Dramaq_3g" - }, - { - "duration": "35.475206929292916", - "name": "loading.mobile/EnquiryIndianRail" - }, - { - "duration": "73.92523423684213", - "name": "loading.mobile/EnquiryIndianRail_3g" - }, - { - "duration": "40.78022890151514", - "name": "loading.mobile/Facebook" - }, - { - "duration": "76.20553767105264", - "name": "loading.mobile/Facebook_3g" - }, - { - "duration": "42.598053430976435", - "name": "loading.mobile/FlipBoard" - }, - { - "duration": "23.298914171052637", - "name": "loading.mobile/FlipBoard_cold" - }, - { - "duration": "79.50976585526318", - "name": "loading.mobile/FlipBoard_cold_3g" - }, - { - "duration": "36.02893692105263", - "name": "loading.mobile/FlipBoard_hot" - }, - { - "duration": "46.03850914473685", - "name": "loading.mobile/FlipBoard_hot_3g" - }, - { - "duration": "30.043965907894734", - "name": "loading.mobile/FlipBoard_warm" - }, - { - "duration": "42.93046400000001", - "name": "loading.mobile/FlipBoard_warm_3g" - }, - { - "duration": "50.98594493097643", - "name": "loading.mobile/FlipKart" - }, - { - "duration": "29.46684753947368", - "name": "loading.mobile/FlipKart_cold" - }, - { - "duration": "80.45087688157894", - "name": "loading.mobile/FlipKart_cold_3g" - }, - { - "duration": "53.2245862763158", - "name": "loading.mobile/FlipKart_hot" - }, - { - "duration": "53.93000388157895", - "name": "loading.mobile/FlipKart_hot_3g" - }, - { - "duration": "40.59452125000001", - "name": "loading.mobile/FlipKart_warm" - }, - { - "duration": "42.51365721052632", - "name": "loading.mobile/FlipKart_warm_3g" - }, - { - "duration": "37.9557026590909", - "name": "loading.mobile/FranceTVInfo" - }, - { - "duration": "79.0056995", - "name": "loading.mobile/FranceTVInfo_3g" - }, - { - "duration": "1.8709898E-4", - "name": "loading.mobile/G1" - }, - { - "duration": "136.92386827631574", - "name": "loading.mobile/G1_3g" - }, - { - "duration": "85.16835395454547", - "name": "loading.mobile/GSShop" - }, - { - "duration": "205.10452092105263", - "name": "loading.mobile/GSShop_3g" - }, - { - "duration": "34.37991998232324", - "name": "loading.mobile/GoogleBrazil" - }, - { - "duration": "69.98174694736842", - "name": "loading.mobile/GoogleBrazil_3g" - }, - { - "duration": "33.29722180050504", - "name": "loading.mobile/GoogleIndia" - }, - { - "duration": "63.63973656578948", - "name": "loading.mobile/GoogleIndia_3g" - }, - { - "duration": "31.866510209595962", - "name": "loading.mobile/GoogleIndonesia" - }, - { - "duration": "62.288706447368426", - "name": "loading.mobile/GoogleIndonesia_3g" - }, - { - "duration": "5.684852624999999E-4", - "name": "loading.mobile/GoogleRedirectToGoogleJapan" - }, - { - "duration": "98.12175659210527", - "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g" - }, - { - "duration": "1.9367337250000003E-4", - "name": "loading.mobile/HashOcean" - }, - { - "duration": "45.4262358409091", - "name": "loading.mobile/Hongkiat" - }, - { - "duration": "96.30480825", - "name": "loading.mobile/Hongkiat_3g" - }, - { - "duration": "1.8424987825E-4", - "name": "loading.mobile/IBI" - }, - { - "duration": "50.74642942929292", - "name": "loading.mobile/KapanLagi" - }, - { - "duration": "106.50882002631579", - "name": "loading.mobile/KapanLagi_3g" - }, - { - "duration": "61.659650835858606", - "name": "loading.mobile/Kaskus" - }, - { - "duration": "128.32314298684213", - "name": "loading.mobile/Kaskus_3g" - }, - { - "duration": "47.325242303030315", - "name": "loading.mobile/LocalMoxie" - }, - { - "duration": "101.44414681578948", - "name": "loading.mobile/LocalMoxie_3g" - }, - { - "duration": "26.88065861616162", - "name": "loading.mobile/Locanto" - }, - { - "duration": "50.282310671052635", - "name": "loading.mobile/Locanto_3g" - }, - { - "duration": "48.74100935353533", - "name": "loading.mobile/OLX" - }, - { - "duration": "107.70253847368421", - "name": "loading.mobile/OLX_3g" - }, - { - "duration": "34.35447536363637", - "name": "loading.mobile/QQNews" - }, - { - "duration": "66.28642030263157", - "name": "loading.mobile/QQNews_3g" - }, - { - "duration": "44.1245688409091", - "name": "loading.mobile/SlideShare" - }, - { - "duration": "97.80831707894737", - "name": "loading.mobile/SlideShare_3g" - }, - { - "duration": "25.53933844107744", - "name": "loading.mobile/Suumo" - }, - { - "duration": "18.337011973684213", - "name": "loading.mobile/Suumo_cold" - }, - { - "duration": "36.10378865789473", - "name": "loading.mobile/Suumo_cold_3g" - }, - { - "duration": "22.59527711842105", - "name": "loading.mobile/Suumo_hot" - }, - { - "duration": "30.8603525131579", - "name": "loading.mobile/Suumo_hot_3g" - }, - { - "duration": "19.497166092105267", - "name": "loading.mobile/Suumo_warm" - }, - { - "duration": "27.630094052631577", - "name": "loading.mobile/Suumo_warm_3g" - }, - { - "duration": "61.42332302020203", - "name": "loading.mobile/Thairath" - }, - { - "duration": "143.7809572368421", - "name": "loading.mobile/Thairath_3g" - }, - { - "duration": "59.35385573989898", - "name": "loading.mobile/TheStar" - }, - { - "duration": "110.82457996052626", - "name": "loading.mobile/TheStar_3g" - }, - { - "duration": "50.85479362121212", - "name": "loading.mobile/TribunNews" - }, - { - "duration": "97.30749690789473", - "name": "loading.mobile/TribunNews_3g" - }, - { - "duration": "38.36837163888888", - "name": "loading.mobile/Twitter" - }, - { - "duration": "81.63131626315787", - "name": "loading.mobile/Twitter_3g" - }, - { - "duration": "34.93738085353535", - "name": "loading.mobile/VoiceMemos" - }, - { - "duration": "20.61404625", - "name": "loading.mobile/VoiceMemos_cold" - }, - { - "duration": "69.47634473684211", - "name": "loading.mobile/VoiceMemos_cold_3g" - }, - { - "duration": "29.273142592105263", - "name": "loading.mobile/VoiceMemos_hot" - }, - { - "duration": "36.053650552631574", - "name": "loading.mobile/VoiceMemos_hot_3g" - }, - { - "duration": "24.43059014473684", - "name": "loading.mobile/VoiceMemos_warm" - }, - { - "duration": "30.975171618421058", - "name": "loading.mobile/VoiceMemos_warm_3g" - }, - { - "duration": "37.00499723737375", - "name": "loading.mobile/Wikipedia" - }, - { - "duration": "78.14831773684212", - "name": "loading.mobile/Wikipedia_3g" - }, - { - "duration": "52.026927265151485", - "name": "loading.mobile/YahooNews" - }, - { - "duration": "92.31386361842108", - "name": "loading.mobile/YahooNews_3g" - }, - { - "duration": "39.80022844949496", - "name": "loading.mobile/Youtube" - }, - { - "duration": "82.23618368421053", - "name": "loading.mobile/Youtube_3g" - }, - { - "duration": "37.548987292929304", - "name": "media.mobile/mse.html?media=aac_audio.mp4" - }, - { - "duration": "47.52511585858589", - "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4" - }, - { - "duration": "47.83807758585859", - "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true" - }, - { - "duration": "44.83968999999999", - "name": "media.mobile/mse.html?media=h264_video.mp4" - }, - { - "duration": "54.516439272727254", - "name": "media.mobile/video.html?src=crowd.ogg&type=audio" - }, - { - "duration": "62.23455444444445", - "name": "media.mobile/video.html?src=crowd1080_vp9.webm" - }, - { - "duration": "41.76764358585861", - "name": "media.mobile/video.html?src=crowd1080_vp9.webm&seek" - }, - { - "duration": "47.126835656565675", - "name": "media.mobile/video.html?src=crowd720_vp9.webm" - }, - { - "duration": "49.41520859595958", - "name": "media.mobile/video.html?src=tulip2.m4a&type=audio" - }, - { - "duration": "48.11606256565658", - "name": "media.mobile/video.html?src=tulip2.mp3&type=audio" - }, - { - "duration": "25.79813473737373", - "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek" - }, - { - "duration": "55.052803565656546", - "name": "media.mobile/video.html?src=tulip2.mp4" - }, - { - "duration": "56.06238214141414", - "name": "media.mobile/video.html?src=tulip2.mp4&busyjs" - }, - { - "duration": "32.144614121212115", - "name": "media.mobile/video.html?src=tulip2.mp4&seek" - }, - { - "duration": "49.01505273737373", - "name": "media.mobile/video.html?src=tulip2.ogg&type=audio" - }, - { - "duration": "27.163253767676775", - "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek" - }, - { - "duration": "72.98946956565658", - "name": "media.mobile/video.html?src=tulip2.vp9.webm" - }, - { - "duration": "44.6877756767677", - "name": "media.mobile/video.html?src=tulip2.vp9.webm&background" - }, - { - "duration": "55.27168175757573", - "name": "media.mobile/video.html?src=tulip2.vp9.webm&seek" - }, - { - "duration": "117.48906454545457", - "name": "media.mobile/video.html?src=tulip2.vp9.webm_Regular-3G" - }, - { - "duration": "49.15951075757575", - "name": "media.mobile/video.html?src=tulip2.wav&type=audio" - }, - { - "duration": "26.47638853535353", - "name": "media.mobile/video.html?src=tulip2.wav&type=audio&seek" - }, - { - "duration": "22.527336551515155", - "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "21.544606913131307", - "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "22.020035440404047", - "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science" - }, - { - "duration": "21.823783551515145", - "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "22.230730927272727", - "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "21.852501339393946", - "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google" - }, - { - "duration": "22.072938391919187", - "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "22.03361466060606", - "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna" - }, - { - "duration": "21.90003983434342", - "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "22.39802428484849", - "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "28.5357551959596", - "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "25.037982616161603", - "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "26.87284916161616", - "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science" - }, - { - "duration": "25.19328363030302", - "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "26.279713860606066", - "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "26.690566391919187", - "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google" - }, - { - "duration": "26.626705872727282", - "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "26.52315601212121", - "name": "memory.top_10_mobile/https_m_facebook_com_rihanna" - }, - { - "duration": "25.82676931515152", - "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "28.61734269090909", - "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "0.001360738275", - "name": "octane/http://chromium.github.io/octane/index.html?auto=1" - }, - { - "duration": "31.69687512121211", - "name": "oortonline_tbmv2/http://oortonline.gl/#run" - }, - { - "duration": "63.57457797979801", - "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom" - }, - { - "duration": "67.96207150505052", - "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180" - }, - { - "duration": "58.67883387878788", - "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404" - }, - { - "duration": "76.84976247474748", - "name": "power.typical_10_mobile/http://m.facebook.com/barackobama" - }, - { - "duration": "65.65702871717171", - "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486" - }, - { - "duration": "64.22954689898985", - "name": "power.typical_10_mobile/http://m.ynet.co.il" - }, - { - "duration": "66.61782502020202", - "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/" - }, - { - "duration": "59.39086063636365", - "name": "power.typical_10_mobile/http://wapbaike.baidu.com/" - }, - { - "duration": "61.875478222222235", - "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html" - }, - { - "duration": "70.08670448484844", - "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html" - }, - { - "duration": "63.92302949494951", - "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif" - }, - { - "duration": "30.655771909090916", - "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html" - }, - { - "duration": "47.64507763636365", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html" - }, - { - "duration": "25.768173898989907", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html" - }, - { - "duration": "46.557966424242416", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html" - }, - { - "duration": "37.83792338383839", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html" - }, - { - "duration": "25.150081313131317", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html" - }, - { - "duration": "78.2400534141414", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html" - }, - { - "duration": "30.64900856565657", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html" - }, - { - "duration": "58.30685618181819", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html" - }, - { - "duration": "52.229418262626254", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html" - }, - { - "duration": "30.209122151515146", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html" - }, - { - "duration": "30.009297999999994", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html" - }, - { - "duration": "64.24319185858586", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html" - }, - { - "duration": "60.81319365656563", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html" - }, - { - "duration": "25.45603733333334", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html" - }, - { - "duration": "13.49614359090909", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html" - }, - { - "duration": "63.34203653535352", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html" - }, - { - "duration": "73.68662352525253", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html" - }, - { - "duration": "30.835506484848498", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html" - }, - { - "duration": "3.7465776571428573E-4", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html" - }, - { - "duration": "25.612182595959595", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html" - }, - { - "duration": "27.452922878787888", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html" - }, - { - "duration": "59.709742585858606", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html" - }, - { - "duration": "9.049177199999998E-4", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html" - }, - { - "duration": "125.35130679797983", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html" - }, - { - "duration": "65.16591459595963", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html" - }, - { - "duration": "4.337628666666667E-4", - "name": "rendering.mobile/amazon" - }, - { - "duration": "2.1767616E-4", - "name": "rendering.mobile/amazon_desktop" - }, - { - "duration": "2.319018033333333E-4", - "name": "rendering.mobile/amazon_desktop_gpu_raster" - }, - { - "duration": "4.076163E-4", - "name": "rendering.mobile/amazon_sync_scroll" - }, - { - "duration": "35.39871295454544", - "name": "rendering.mobile/analog_clock_svg" - }, - { - "duration": "35.97307738383836", - "name": "rendering.mobile/androidpolice" - }, - { - "duration": "44.09456423809524", - "name": "rendering.mobile/androidpolice_mobile" - }, - { - "duration": "42.41609833333333", - "name": "rendering.mobile/androidpolice_mobile_sync_scroll" - }, - { - "duration": "37.313202383838366", - "name": "rendering.mobile/androidpolice_sync_scroll" - }, - { - "duration": "8.266672194444444", - "name": "rendering.mobile/animometer_webgl" - }, - { - "duration": "7.940843294444444", - "name": "rendering.mobile/aquarium" - }, - { - "duration": "34.62126822222223", - "name": "rendering.mobile/background_color_animation" - }, - { - "duration": "35.335315888888886", - "name": "rendering.mobile/background_color_animation_with_gradient" - }, - { - "duration": "22.586555515151524", - "name": "rendering.mobile/baidu" - }, - { - "duration": "25.449218842105264", - "name": "rendering.mobile/baidu_mobile" - }, - { - "duration": "23.871524631578946", - "name": "rendering.mobile/baidu_mobile_sync_scroll" - }, - { - "duration": "22.811048727272734", - "name": "rendering.mobile/baidu_sync_scroll" - }, - { - "duration": "39.096217606060605", - "name": "rendering.mobile/balls_css_key_frame_animations" - }, - { - "duration": "35.31748415151515", - "name": "rendering.mobile/balls_css_transition_2_properties" - }, - { - "duration": "34.97136248484849", - "name": "rendering.mobile/balls_css_transition_40_properties" - }, - { - "duration": "34.503684484848485", - "name": "rendering.mobile/balls_css_transition_all_properties" - }, - { - "duration": "34.75706066666666", - "name": "rendering.mobile/balls_javascript_canvas" - }, - { - "duration": "34.38402896969697", - "name": "rendering.mobile/balls_javascript_css" - }, - { - "duration": "61.84612615151515", - "name": "rendering.mobile/balls_svg_animations" - }, - { - "duration": "41.329573", - "name": "rendering.mobile/basic_stream" - }, - { - "duration": "20.999014696969702", - "name": "rendering.mobile/bing" - }, - { - "duration": "23.548457447368413", - "name": "rendering.mobile/bing_mobile" - }, - { - "duration": "22.53785831578948", - "name": "rendering.mobile/bing_mobile_sync_scroll" - }, - { - "duration": "21.041294737373747", - "name": "rendering.mobile/bing_sync_scroll" - }, - { - "duration": "7.711096233333333", - "name": "rendering.mobile/blob" - }, - { - "duration": "32.413254101010104", - "name": "rendering.mobile/blogspot" - }, - { - "duration": "42.76526068686869", - "name": "rendering.mobile/blogspot_desktop" - }, - { - "duration": "43.47625450505053", - "name": "rendering.mobile/blogspot_desktop_gpu_raster" - }, - { - "duration": "24.340268789473683", - "name": "rendering.mobile/blogspot_mobile" - }, - { - "duration": "23.17890228947369", - "name": "rendering.mobile/blogspot_mobile_sync_scroll" - }, - { - "duration": "24.184026626262632", - "name": "rendering.mobile/blogspot_sync_scroll" - }, - { - "duration": "48.89654309090909", - "name": "rendering.mobile/boingboing" - }, - { - "duration": "54.25529005263157", - "name": "rendering.mobile/boingboing_mobile" - }, - { - "duration": "51.073391505050495", - "name": "rendering.mobile/boingboing_sync_scroll" - }, - { - "duration": "33.65270923232323", - "name": "rendering.mobile/booking.com" - }, - { - "duration": "31.35980329292927", - "name": "rendering.mobile/booking.com_desktop" - }, - { - "duration": "32.26860741414143", - "name": "rendering.mobile/booking.com_desktop_gpu_raster" - }, - { - "duration": "34.433051368421054", - "name": "rendering.mobile/booking.com_mobile" - }, - { - "duration": "34.19782494736842", - "name": "rendering.mobile/booking.com_mobile_sync_scroll" - }, - { - "duration": "31.893064383838386", - "name": "rendering.mobile/booking.com_sync_scroll" - }, - { - "duration": "27.280201805555553", - "name": "rendering.mobile/bouncing_balls_15" - }, - { - "duration": "55.12635502777778", - "name": "rendering.mobile/bouncing_balls_shadow" - }, - { - "duration": "38.27855283333333", - "name": "rendering.mobile/bouncing_clipped_rectangles" - }, - { - "duration": "28.83284977777778", - "name": "rendering.mobile/bouncing_gradient_circles" - }, - { - "duration": "23.347585083333332", - "name": "rendering.mobile/bouncing_png_images" - }, - { - "duration": "40.31222483333332", - "name": "rendering.mobile/bouncing_svg_images" - }, - { - "duration": "37.6024215", - "name": "rendering.mobile/canvas_05000_pixels_per_second" - }, - { - "duration": "37.928435666666665", - "name": "rendering.mobile/canvas_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "37.66598083333334", - "name": "rendering.mobile/canvas_10000_pixels_per_second" - }, - { - "duration": "37.50322941666668", - "name": "rendering.mobile/canvas_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "38.18788991666667", - "name": "rendering.mobile/canvas_15000_pixels_per_second" - }, - { - "duration": "37.6527855", - "name": "rendering.mobile/canvas_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "37.85217816666666", - "name": "rendering.mobile/canvas_20000_pixels_per_second" - }, - { - "duration": "37.99117941666667", - "name": "rendering.mobile/canvas_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "36.404872583333336", - "name": "rendering.mobile/canvas_30000_pixels_per_second" - }, - { - "duration": "37.880488", - "name": "rendering.mobile/canvas_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "35.91962075000001", - "name": "rendering.mobile/canvas_40000_pixels_per_second" - }, - { - "duration": "38.50510925", - "name": "rendering.mobile/canvas_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "36.048261583333336", - "name": "rendering.mobile/canvas_50000_pixels_per_second" - }, - { - "duration": "38.12272216666667", - "name": "rendering.mobile/canvas_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "34.178707499999994", - "name": "rendering.mobile/canvas_60000_pixels_per_second" - }, - { - "duration": "36.3758965", - "name": "rendering.mobile/canvas_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "31.748871499999996", - "name": "rendering.mobile/canvas_75000_pixels_per_second" - }, - { - "duration": "33.01871058333334", - "name": "rendering.mobile/canvas_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "30.242103416666666", - "name": "rendering.mobile/canvas_90000_pixels_per_second" - }, - { - "duration": "31.017202749999996", - "name": "rendering.mobile/canvas_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.250932222222225", - "name": "rendering.mobile/canvas_animation_no_clear" - }, - { - "duration": "29.739879166666665", - "name": "rendering.mobile/canvas_arcs" - }, - { - "duration": "27.603154388888882", - "name": "rendering.mobile/canvas_font_cycler" - }, - { - "duration": "26.508212722222225", - "name": "rendering.mobile/canvas_lines" - }, - { - "duration": "33.41188494949495", - "name": "rendering.mobile/capitolvolkswagen" - }, - { - "duration": "35.18407297368421", - "name": "rendering.mobile/capitolvolkswagen_mobile" - }, - { - "duration": "34.15187786842106", - "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll" - }, - { - "duration": "34.26618850505049", - "name": "rendering.mobile/capitolvolkswagen_sync_scroll" - }, - { - "duration": "31.665265277777777", - "name": "rendering.mobile/card_expansion" - }, - { - "duration": "33.876778055555555", - "name": "rendering.mobile/card_expansion_animated" - }, - { - "duration": "31.40029566666666", - "name": "rendering.mobile/card_expansion_images_text" - }, - { - "duration": "28.839223222222213", - "name": "rendering.mobile/card_flying" - }, - { - "duration": "22.108635545454547", - "name": "rendering.mobile/cats_unscaled" - }, - { - "duration": "20.45130990909091", - "name": "rendering.mobile/cats_viewport_width" - }, - { - "duration": "43.26395176923077", - "name": "rendering.mobile/cc_poster_circle" - }, - { - "duration": "37.79164453846154", - "name": "rendering.mobile/cc_scroll_200_layer_grid" - }, - { - "duration": "37.8199263076923", - "name": "rendering.mobile/cc_scroll_text_only" - }, - { - "duration": "33.366856944444436", - "name": "rendering.mobile/chip_tune" - }, - { - "duration": "25.29337194949495", - "name": "rendering.mobile/cnn" - }, - { - "duration": "46.18370373737375", - "name": "rendering.mobile/cnn_article" - }, - { - "duration": "51.00842660526316", - "name": "rendering.mobile/cnn_article_mobile" - }, - { - "duration": "49.316013973684214", - "name": "rendering.mobile/cnn_article_mobile_sync_scroll" - }, - { - "duration": "46.746491252525246", - "name": "rendering.mobile/cnn_article_sync_scroll" - }, - { - "duration": "3.6470095666666665E-4", - "name": "rendering.mobile/cnn_desktop" - }, - { - "duration": "3.7121773E-4", - "name": "rendering.mobile/cnn_desktop_gpu_raster" - }, - { - "duration": "27.524577394736838", - "name": "rendering.mobile/cnn_mobile" - }, - { - "duration": "27.592984578947373", - "name": "rendering.mobile/cnn_mobile_sync_scroll" - }, - { - "duration": "53.57425483333333", - "name": "rendering.mobile/cnn_pathological" - }, - { - "duration": "25.910561909090898", - "name": "rendering.mobile/cnn_sync_scroll" - }, - { - "duration": "34.435065939393944", - "name": "rendering.mobile/compositor_heavy_animation" - }, - { - "duration": "30.496426722222225", - "name": "rendering.mobile/coordinated_animation" - }, - { - "duration": "31.05778805555555", - "name": "rendering.mobile/crafty_mind" - }, - { - "duration": "36.451371090909085", - "name": "rendering.mobile/css_animations_simultaneous_inline_style" - }, - { - "duration": "38.00563027272727", - "name": "rendering.mobile/css_animations_simultaneous_new_element" - }, - { - "duration": "37.41922842424243", - "name": "rendering.mobile/css_animations_simultaneous_style_element" - }, - { - "duration": "36.60167642424243", - "name": "rendering.mobile/css_animations_simultaneous_updating_class" - }, - { - "duration": "34.45237312121213", - "name": "rendering.mobile/css_animations_staggered_infinite_iterations" - }, - { - "duration": "39.06576066666668", - "name": "rendering.mobile/css_animations_staggered_inline_style" - }, - { - "duration": "40.88604378787879", - "name": "rendering.mobile/css_animations_staggered_new_element" - }, - { - "duration": "43.06298954545454", - "name": "rendering.mobile/css_animations_staggered_style_element" - }, - { - "duration": "39.07916251515152", - "name": "rendering.mobile/css_animations_staggered_updating_class" - }, - { - "duration": "39.04849912121212", - "name": "rendering.mobile/css_animations_triggered_inline_style" - }, - { - "duration": "40.80891684848484", - "name": "rendering.mobile/css_animations_triggered_new_element" - }, - { - "duration": "38.37790045454545", - "name": "rendering.mobile/css_animations_triggered_style_element" - }, - { - "duration": "38.98916760606061", - "name": "rendering.mobile/css_animations_triggered_updating_class" - }, - { - "duration": "36.638410575757575", - "name": "rendering.mobile/css_transitions_inline_style" - }, - { - "duration": "37.000023969696976", - "name": "rendering.mobile/css_transitions_new_element" - }, - { - "duration": "36.4328464375", - "name": "rendering.mobile/css_transitions_staggered_inline_style" - }, - { - "duration": "36.9672348125", - "name": "rendering.mobile/css_transitions_staggered_new_element" - }, - { - "duration": "36.64924334375001", - "name": "rendering.mobile/css_transitions_staggered_style_element" - }, - { - "duration": "36.294529562499996", - "name": "rendering.mobile/css_transitions_staggered_updating_class" - }, - { - "duration": "36.176571343750005", - "name": "rendering.mobile/css_transitions_style_element" - }, - { - "duration": "39.0401765625", - "name": "rendering.mobile/css_transitions_triggered_inline_style" - }, - { - "duration": "39.13640731249998", - "name": "rendering.mobile/css_transitions_triggered_new_element" - }, - { - "duration": "38.253141", - "name": "rendering.mobile/css_transitions_triggered_style_element" - }, - { - "duration": "39.09597578125001", - "name": "rendering.mobile/css_transitions_triggered_updating_class" - }, - { - "duration": "36.42590843749999", - "name": "rendering.mobile/css_transitions_updating_class" - }, - { - "duration": "35.36247528125", - "name": "rendering.mobile/css_value_type_color" - }, - { - "duration": "54.24329671875", - "name": "rendering.mobile/css_value_type_filter" - }, - { - "duration": "32.3959206875", - "name": "rendering.mobile/css_value_type_length" - }, - { - "duration": "34.581876625", - "name": "rendering.mobile/css_value_type_length_complex" - }, - { - "duration": "34.56671921875", - "name": "rendering.mobile/css_value_type_length_simple" - }, - { - "duration": "34.531383031249995", - "name": "rendering.mobile/css_value_type_path" - }, - { - "duration": "32.88059140625", - "name": "rendering.mobile/css_value_type_shadow" - }, - { - "duration": "32.075394406250005", - "name": "rendering.mobile/css_value_type_transform_complex" - }, - { - "duration": "32.39152978125", - "name": "rendering.mobile/css_value_type_transform_simple" - }, - { - "duration": "46.27993419191918", - "name": "rendering.mobile/cuteoverload" - }, - { - "duration": "53.187605", - "name": "rendering.mobile/cuteoverload_mobile" - }, - { - "duration": "46.886530030303035", - "name": "rendering.mobile/cuteoverload_sync_scroll" - }, - { - "duration": "35.756458242424245", - "name": "rendering.mobile/deviantart" - }, - { - "duration": "38.60981481081081", - "name": "rendering.mobile/deviantart_mobile" - }, - { - "duration": "38.51229256756758", - "name": "rendering.mobile/deviantart_mobile_sync_scroll" - }, - { - "duration": "36.18037501010102", - "name": "rendering.mobile/deviantart_sync_scroll" - }, - { - "duration": "4.700024966666667E-4", - "name": "rendering.mobile/digg" - }, - { - "duration": "5.4065388E-4", - "name": "rendering.mobile/digg_sync_scroll" - }, - { - "duration": "7.882320044444443", - "name": "rendering.mobile/dynamic_cube_map" - }, - { - "duration": "7.781714144444444", - "name": "rendering.mobile/earth" - }, - { - "duration": "27.34517723232323", - "name": "rendering.mobile/ebay" - }, - { - "duration": "22.867309282828284", - "name": "rendering.mobile/ebay_desktop" - }, - { - "duration": "23.235712767676773", - "name": "rendering.mobile/ebay_desktop_gpu_raster" - }, - { - "duration": "31.485739000000002", - "name": "rendering.mobile/ebay_mobile" - }, - { - "duration": "29.591313837837845", - "name": "rendering.mobile/ebay_mobile_sync_scroll" - }, - { - "duration": "49.03729620833332", - "name": "rendering.mobile/ebay_scroll" - }, - { - "duration": "27.752080878787858", - "name": "rendering.mobile/ebay_sync_scroll" - }, - { - "duration": "34.74236657142857", - "name": "rendering.mobile/effect_games" - }, - { - "duration": "20.999017521572", - "name": "rendering.mobile/espn" - }, - { - "duration": "22.779988797979797", - "name": "rendering.mobile/espn_desktop" - }, - { - "duration": "21.068421545454544", - "name": "rendering.mobile/espn_desktop_gpu_raster" - }, - { - "duration": "39.57674822222222", - "name": "rendering.mobile/espn_pathological" - }, - { - "duration": "4.565715866666667E-4", - "name": "rendering.mobile/espn_sync_scroll" - }, - { - "duration": "28.44678446464648", - "name": "rendering.mobile/facebook" - }, - { - "duration": "28.53038582828282", - "name": "rendering.mobile/facebook_desktop" - }, - { - "duration": "29.640729060606052", - "name": "rendering.mobile/facebook_desktop_gpu_raster" - }, - { - "duration": "28.313337324324326", - "name": "rendering.mobile/facebook_mobile" - }, - { - "duration": "28.375590810810813", - "name": "rendering.mobile/facebook_mobile_sync_scroll" - }, - { - "duration": "26.571307919191938", - "name": "rendering.mobile/facebook_sync_scroll" - }, - { - "duration": "27.684024571428576", - "name": "rendering.mobile/fill_shapes" - }, - { - "duration": "32.49371343243243", - "name": "rendering.mobile/filter_terrain_svg" - }, - { - "duration": "50.79486858333333", - "name": "rendering.mobile/flickr_scroll" - }, - { - "duration": "27.931289277777775", - "name": "rendering.mobile/font_wipe" - }, - { - "duration": "3.0501683333333335E-4", - "name": "rendering.mobile/forecast.io" - }, - { - "duration": "2.8602282E-4", - "name": "rendering.mobile/forecast.io_sync_scroll" - }, - { - "duration": "26.21336245714286", - "name": "rendering.mobile/geo_apis" - }, - { - "duration": "78.54779841666667", - "name": "rendering.mobile/gmail" - }, - { - "duration": "89.05450701010102", - "name": "rendering.mobile/gmail_desktop" - }, - { - "duration": "72.63809818181815", - "name": "rendering.mobile/gmail_desktop_gpu_raster" - }, - { - "duration": "46.71759494594596", - "name": "rendering.mobile/google_calendar" - }, - { - "duration": "43.41749959595962", - "name": "rendering.mobile/google_calendar_desktop" - }, - { - "duration": "43.77559930303032", - "name": "rendering.mobile/google_calendar_desktop_gpu_raster" - }, - { - "duration": "68.40075640540542", - "name": "rendering.mobile/google_docs" - }, - { - "duration": "65.18858199999998", - "name": "rendering.mobile/google_docs_desktop" - }, - { - "duration": "65.86450270707073", - "name": "rendering.mobile/google_docs_desktop_gpu_raster" - }, - { - "duration": "54.05500567567568", - "name": "rendering.mobile/google_image_search" - }, - { - "duration": "48.91295613131312", - "name": "rendering.mobile/google_image_search_desktop" - }, - { - "duration": "49.90162940404041", - "name": "rendering.mobile/google_image_search_desktop_gpu_raster" - }, - { - "duration": "32.93361308080807", - "name": "rendering.mobile/google_news" - }, - { - "duration": "31.34656516666667", - "name": "rendering.mobile/google_news_ios" - }, - { - "duration": "35.005452405405414", - "name": "rendering.mobile/google_news_mobile" - }, - { - "duration": "34.6767187027027", - "name": "rendering.mobile/google_news_mobile_sync_scroll" - }, - { - "duration": "33.00895723232325", - "name": "rendering.mobile/google_news_sync_scroll" - }, - { - "duration": "40.29566136363636", - "name": "rendering.mobile/google_plus" - }, - { - "duration": "56.670607111111096", - "name": "rendering.mobile/google_plus_desktop" - }, - { - "duration": "58.809142787878805", - "name": "rendering.mobile/google_plus_desktop_gpu_raster" - }, - { - "duration": "31.284590702702705", - "name": "rendering.mobile/google_plus_mobile" - }, - { - "duration": "29.679848756756755", - "name": "rendering.mobile/google_plus_mobile_sync_scroll" - }, - { - "duration": "27.88362377777778", - "name": "rendering.mobile/google_plus_sync_scroll" - }, - { - "duration": "24.51298148484848", - "name": "rendering.mobile/google_web_search" - }, - { - "duration": "24.45211887878787", - "name": "rendering.mobile/google_web_search_desktop" - }, - { - "duration": "24.18363208080808", - "name": "rendering.mobile/google_web_search_desktop_gpu_raster" - }, - { - "duration": "26.789909540540535", - "name": "rendering.mobile/google_web_search_mobile" - }, - { - "duration": "24.54920497297297", - "name": "rendering.mobile/google_web_search_mobile_sync_scroll" - }, - { - "duration": "22.986898303030305", - "name": "rendering.mobile/google_web_search_sync_scroll" - }, - { - "duration": "24.99796433333333", - "name": "rendering.mobile/gsp.ro" - }, - { - "duration": "29.11688643243243", - "name": "rendering.mobile/gsp.ro_mobile" - }, - { - "duration": "26.937432594594593", - "name": "rendering.mobile/gsp.ro_mobile_sync_scroll" - }, - { - "duration": "25.355329353535357", - "name": "rendering.mobile/gsp.ro_sync_scroll" - }, - { - "duration": "32.06949577777779", - "name": "rendering.mobile/guardian_pathological" - }, - { - "duration": "36.48172244444444", - "name": "rendering.mobile/guimark_vector_chart" - }, - { - "duration": "28.506140666666663", - "name": "rendering.mobile/gws_boogie_expansion" - }, - { - "duration": "28.93029377777778", - "name": "rendering.mobile/gws_google_expansion" - }, - { - "duration": "33.372783714285724", - "name": "rendering.mobile/hakim" - }, - { - "duration": "31.4403655", - "name": "rendering.mobile/horizontal_vertical_expansion" - }, - { - "duration": "49.42328474999999", - "name": "rendering.mobile/idle_power_animated_gif" - }, - { - "duration": "40.98025799999999", - "name": "rendering.mobile/idle_power_blank" - }, - { - "duration": "49.621745000000004", - "name": "rendering.mobile/idle_power_css_animation" - }, - { - "duration": "50.12000928571428", - "name": "rendering.mobile/idle_power_request_animation_frame" - }, - { - "duration": "119.95181342857144", - "name": "rendering.mobile/idle_power_set_timeout_long" - }, - { - "duration": "50.017973142857144", - "name": "rendering.mobile/idle_power_set_timetout" - }, - { - "duration": "45.866291135135135", - "name": "rendering.mobile/ie_chalkboard" - }, - { - "duration": "44.36908693548387", - "name": "rendering.mobile/ie_pirate_mark" - }, - { - "duration": "36.50973033333334", - "name": "rendering.mobile/infinite_scrolling" - }, - { - "duration": "34.322999685714294", - "name": "rendering.mobile/jarro_doverson" - }, - { - "duration": "41.222864923076926", - "name": "rendering.mobile/js_full_screen_invalidation" - }, - { - "duration": "44.99794730769231", - "name": "rendering.mobile/js_poster_circle" - }, - { - "duration": "38.50755376923077", - "name": "rendering.mobile/js_scroll_200_layer_grid" - }, - { - "duration": "38.533712692307695", - "name": "rendering.mobile/js_scroll_text_only" - }, - { - "duration": "30.533221514285717", - "name": "rendering.mobile/kevs_3d" - }, - { - "duration": "34.84360609375", - "name": "rendering.mobile/keyframed_animations" - }, - { - "duration": "34.38325133333333", - "name": "rendering.mobile/large_texture_uploads" - }, - { - "duration": "42.863621555555554", - "name": "rendering.mobile/latimes_pathological" - }, - { - "duration": "29.390332313131314", - "name": "rendering.mobile/linkedin" - }, - { - "duration": "26.1224958989899", - "name": "rendering.mobile/linkedin_desktop" - }, - { - "duration": "25.82760635353535", - "name": "rendering.mobile/linkedin_desktop_gpu_raster" - }, - { - "duration": "32.924824594594604", - "name": "rendering.mobile/linkedin_mobile" - }, - { - "duration": "32.86017456756756", - "name": "rendering.mobile/linkedin_mobile_sync_scroll" - }, - { - "duration": "37.42680688888888", - "name": "rendering.mobile/linkedin_pathological" - }, - { - "duration": "30.61263517171717", - "name": "rendering.mobile/linkedin_sync_scroll" - }, - { - "duration": "27.310765555555555", - "name": "rendering.mobile/list_animation_simple" - }, - { - "duration": "37.8000232777778", - "name": "rendering.mobile/list_recycle_transform" - }, - { - "duration": "30.461491742857145", - "name": "rendering.mobile/man_in_blue" - }, - { - "duration": "43.686506542857124", - "name": "rendering.mobile/many_images" - }, - { - "duration": "7.9188583277777775", - "name": "rendering.mobile/many_planets_deep" - }, - { - "duration": "6.81544076111111", - "name": "rendering.mobile/maps_perf_test" - }, - { - "duration": "30.44675672222222", - "name": "rendering.mobile/mask_transition_animation" - }, - { - "duration": "38.83947266666667", - "name": "rendering.mobile/masonry" - }, - { - "duration": "36.37639361111111", - "name": "rendering.mobile/medium_texture_uploads" - }, - { - "duration": "30.24419322857143", - "name": "rendering.mobile/megi_dish" - }, - { - "duration": "32.94488782857142", - "name": "rendering.mobile/microsoft_asteroid_belt" - }, - { - "duration": "32.994521057142855", - "name": "rendering.mobile/microsoft_fish_ie_tank" - }, - { - "duration": "30.520276428571425", - "name": "rendering.mobile/microsoft_snow" - }, - { - "duration": "27.48887985714285", - "name": "rendering.mobile/microsoft_speed_reading" - }, - { - "duration": "34.1955662", - "name": "rendering.mobile/microsoft_tweet_map" - }, - { - "duration": "50.260263200000004", - "name": "rendering.mobile/microsoft_video_city" - }, - { - "duration": "30.683122485714296", - "name": "rendering.mobile/microsoft_worker_fountains" - }, - { - "duration": "30.538962942857143", - "name": "rendering.mobile/mix_10k" - }, - { - "duration": "33.70752434375", - "name": "rendering.mobile/mix_blend_mode_animation_difference" - }, - { - "duration": "33.33487868750001", - "name": "rendering.mobile/mix_blend_mode_animation_hue" - }, - { - "duration": "36.206019624999996", - "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "32.7595441875", - "name": "rendering.mobile/mix_blend_mode_animation_screen" - }, - { - "duration": "21.358749858585853", - "name": "rendering.mobile/mlb" - }, - { - "duration": "23.04875189189189", - "name": "rendering.mobile/mlb_mobile" - }, - { - "duration": "22.780446432432438", - "name": "rendering.mobile/mlb_mobile_sync_scroll" - }, - { - "duration": "21.72573238383838", - "name": "rendering.mobile/mlb_sync_scroll" - }, - { - "duration": "26.597183888888893", - "name": "rendering.mobile/mobile_news_sandbox" - }, - { - "duration": "33.19333455555555", - "name": "rendering.mobile/motion_mark_canvas_fill_shapes" - }, - { - "duration": "34.70225730555556", - "name": "rendering.mobile/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "33.846292000000005", - "name": "rendering.mobile/motion_mark_focus" - }, - { - "duration": "38.15792038461539", - "name": "rendering.mobile/new_tilings" - }, - { - "duration": "31.33066353846154", - "name": "rendering.mobile/no_op_raf" - }, - { - "duration": "28.464045615384617", - "name": "rendering.mobile/no_op_scroll" - }, - { - "duration": "26.229834538461542", - "name": "rendering.mobile/no_op_settimeout" - }, - { - "duration": "30.879116307692307", - "name": "rendering.mobile/no_op_touch_handler" - }, - { - "duration": "7.875687661111112", - "name": "rendering.mobile/nvidia_vertex_buffer_object" - }, - { - "duration": "43.774574083333334", - "name": "rendering.mobile/nyc_gov_scroll" - }, - { - "duration": "28.86468767676767", - "name": "rendering.mobile/nytimes" - }, - { - "duration": "32.76511418918919", - "name": "rendering.mobile/nytimes_mobile" - }, - { - "duration": "39.432520833333335", - "name": "rendering.mobile/nytimes_scroll" - }, - { - "duration": "29.183294626262615", - "name": "rendering.mobile/nytimes_sync_scroll" - }, - { - "duration": "32.504210031250004", - "name": "rendering.mobile/overlay_background_color_css_transitions_page" - }, - { - "duration": "34.04863288888889", - "name": "rendering.mobile/parallax_effect" - }, - { - "duration": "7.813179183333332", - "name": "rendering.mobile/particles" - }, - { - "duration": "45.96363108333333", - "name": "rendering.mobile/pbs_pathological" - }, - { - "duration": "25.04024716666667", - "name": "rendering.mobile/physical_simulation" - }, - { - "duration": "36.569341757575735", - "name": "rendering.mobile/pinterest" - }, - { - "duration": "33.83937996969696", - "name": "rendering.mobile/pinterest_desktop" - }, - { - "duration": "4.684130433333334E-4", - "name": "rendering.mobile/pinterest_desktop_gpu_raster" - }, - { - "duration": "36.12505300000001", - "name": "rendering.mobile/pinterest_mobile" - }, - { - "duration": "37.077444774193545", - "name": "rendering.mobile/pinterest_mobile_sync_scroll" - }, - { - "duration": "37.4551306969697", - "name": "rendering.mobile/pinterest_sync_scroll" - }, - { - "duration": "36.53341268965517", - "name": "rendering.mobile/put_get_image_data" - }, - { - "duration": "38.50905749999999", - "name": "rendering.mobile/raf" - }, - { - "duration": "38.67078766666667", - "name": "rendering.mobile/raf_animation" - }, - { - "duration": "37.2684805", - "name": "rendering.mobile/raf_canvas" - }, - { - "duration": "38.098928750000006", - "name": "rendering.mobile/raf_touch_animation" - }, - { - "duration": "46.909655750000006", - "name": "rendering.mobile/recode_pathological" - }, - { - "duration": "34.3923935959596", - "name": "rendering.mobile/reddit" - }, - { - "duration": "36.2144181935484", - "name": "rendering.mobile/reddit_mobile" - }, - { - "duration": "34.69525439393939", - "name": "rendering.mobile/reddit_sync_scroll" - }, - { - "duration": "29.735817586206895", - "name": "rendering.mobile/runway" - }, - { - "duration": "7.787277725000002", - "name": "rendering.mobile/san_angeles" - }, - { - "duration": "25.775926818181816", - "name": "rendering.mobile/second_batch_js_heavy" - }, - { - "duration": "22.76499309090909", - "name": "rendering.mobile/second_batch_js_light" - }, - { - "duration": "23.42182654545455", - "name": "rendering.mobile/second_batch_js_medium" - }, - { - "duration": "29.718893808080804", - "name": "rendering.mobile/sfgate" - }, - { - "duration": "31.647625580645165", - "name": "rendering.mobile/sfgate_mobile" - }, - { - "duration": "29.759017548387096", - "name": "rendering.mobile/sfgate_mobile_sync_scroll" - }, - { - "duration": "30.50298864646465", - "name": "rendering.mobile/sfgate_sync_scroll" - }, - { - "duration": "45.62634536363637", - "name": "rendering.mobile/silk_finance" - }, - { - "duration": "32.46547154545455", - "name": "rendering.mobile/simple_text_page" - }, - { - "duration": "25.242651545454546", - "name": "rendering.mobile/simple_touch_drag" - }, - { - "duration": "35.90821318181819", - "name": "rendering.mobile/slashdot" - }, - { - "duration": "39.57330063333334", - "name": "rendering.mobile/slashdot_mobile" - }, - { - "duration": "36.595483676767685", - "name": "rendering.mobile/slashdot_sync_scroll" - }, - { - "duration": "26.930350833333335", - "name": "rendering.mobile/slide_drawer" - }, - { - "duration": "41.22190490909091", - "name": "rendering.mobile/small_texture_uploads" - }, - { - "duration": "32.60261253571428", - "name": "rendering.mobile/smash_cat" - }, - { - "duration": "26.818944821428577", - "name": "rendering.mobile/spielzeugz" - }, - { - "duration": "26.866785833333335", - "name": "rendering.mobile/sticky_using_webkit" - }, - { - "duration": "49.57458855555555", - "name": "rendering.mobile/stress_hidey_bars" - }, - { - "duration": "30.882680321428577", - "name": "rendering.mobile/stroke_shapes" - }, - { - "duration": "39.312634916666674", - "name": "rendering.mobile/svg_icon_raster" - }, - { - "duration": "23.176137666666666", - "name": "rendering.mobile/swipe_action" - }, - { - "duration": "32.950011999999994", - "name": "rendering.mobile/swipe_to_dismiss" - }, - { - "duration": "31.503866090909092", - "name": "rendering.mobile/sync_scroll_offset" - }, - { - "duration": "33.509823313131314", - "name": "rendering.mobile/techcrunch" - }, - { - "duration": "50.292553303030274", - "name": "rendering.mobile/techcrunch_desktop" - }, - { - "duration": "49.67322014141415", - "name": "rendering.mobile/techcrunch_desktop_gpu_raster" - }, - { - "duration": "28.91998453333333", - "name": "rendering.mobile/techcrunch_mobile" - }, - { - "duration": "27.62510973333333", - "name": "rendering.mobile/techcrunch_mobile_sync_scroll" - }, - { - "duration": "26.284325979797973", - "name": "rendering.mobile/techcrunch_sync_scroll" - }, - { - "duration": "33.28635116666667", - "name": "rendering.mobile/text_05000_pixels_per_second" - }, - { - "duration": "33.24592141666667", - "name": "rendering.mobile/text_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "33.23506375", - "name": "rendering.mobile/text_10000_pixels_per_second" - }, - { - "duration": "33.65843983333334", - "name": "rendering.mobile/text_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "33.71515991666666", - "name": "rendering.mobile/text_15000_pixels_per_second" - }, - { - "duration": "33.308868249999996", - "name": "rendering.mobile/text_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "33.58453108333333", - "name": "rendering.mobile/text_20000_pixels_per_second" - }, - { - "duration": "33.62460083333333", - "name": "rendering.mobile/text_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "32.714577166666665", - "name": "rendering.mobile/text_30000_pixels_per_second" - }, - { - "duration": "33.95342899999999", - "name": "rendering.mobile/text_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "32.307273083333335", - "name": "rendering.mobile/text_40000_pixels_per_second" - }, - { - "duration": "33.97050300000001", - "name": "rendering.mobile/text_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "32.31555533333333", - "name": "rendering.mobile/text_50000_pixels_per_second" - }, - { - "duration": "33.9795155", - "name": "rendering.mobile/text_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "30.87122258333333", - "name": "rendering.mobile/text_60000_pixels_per_second" - }, - { - "duration": "32.761403916666666", - "name": "rendering.mobile/text_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "29.243908833333336", - "name": "rendering.mobile/text_75000_pixels_per_second" - }, - { - "duration": "30.499830749999997", - "name": "rendering.mobile/text_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.718970333333335", - "name": "rendering.mobile/text_90000_pixels_per_second" - }, - { - "duration": "28.457602250000004", - "name": "rendering.mobile/text_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "36.65942066666667", - "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "36.075867666666674", - "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "36.68798900000001", - "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "36.121883583333336", - "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "36.47503849999999", - "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "36.095752", - "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "36.44350408333333", - "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "35.94542333333334", - "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "35.81002766666666", - "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "35.67144091666666", - "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "36.041362", - "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "35.22242858333333", - "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "35.95787116666667", - "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "35.536637916666656", - "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "35.663002750000004", - "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "35.38024191666667", - "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "33.303427666666664", - "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "32.709211833333335", - "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "31.754921166666673", - "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "31.33767908333333", - "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.596240750000003", - "name": "rendering.mobile/text_hover_05000_pixels_per_second" - }, - { - "duration": "27.39456008333333", - "name": "rendering.mobile/text_hover_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.663599333333337", - "name": "rendering.mobile/text_hover_10000_pixels_per_second" - }, - { - "duration": "27.392570500000005", - "name": "rendering.mobile/text_hover_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.6263265", - "name": "rendering.mobile/text_hover_15000_pixels_per_second" - }, - { - "duration": "27.614711833333335", - "name": "rendering.mobile/text_hover_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.464461666666665", - "name": "rendering.mobile/text_hover_20000_pixels_per_second" - }, - { - "duration": "27.604368499999996", - "name": "rendering.mobile/text_hover_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.33223575", - "name": "rendering.mobile/text_hover_30000_pixels_per_second" - }, - { - "duration": "27.437518166666667", - "name": "rendering.mobile/text_hover_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.7177155", - "name": "rendering.mobile/text_hover_40000_pixels_per_second" - }, - { - "duration": "27.578977750000007", - "name": "rendering.mobile/text_hover_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.215596500000004", - "name": "rendering.mobile/text_hover_50000_pixels_per_second" - }, - { - "duration": "27.799287000000003", - "name": "rendering.mobile/text_hover_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "26.80280466666667", - "name": "rendering.mobile/text_hover_60000_pixels_per_second" - }, - { - "duration": "26.47293883333333", - "name": "rendering.mobile/text_hover_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "25.155040666666668", - "name": "rendering.mobile/text_hover_75000_pixels_per_second" - }, - { - "duration": "25.299698000000003", - "name": "rendering.mobile/text_hover_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "24.391812916666666", - "name": "rendering.mobile/text_hover_90000_pixels_per_second" - }, - { - "duration": "24.28089466666667", - "name": "rendering.mobile/text_hover_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.139227191919183", - "name": "rendering.mobile/theverge" - }, - { - "duration": "43.21710407070708", - "name": "rendering.mobile/theverge_article" - }, - { - "duration": "47.70657356666667", - "name": "rendering.mobile/theverge_article_mobile" - }, - { - "duration": "45.53697906666667", - "name": "rendering.mobile/theverge_article_mobile_sync_scroll" - }, - { - "duration": "43.606548282828285", - "name": "rendering.mobile/theverge_article_sync_scroll" - }, - { - "duration": "28.63334783333334", - "name": "rendering.mobile/theverge_mobile" - }, - { - "duration": "28.7403767", - "name": "rendering.mobile/theverge_mobile_sync_scroll" - }, - { - "duration": "27.246897626262637", - "name": "rendering.mobile/theverge_sync_scroll" - }, - { - "duration": "33.13184422222222", - "name": "rendering.mobile/toggle_drawer" - }, - { - "duration": "32.523740636363634", - "name": "rendering.mobile/touch_handler_scrolling" - }, - { - "duration": "35.78960972", - "name": "rendering.mobile/transform_transitions" - }, - { - "duration": "32.844299480000004", - "name": "rendering.mobile/transform_transitions_js_block" - }, - { - "duration": "29.845363548706068", - "name": "rendering.mobile/twitter" - }, - { - "duration": "31.29805238383835", - "name": "rendering.mobile/twitter_desktop" - }, - { - "duration": "31.078204282828278", - "name": "rendering.mobile/twitter_desktop_gpu_raster" - }, - { - "duration": "5.059242166666667E-4", - "name": "rendering.mobile/twitter_sync_scroll" - }, - { - "duration": "33.84536236363636", - "name": "rendering.mobile/update_history_state" - }, - { - "duration": "47.00696899999999", - "name": "rendering.mobile/usatoday" - }, - { - "duration": "49.30340286666668", - "name": "rendering.mobile/usatoday_mobile" - }, - { - "duration": "52.472119233333345", - "name": "rendering.mobile/usatoday_mobile_sync_scroll" - }, - { - "duration": "50.88761351515151", - "name": "rendering.mobile/usatoday_sync_scroll" - }, - { - "duration": "33.80640922222223", - "name": "rendering.mobile/vertical_expansion" - }, - { - "duration": "45.39143570000001", - "name": "rendering.mobile/weather.com" - }, - { - "duration": "39.09800921212121", - "name": "rendering.mobile/weather.com_desktop" - }, - { - "duration": "39.95905835353533", - "name": "rendering.mobile/weather.com_desktop_gpu_raster" - }, - { - "duration": "35.352943880000005", - "name": "rendering.mobile/web_animation_value_type_color" - }, - { - "duration": "32.30285848", - "name": "rendering.mobile/web_animation_value_type_length_3d" - }, - { - "duration": "34.39382648", - "name": "rendering.mobile/web_animation_value_type_length_complex" - }, - { - "duration": "34.544754680000004", - "name": "rendering.mobile/web_animation_value_type_length_simple" - }, - { - "duration": "34.00419764000001", - "name": "rendering.mobile/web_animation_value_type_path" - }, - { - "duration": "32.536015240000005", - "name": "rendering.mobile/web_animation_value_type_shadow" - }, - { - "duration": "32.11594348", - "name": "rendering.mobile/web_animation_value_type_transform_complex" - }, - { - "duration": "32.56784408", - "name": "rendering.mobile/web_animation_value_type_transform_simple" - }, - { - "duration": "32.6319746", - "name": "rendering.mobile/web_animations_set_current_time" - }, - { - "duration": "35.11787304", - "name": "rendering.mobile/web_animations_simultaneous" - }, - { - "duration": "37.42823036000001", - "name": "rendering.mobile/web_animations_staggered_chaining" - }, - { - "duration": "34.14275544", - "name": "rendering.mobile/web_animations_staggered_infinite_iterations" - }, - { - "duration": "38.34377239999999", - "name": "rendering.mobile/web_animations_staggered_triggering_page" - }, - { - "duration": "35.67560036363636", - "name": "rendering.mobile/wikipedia" - }, - { - "duration": "32.60568937373736", - "name": "rendering.mobile/wikipedia_delayed_scroll_start" - }, - { - "duration": "32.86753380808079", - "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll" - }, - { - "duration": "42.10797105050505", - "name": "rendering.mobile/wikipedia_desktop" - }, - { - "duration": "42.580562151515146", - "name": "rendering.mobile/wikipedia_desktop_gpu_raster" - }, - { - "duration": "33.297657466666664", - "name": "rendering.mobile/wikipedia_mobile" - }, - { - "duration": "33.526991133333325", - "name": "rendering.mobile/wikipedia_mobile_sync_scroll" - }, - { - "duration": "32.078904878787895", - "name": "rendering.mobile/wikipedia_sync_scroll" - }, - { - "duration": "38.33933103030304", - "name": "rendering.mobile/wordpress" - }, - { - "duration": "38.23012577777778", - "name": "rendering.mobile/wordpress_desktop" - }, - { - "duration": "38.77219565656566", - "name": "rendering.mobile/wordpress_desktop_gpu_raster" - }, - { - "duration": "40.36543213333333", - "name": "rendering.mobile/wordpress_mobile" - }, - { - "duration": "38.61311013333333", - "name": "rendering.mobile/wordpress_mobile_sync_scroll" - }, - { - "duration": "36.91970569696969", - "name": "rendering.mobile/wordpress_sync_scroll" - }, - { - "duration": "74.64666655555557", - "name": "rendering.mobile/worldjournal" - }, - { - "duration": "79.36514751851853", - "name": "rendering.mobile/worldjournal_mobile" - }, - { - "duration": "77.35482244444445", - "name": "rendering.mobile/worldjournal_mobile_sync_scroll" - }, - { - "duration": "73.98109298989897", - "name": "rendering.mobile/worldjournal_sync_scroll" - }, - { - "duration": "48.15227918181818", - "name": "rendering.mobile/wow_wiki_pathological" - }, - { - "duration": "56.979442505050514", - "name": "rendering.mobile/wowwiki" - }, - { - "duration": "59.124259466666665", - "name": "rendering.mobile/wowwiki_mobile" - }, - { - "duration": "58.001735566666675", - "name": "rendering.mobile/wowwiki_mobile_sync_scroll" - }, - { - "duration": "56.487392737373746", - "name": "rendering.mobile/wowwiki_sync_scroll" - }, - { - "duration": "26.536885080808084", - "name": "rendering.mobile/wsj" - }, - { - "duration": "29.543995899999995", - "name": "rendering.mobile/wsj_mobile" - }, - { - "duration": "27.26475646666667", - "name": "rendering.mobile/wsj_mobile_sync_scroll" - }, - { - "duration": "26.661519222222225", - "name": "rendering.mobile/wsj_sync_scroll" - }, - { - "duration": "32.16896739393939", - "name": "rendering.mobile/yahoo_answers" - }, - { - "duration": "30.52977131313131", - "name": "rendering.mobile/yahoo_answers_desktop" - }, - { - "duration": "31.109628252525244", - "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster" - }, - { - "duration": "32.424225033333336", - "name": "rendering.mobile/yahoo_answers_mobile" - }, - { - "duration": "33.10580843333334", - "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll" - }, - { - "duration": "31.22894634343434", - "name": "rendering.mobile/yahoo_answers_sync_scroll" - }, - { - "duration": "49.676530633333336", - "name": "rendering.mobile/yahoo_games" - }, - { - "duration": "47.60486273737375", - "name": "rendering.mobile/yahoo_games_desktop" - }, - { - "duration": "47.72283676767677", - "name": "rendering.mobile/yahoo_games_desktop_gpu_raster" - }, - { - "duration": "31.199312272727262", - "name": "rendering.mobile/yahoo_news" - }, - { - "duration": "34.97376979797981", - "name": "rendering.mobile/yahoo_news_desktop" - }, - { - "duration": "35.84221124242424", - "name": "rendering.mobile/yahoo_news_desktop_gpu_raster" - }, - { - "duration": "31.731216300000007", - "name": "rendering.mobile/yahoo_news_mobile" - }, - { - "duration": "30.03508683333333", - "name": "rendering.mobile/yahoo_news_mobile_sync_scroll" - }, - { - "duration": "28.16396992929292", - "name": "rendering.mobile/yahoo_news_sync_scroll" - }, - { - "duration": "35.0764927", - "name": "rendering.mobile/yahoo_sports" - }, - { - "duration": "32.611100202020204", - "name": "rendering.mobile/yahoo_sports_desktop" - }, - { - "duration": "33.844070393939404", - "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster" - }, - { - "duration": "42.40594936363637", - "name": "rendering.mobile/yahoo_sports_pathological" - }, - { - "duration": "31.89040891919191", - "name": "rendering.mobile/youtube" - }, - { - "duration": "47.828775868686876", - "name": "rendering.mobile/youtube_desktop" - }, - { - "duration": "49.124170888888884", - "name": "rendering.mobile/youtube_desktop_gpu_raster" - }, - { - "duration": "24.972468499999994", - "name": "rendering.mobile/youtube_mobile" - }, - { - "duration": "22.659193833333337", - "name": "rendering.mobile/youtube_mobile_sync_scroll" - }, - { - "duration": "23.514629414141417", - "name": "rendering.mobile/youtube_sync_scroll" - }, - { - "duration": "62.272023", - "name": "rendering.mobile/yuv_decoding" - }, - { - "duration": "63.67977336363636", - "name": "rendering.mobile/yuv_decoding_gpu_rasterization_and_decoding" - }, - { - "duration": "40.498921363636356", - "name": "rendering.mobile/zdnet_pathological" - }, - { - "duration": "31.203441500000004", - "name": "rendering.mobile/zoom_in_animation" - }, - { - "duration": "24.053189222222226", - "name": "scheduler.tough_scheduling_cases/raf" - }, - { - "duration": "24.58054449494949", - "name": "scheduler.tough_scheduling_cases/raf.html" - }, - { - "duration": "24.044186777777774", - "name": "scheduler.tough_scheduling_cases/raf_animation" - }, - { - "duration": "24.471227101010093", - "name": "scheduler.tough_scheduling_cases/raf_animation.html" - }, - { - "duration": "23.486193444444442", - "name": "scheduler.tough_scheduling_cases/raf_canvas" - }, - { - "duration": "23.929469979797975", - "name": "scheduler.tough_scheduling_cases/raf_canvas.html" - }, - { - "duration": "23.554633250000002", - "name": "scheduler.tough_scheduling_cases/raf_touch_animation" - }, - { - "duration": "24.31968610101009", - "name": "scheduler.tough_scheduling_cases/raf_touch_animation.html" - }, - { - "duration": "17.567614737373738", - "name": "scheduler.tough_scheduling_cases/second_batch_js.html?heavy" - }, - { - "duration": "15.933300161616154", - "name": "scheduler.tough_scheduling_cases/second_batch_js.html?light" - }, - { - "duration": "16.273091873737375", - "name": "scheduler.tough_scheduling_cases/second_batch_js.html?medium" - }, - { - "duration": "17.58495697222222", - "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy" - }, - { - "duration": "16.057615138888885", - "name": "scheduler.tough_scheduling_cases/second_batch_js_light" - }, - { - "duration": "16.546214680555554", - "name": "scheduler.tough_scheduling_cases/second_batch_js_medium" - }, - { - "duration": "34.21874991666666", - "name": "scheduler.tough_scheduling_cases/simple_text_page" - }, - { - "duration": "40.989694050505044", - "name": "scheduler.tough_scheduling_cases/simple_text_page.html" - }, - { - "duration": "17.09494802777778", - "name": "scheduler.tough_scheduling_cases/simple_touch_drag" - }, - { - "duration": "17.1179281111111", - "name": "scheduler.tough_scheduling_cases/simple_touch_drag.html" - }, - { - "duration": "20.764502999999994", - "name": "scheduler.tough_scheduling_cases/sync_scroll_offset" - }, - { - "duration": "20.64756057575758", - "name": "scheduler.tough_scheduling_cases/sync_scroll_offset.html" - }, - { - "duration": "23.065795361111114", - "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling" - }, - { - "duration": "23.356961343434342", - "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling.html" - }, - { - "duration": "2.63786316E-4", - "name": "smoothness.gpu_rasterization.top_25_smooth/amazon" - }, - { - "duration": "33.80300638383836", - "name": "smoothness.gpu_rasterization.top_25_smooth/blogspot" - }, - { - "duration": "25.423665797979808", - "name": "smoothness.gpu_rasterization.top_25_smooth/booking.com" - }, - { - "duration": "4.48703769E-4", - "name": "smoothness.gpu_rasterization.top_25_smooth/cnn" - }, - { - "duration": "18.872902828282832", - "name": "smoothness.gpu_rasterization.top_25_smooth/ebay" - }, - { - "duration": "24.43893978787879", - "name": "smoothness.gpu_rasterization.top_25_smooth/espn" - }, - { - "duration": "24.309108555555557", - "name": "smoothness.gpu_rasterization.top_25_smooth/facebook" - }, - { - "duration": "67.25047055555555", - "name": "smoothness.gpu_rasterization.top_25_smooth/gmail" - }, - { - "duration": "36.09170495959597", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_calendar" - }, - { - "duration": "50.770853787878785", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_docs" - }, - { - "duration": "39.792553565656554", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_image_search" - }, - { - "duration": "46.37658148484849", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_plus" - }, - { - "duration": "19.910990656565655", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_web_search" - }, - { - "duration": "22.536726232323225", - "name": "smoothness.gpu_rasterization.top_25_smooth/linkedin" - }, - { - "duration": "4.2290687300000006E-4", - "name": "smoothness.gpu_rasterization.top_25_smooth/pinterest" - }, - { - "duration": "33.30375853535352", - "name": "smoothness.gpu_rasterization.top_25_smooth/techcrunch" - }, - { - "duration": "26.528168030303032", - "name": "smoothness.gpu_rasterization.top_25_smooth/twitter" - }, - { - "duration": "29.678327292929293", - "name": "smoothness.gpu_rasterization.top_25_smooth/weather.com" - }, - { - "duration": "35.29338848484849", - "name": "smoothness.gpu_rasterization.top_25_smooth/wikipedia" - }, - { - "duration": "30.487788070707058", - "name": "smoothness.gpu_rasterization.top_25_smooth/wordpress" - }, - { - "duration": "24.569967909090913", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_answers" - }, - { - "duration": "38.78400107070706", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_games" - }, - { - "duration": "28.73660282828283", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_news" - }, - { - "duration": "27.182221686868683", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_sports" - }, - { - "duration": "40.08568662626261", - "name": "smoothness.gpu_rasterization.top_25_smooth/youtube" - }, - { - "duration": "28.04500614141415", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG" - }, - { - "duration": "28.373820262626253", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG" - }, - { - "duration": "32.77393743434344", - "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark" - }, - { - "duration": "46.07326119191917", - "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus" - }, - { - "duration": "26.678037637499994", - "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "27.440452687499988", - "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "31.865303850000004", - "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "39.4857084", - "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "40.55353654545455", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test" - }, - { - "duration": "38.9083806969697", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard" - }, - { - "duration": "28.20216505050505", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes" - }, - { - "duration": "28.874584434343422", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes" - }, - { - "duration": "38.476966371428574", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "37.56535682857143", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "26.380737800000002", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "26.042319285714292", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "29.444780151515147", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Blogger" - }, - { - "duration": "37.42526526262627", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ESPN" - }, - { - "duration": "26.660416666666666", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Facebook" - }, - { - "duration": "21.762691454545454", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/LinkedIn" - }, - { - "duration": "26.73234650505051", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Twitter" - }, - { - "duration": "34.41139099999999", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Weather.com" - }, - { - "duration": "21.646575666666664", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/amazon_pinch" - }, - { - "duration": "29.812685085365857", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/blogspot_pinch" - }, - { - "duration": "26.382042565656544", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/booking_pinch" - }, - { - "duration": "33.57973538383839", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/cnn_pinch" - }, - { - "duration": "31.877053939393935", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ebay_pinch" - }, - { - "duration": "37.63646426262626", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/espn_pinch" - }, - { - "duration": "27.284374818181824", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/facebook_pinch" - }, - { - "duration": "48.42330762626264", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/gmail_pinch" - }, - { - "duration": "26.44414957575757", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_calendar_pinch" - }, - { - "duration": "26.662883414141422", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_image_pinch" - }, - { - "duration": "39.45358327272728", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_search_pinch" - }, - { - "duration": "25.302832191919197", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://booking.com" - }, - { - "duration": "32.30846929292929", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com" - }, - { - "duration": "32.39707833333334", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://news.yahoo.com" - }, - { - "duration": "39.596718101010104", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://sports.yahoo.com/" - }, - { - "duration": "22.70268291919193", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.amazon.com" - }, - { - "duration": "32.38882310101009", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.cnn.com" - }, - { - "duration": "31.055875343434323", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.ebay.com" - }, - { - "duration": "29.678338939393928", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.youtube.com" - }, - { - "duration": "46.5214357979798", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://mail.google.com/mail/" - }, - { - "duration": "39.188725919191924", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "26.154076626262615", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/calendar/" - }, - { - "duration": "26.069677424242432", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch" - }, - { - "duration": "21.91335145454546", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/linkedin_pinch" - }, - { - "duration": "27.072448222222224", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/twitter_pinch" - }, - { - "duration": "35.392396151515165", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/weather_pinch" - }, - { - "duration": "33.14390188888889", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_games_pinch" - }, - { - "duration": "33.2079732929293", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_news_pinch" - }, - { - "duration": "40.718619484848496", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_sports_pinch" - }, - { - "duration": "30.502430939393932", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/youtube_pinch" - }, - { - "duration": "24.20282247474749", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "24.074684161616158", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "24.049989434343445", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "23.964118606060598", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "24.10839572727273", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "24.144700292929286", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "24.108367444444458", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "23.035316363636355", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "21.360100656565656", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "20.327223505050508", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "35.87636223232324", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "24.314069515151516", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "23.500598757575755", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "23.08250453535355", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "23.016791575757576", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "22.88297080808082", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "22.756930898989907", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "21.884604585858582", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "20.579518989898997", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "19.34737316161615", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "24.890596424242414", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "25.082001282828276", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "24.95338900000001", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "24.907247656565655", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "25.02299748484849", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "24.904818010101", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "25.03035413131313", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "24.85935277777778", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "23.203315292929286", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "22.233629797979795", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "21.77956238383838", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "21.91810305050505", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "21.81251712121212", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "21.863682010101005", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "21.874503525252532", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "21.803491171717187", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "21.86322654545455", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "21.03221536363637", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "19.58269121212121", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "18.757427595959594", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "65.17557407462685", - "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding" - }, - { - "duration": "81.26968327272728", - "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding.html" - }, - { - "duration": "65.88610394117649", - "name": "smoothness.image_decoding_cases/yuv_decoding" - }, - { - "duration": "81.95422245454547", - "name": "smoothness.image_decoding_cases/yuv_decoding.html" - }, - { - "duration": "2.2113323199999998E-4", - "name": "smoothness.key_mobile_sites_smooth/amazon" - }, - { - "duration": "25.350318747474752", - "name": "smoothness.key_mobile_sites_smooth/androidpolice" - }, - { - "duration": "17.37672144444444", - "name": "smoothness.key_mobile_sites_smooth/baidu" - }, - { - "duration": "16.179497883838376", - "name": "smoothness.key_mobile_sites_smooth/bing" - }, - { - "duration": "18.526853101010104", - "name": "smoothness.key_mobile_sites_smooth/blogspot" - }, - { - "duration": "32.882800282828285", - "name": "smoothness.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "23.379700454545446", - "name": "smoothness.key_mobile_sites_smooth/booking.com" - }, - { - "duration": "37.40040888888888", - "name": "smoothness.key_mobile_sites_smooth/capitolvolkswagen" - }, - { - "duration": "19.327488434343433", - "name": "smoothness.key_mobile_sites_smooth/cnn" - }, - { - "duration": "34.58224128282829", - "name": "smoothness.key_mobile_sites_smooth/cnn_article" - }, - { - "duration": "33.7675455959596", - "name": "smoothness.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "25.878067404040408", - "name": "smoothness.key_mobile_sites_smooth/deviantart" - }, - { - "duration": "2.31146814E-4", - "name": "smoothness.key_mobile_sites_smooth/digg" - }, - { - "duration": "20.810490585858584", - "name": "smoothness.key_mobile_sites_smooth/ebay" - }, - { - "duration": "2.67910958E-4", - "name": "smoothness.key_mobile_sites_smooth/espn" - }, - { - "duration": "21.125003333333336", - "name": "smoothness.key_mobile_sites_smooth/facebook" - }, - { - "duration": "1.5575885799999997E-4", - "name": "smoothness.key_mobile_sites_smooth/forecast.io" - }, - { - "duration": "24.759135292929294", - "name": "smoothness.key_mobile_sites_smooth/google_news" - }, - { - "duration": "20.813705878787893", - "name": "smoothness.key_mobile_sites_smooth/google_plus" - }, - { - "duration": "17.656018777777778", - "name": "smoothness.key_mobile_sites_smooth/google_web_search" - }, - { - "duration": "19.115871373737374", - "name": "smoothness.key_mobile_sites_smooth/gsp.ro" - }, - { - "duration": "23.511869555555563", - "name": "smoothness.key_mobile_sites_smooth/linkedin" - }, - { - "duration": "16.619878656565657", - "name": "smoothness.key_mobile_sites_smooth/mlb" - }, - { - "duration": "22.76545967676768", - "name": "smoothness.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "25.436306333333327", - "name": "smoothness.key_mobile_sites_smooth/pinterest" - }, - { - "duration": "26.495792494949477", - "name": "smoothness.key_mobile_sites_smooth/reddit" - }, - { - "duration": "22.050099656565664", - "name": "smoothness.key_mobile_sites_smooth/sfgate" - }, - { - "duration": "27.34706691919192", - "name": "smoothness.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "19.079180939393932", - "name": "smoothness.key_mobile_sites_smooth/techcrunch" - }, - { - "duration": "20.530508848484857", - "name": "smoothness.key_mobile_sites_smooth/theverge" - }, - { - "duration": "34.88967134343432", - "name": "smoothness.key_mobile_sites_smooth/theverge_article" - }, - { - "duration": "2.5146007500000003E-4", - "name": "smoothness.key_mobile_sites_smooth/twitter" - }, - { - "duration": "33.12766106060606", - "name": "smoothness.key_mobile_sites_smooth/usatoday" - }, - { - "duration": "24.658401010101006", - "name": "smoothness.key_mobile_sites_smooth/wikipedia" - }, - { - "duration": "24.759809292929305", - "name": "smoothness.key_mobile_sites_smooth/wikipedia_delayed_scroll_start" - }, - { - "duration": "26.102780191919187", - "name": "smoothness.key_mobile_sites_smooth/wordpress" - }, - { - "duration": "45.747915040404045", - "name": "smoothness.key_mobile_sites_smooth/worldjournal" - }, - { - "duration": "38.3109349090909", - "name": "smoothness.key_mobile_sites_smooth/wowwiki" - }, - { - "duration": "20.553884939393935", - "name": "smoothness.key_mobile_sites_smooth/wsj" - }, - { - "duration": "22.914639050505055", - "name": "smoothness.key_mobile_sites_smooth/yahoo_answers" - }, - { - "duration": "20.57174221212122", - "name": "smoothness.key_mobile_sites_smooth/yahoo_news" - }, - { - "duration": "18.28048497979798", - "name": "smoothness.key_mobile_sites_smooth/youtube" - }, - { - "duration": "32.86817991549297", - "name": "smoothness.key_silk_cases/basic_stream" - }, - { - "duration": "23.917829056338025", - "name": "smoothness.key_silk_cases/card_expansion" - }, - { - "duration": "24.915508323943666", - "name": "smoothness.key_silk_cases/card_expansion_animated" - }, - { - "duration": "24.78264873239437", - "name": "smoothness.key_silk_cases/card_expansion_images_text" - }, - { - "duration": "22.766404563380274", - "name": "smoothness.key_silk_cases/card_flying" - }, - { - "duration": "24.35833745070423", - "name": "smoothness.key_silk_cases/coordinated_animation" - }, - { - "duration": "23.635138661971826", - "name": "smoothness.key_silk_cases/font_wipe" - }, - { - "duration": "23.884862888888886", - "name": "smoothness.key_silk_cases/font_wipe.html" - }, - { - "duration": "25.469248816901402", - "name": "smoothness.key_silk_cases/google_news_ios" - }, - { - "duration": "25.097229154929586", - "name": "smoothness.key_silk_cases/gws_boogie_expansion" - }, - { - "duration": "25.630131309859152", - "name": "smoothness.key_silk_cases/gws_google_expansion" - }, - { - "duration": "24.349334577464784", - "name": "smoothness.key_silk_cases/horizontal_vertical_expansion" - }, - { - "duration": "44.74819373737374", - "name": "smoothness.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html" - }, - { - "duration": "22.53722283838384", - "name": "smoothness.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html" - }, - { - "duration": "20.942114262626262", - "name": "smoothness.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet" - }, - { - "duration": "23.89759618181818", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/" - }, - { - "duration": "22.916086161616153", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/" - }, - { - "duration": "23.583914242424257", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/" - }, - { - "duration": "24.398455010101017", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/" - }, - { - "duration": "24.785331222222215", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/" - }, - { - "duration": "24.899397262626263", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/" - }, - { - "duration": "24.99145357575758", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/jx5De/14/show/" - }, - { - "duration": "24.300316999999986", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/" - }, - { - "duration": "24.444861626262625", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/" - }, - { - "duration": "25.84705335353534", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/" - }, - { - "duration": "24.108530383838385", - "name": "smoothness.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/" - }, - { - "duration": "25.503412858585857", - "name": "smoothness.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll" - }, - { - "duration": "22.324821616161618", - "name": "smoothness.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe" - }, - { - "duration": "32.989315151515136", - "name": "smoothness.key_silk_cases/http://plus.google.com/app/basic/stream" - }, - { - "duration": "4.1248798699999997E-4", - "name": "smoothness.key_silk_cases/http://s.codepen.io/befamous/fullpage/pFsqb?scroll" - }, - { - "duration": "31.519428505050502", - "name": "smoothness.key_silk_cases/http://wiltzius.github.io/shape-shifter/" - }, - { - "duration": "25.45949865656566", - "name": "smoothness.key_silk_cases/http://www.google.com/#q=google" - }, - { - "duration": "3.9782524599999997E-4", - "name": "smoothness.key_silk_cases/https://polymer-topeka.appspot.com/" - }, - { - "duration": "25.05358677777778", - "name": "smoothness.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie" - }, - { - "duration": "3.45396995E-4", - "name": "smoothness.key_silk_cases/inbox_app.html?slide_drawer" - }, - { - "duration": "36.95740016161615", - "name": "smoothness.key_silk_cases/inbox_app.html?stress_hidey_bars" - }, - { - "duration": "19.84401333333333", - "name": "smoothness.key_silk_cases/inbox_app.html?swipe_to_dismiss" - }, - { - "duration": "27.310471545454547", - "name": "smoothness.key_silk_cases/inbox_app.html?toggle_drawer" - }, - { - "duration": "28.01744130985915", - "name": "smoothness.key_silk_cases/infinite_scrolling" - }, - { - "duration": "27.902532181818174", - "name": "smoothness.key_silk_cases/infinite_scrolling.html" - }, - { - "duration": "23.043557704225357", - "name": "smoothness.key_silk_cases/list_animation_simple" - }, - { - "duration": "23.490137303030316", - "name": "smoothness.key_silk_cases/list_animation_simple.html" - }, - { - "duration": "44.635895859154914", - "name": "smoothness.key_silk_cases/list_recycle_transform" - }, - { - "duration": "23.96564752112676", - "name": "smoothness.key_silk_cases/mask_transition_animation" - }, - { - "duration": "30.194846971830987", - "name": "smoothness.key_silk_cases/masonry" - }, - { - "duration": "30.44507414141415", - "name": "smoothness.key_silk_cases/masonry.html" - }, - { - "duration": "22.368048704225338", - "name": "smoothness.key_silk_cases/mobile_news_sandbox" - }, - { - "duration": "25.370649887323946", - "name": "smoothness.key_silk_cases/parallax_effect" - }, - { - "duration": "20.768867746478875", - "name": "smoothness.key_silk_cases/physical_simulation" - }, - { - "duration": "25.79041352525253", - "name": "smoothness.key_silk_cases/pushState.html" - }, - { - "duration": "31.571342830985916", - "name": "smoothness.key_silk_cases/silk_finance" - }, - { - "duration": "31.79460555555556", - "name": "smoothness.key_silk_cases/silk_finance.html" - }, - { - "duration": "22.02238238028169", - "name": "smoothness.key_silk_cases/sticky_using_webkit" - }, - { - "duration": "36.56567185915493", - "name": "smoothness.key_silk_cases/stress_hidey_bars" - }, - { - "duration": "31.33300081690141", - "name": "smoothness.key_silk_cases/svg_icon_raster" - }, - { - "duration": "19.788641154929582", - "name": "smoothness.key_silk_cases/swipe_action" - }, - { - "duration": "24.055146915492955", - "name": "smoothness.key_silk_cases/swipe_to_dismiss" - }, - { - "duration": "27.128876760563386", - "name": "smoothness.key_silk_cases/toggle_drawer" - }, - { - "duration": "25.646606971830984", - "name": "smoothness.key_silk_cases/update_history_state" - }, - { - "duration": "24.695754788732398", - "name": "smoothness.key_silk_cases/vertical_expansion" - }, - { - "duration": "23.39727194366197", - "name": "smoothness.key_silk_cases/zoom_in_animation" - }, - { - "duration": "18.504768979797976", - "name": "smoothness.maps/maps_perf_test" - }, - { - "duration": "50.391305527777774", - "name": "smoothness.pathological_mobile_sites/cnn_pathological" - }, - { - "duration": "25.602937416666673", - "name": "smoothness.pathological_mobile_sites/espn_pathological" - }, - { - "duration": "22.882058861111105", - "name": "smoothness.pathological_mobile_sites/guardian_pathological" - }, - { - "duration": "48.03833860606059", - "name": "smoothness.pathological_mobile_sites/http://edition.cnn.com" - }, - { - "duration": "27.226097323232324", - "name": "smoothness.pathological_mobile_sites/http://m.espn.go.com/nhl/rankings" - }, - { - "duration": "33.165713525252514", - "name": "smoothness.pathological_mobile_sites/http://recode.net" - }, - { - "duration": "31.984742111111114", - "name": "smoothness.pathological_mobile_sites/http://sports.yahoo.com/" - }, - { - "duration": "30.807061515151517", - "name": "smoothness.pathological_mobile_sites/http://www.latimes.com" - }, - { - "duration": "31.642167949494958", - "name": "smoothness.pathological_mobile_sites/http://www.pbs.org/newshour/bb/much-really-cost-live-city-like-seattle/#the-rundown" - }, - { - "duration": "23.16318249494949", - "name": "smoothness.pathological_mobile_sites/http://www.theguardian.com/politics/2015/mar/09/ed-balls-tory-spending-plans-nhs-charging" - }, - { - "duration": "34.0523654040404", - "name": "smoothness.pathological_mobile_sites/http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria" - }, - { - "duration": "27.60075993939393", - "name": "smoothness.pathological_mobile_sites/http://www.zdnet.com" - }, - { - "duration": "25.821269292929287", - "name": "smoothness.pathological_mobile_sites/https://www.linkedin.com/in/linustorvalds" - }, - { - "duration": "28.85288380555555", - "name": "smoothness.pathological_mobile_sites/latimes_pathological" - }, - { - "duration": "25.334024194444453", - "name": "smoothness.pathological_mobile_sites/linkedin_pathological" - }, - { - "duration": "29.939105777777783", - "name": "smoothness.pathological_mobile_sites/pbs_pathological" - }, - { - "duration": "31.406162583333337", - "name": "smoothness.pathological_mobile_sites/recode_pathological" - }, - { - "duration": "31.4263263888889", - "name": "smoothness.pathological_mobile_sites/wow_wiki_pathological" - }, - { - "duration": "29.70441333333334", - "name": "smoothness.pathological_mobile_sites/yahoo_sports_pathological" - }, - { - "duration": "26.614090805555563", - "name": "smoothness.pathological_mobile_sites/zdnet_pathological" - }, - { - "duration": "54.0676506025641", - "name": "smoothness.simple_mobile_sites/ebay_scroll" - }, - { - "duration": "37.37320398717949", - "name": "smoothness.simple_mobile_sites/flickr_scroll" - }, - { - "duration": "33.250007737373735", - "name": "smoothness.simple_mobile_sites/http://m.nytimes.com/" - }, - { - "duration": "55.51566208080808", - "name": "smoothness.simple_mobile_sites/http://www.ebay.co.uk/" - }, - { - "duration": "36.568286686868696", - "name": "smoothness.simple_mobile_sites/http://www.nyc.gov" - }, - { - "duration": "38.74863145454546", - "name": "smoothness.simple_mobile_sites/https://www.flickr.com/" - }, - { - "duration": "35.91706291025642", - "name": "smoothness.simple_mobile_sites/nyc_gov_scroll" - }, - { - "duration": "32.78830960256409", - "name": "smoothness.simple_mobile_sites/nytimes_scroll" - }, - { - "duration": "20.02431441414142", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/amazon" - }, - { - "duration": "27.194729747474746", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/androidpolice" - }, - { - "duration": "17.916139323232322", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/baidu" - }, - { - "duration": "16.609013969696967", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/bing" - }, - { - "duration": "19.121365272727264", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/blogspot" - }, - { - "duration": "34.87631877777777", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "23.667364616161617", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/booking.com" - }, - { - "duration": "39.39716465656565", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/capitolvolkswagen" - }, - { - "duration": "19.88321476767677", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn" - }, - { - "duration": "36.41210400000001", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn_article" - }, - { - "duration": "35.11860633333333", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "26.50883206060606", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/deviantart" - }, - { - "duration": "2.371753935714286E-4", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/digg" - }, - { - "duration": "21.094613070707073", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/ebay" - }, - { - "duration": "31.591526737373737", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/espn" - }, - { - "duration": "22.03810724242424", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/facebook" - }, - { - "duration": "23.30045149494949", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/forecast.io" - }, - { - "duration": "24.675606505050503", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_news" - }, - { - "duration": "23.219749858585864", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_plus" - }, - { - "duration": "18.529846747474746", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_web_search" - }, - { - "duration": "19.8416407070707", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/gsp.ro" - }, - { - "duration": "24.20681980808082", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/linkedin" - }, - { - "duration": "17.088844414141413", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/mlb" - }, - { - "duration": "22.781490313131304", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "27.362588282828284", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/pinterest" - }, - { - "duration": "26.921663646464637", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/reddit" - }, - { - "duration": "22.7163132020202", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/sfgate" - }, - { - "duration": "28.14428008080808", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "19.763601696969705", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/techcrunch" - }, - { - "duration": "21.248669545454547", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge" - }, - { - "duration": "36.41737158585858", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge_article" - }, - { - "duration": "20.318543545454546", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/twitter" - }, - { - "duration": "35.64409949494951", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/usatoday" - }, - { - "duration": "25.323874696969696", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia" - }, - { - "duration": "25.605219515151518", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia_delayed_scroll_start" - }, - { - "duration": "26.935462525252518", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wordpress" - }, - { - "duration": "47.22534857575757", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/worldjournal" - }, - { - "duration": "39.37278781818182", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wowwiki" - }, - { - "duration": "20.95110911111111", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wsj" - }, - { - "duration": "23.778150777777782", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_answers" - }, - { - "duration": "21.15945578787878", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_news" - }, - { - "duration": "19.455767737373744", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/youtube" - }, - { - "duration": "1.354217539E-4", - "name": "smoothness.top_25_smooth/amazon" - }, - { - "duration": "30.53252716161616", - "name": "smoothness.top_25_smooth/blogspot" - }, - { - "duration": "23.124127575757576", - "name": "smoothness.top_25_smooth/booking.com" - }, - { - "duration": "2.5498866900000003E-4", - "name": "smoothness.top_25_smooth/cnn" - }, - { - "duration": "17.435840070707073", - "name": "smoothness.top_25_smooth/ebay" - }, - { - "duration": "23.638452080808083", - "name": "smoothness.top_25_smooth/espn" - }, - { - "duration": "22.165393595959596", - "name": "smoothness.top_25_smooth/facebook" - }, - { - "duration": "67.67521139393938", - "name": "smoothness.top_25_smooth/gmail" - }, - { - "duration": "33.69550159595961", - "name": "smoothness.top_25_smooth/google_calendar" - }, - { - "duration": "47.573370565656546", - "name": "smoothness.top_25_smooth/google_docs" - }, - { - "duration": "36.18511610101011", - "name": "smoothness.top_25_smooth/google_image_search" - }, - { - "duration": "42.148479171717156", - "name": "smoothness.top_25_smooth/google_plus" - }, - { - "duration": "18.65928963636364", - "name": "smoothness.top_25_smooth/google_web_search" - }, - { - "duration": "20.241625222222225", - "name": "smoothness.top_25_smooth/linkedin" - }, - { - "duration": "24.089806262626254", - "name": "smoothness.top_25_smooth/pinterest" - }, - { - "duration": "30.10980199999999", - "name": "smoothness.top_25_smooth/techcrunch" - }, - { - "duration": "24.257961424242424", - "name": "smoothness.top_25_smooth/twitter" - }, - { - "duration": "26.5012102929293", - "name": "smoothness.top_25_smooth/weather.com" - }, - { - "duration": "32.86209546464648", - "name": "smoothness.top_25_smooth/wikipedia" - }, - { - "duration": "27.75279394949495", - "name": "smoothness.top_25_smooth/wordpress" - }, - { - "duration": "23.058210141414147", - "name": "smoothness.top_25_smooth/yahoo_answers" - }, - { - "duration": "36.03707145454545", - "name": "smoothness.top_25_smooth/yahoo_games" - }, - { - "duration": "26.54153418181817", - "name": "smoothness.top_25_smooth/yahoo_news" - }, - { - "duration": "24.45705438383838", - "name": "smoothness.top_25_smooth/yahoo_sports" - }, - { - "duration": "36.48508357575758", - "name": "smoothness.top_25_smooth/youtube" - }, - { - "duration": "32.93722462025316", - "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations" - }, - { - "duration": "38.04891934343433", - "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html" - }, - { - "duration": "3.9864910666666665E-4", - "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations_composited_transform.html" - }, - { - "duration": "29.382368949367102", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties" - }, - { - "duration": "30.957883616161606", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html" - }, - { - "duration": "29.411285936708865", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties" - }, - { - "duration": "30.33104121212123", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html" - }, - { - "duration": "29.426281481012666", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties" - }, - { - "duration": "29.317628909090896", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html" - }, - { - "duration": "29.795815873417716", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas" - }, - { - "duration": "31.22580295959595", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html" - }, - { - "duration": "29.959145835443042", - "name": "smoothness.tough_animation_cases/balls_javascript_css" - }, - { - "duration": "34.64029882828283", - "name": "smoothness.tough_animation_cases/balls_javascript_css.html" - }, - { - "duration": "53.63490156962027", - "name": "smoothness.tough_animation_cases/balls_svg_animations" - }, - { - "duration": "55.502977121212105", - "name": "smoothness.tough_animation_cases/balls_svg_animations.html" - }, - { - "duration": "28.156190000000002", - "name": "smoothness.tough_animation_cases/compositor_heavy_animation" - }, - { - "duration": "28.135392676767673", - "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200" - }, - { - "duration": "142.59641583333334", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316" - }, - { - "duration": "30.73311575757575", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "29.878954232323235", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "29.90885762626262", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "29.876234515151527", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "29.733342354430373", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style" - }, - { - "duration": "30.66545055696203", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element" - }, - { - "duration": "29.616757607594938", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element" - }, - { - "duration": "29.558853202531655", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class" - }, - { - "duration": "32.550295909090906", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "33.768087727272736", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "31.503526575757572", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "31.56739598989899", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "28.128811898734178", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations" - }, - { - "duration": "28.29114780808081", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "31.468445481012658", - "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style" - }, - { - "duration": "32.185666443037974", - "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element" - }, - { - "duration": "33.70422744303796", - "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element" - }, - { - "duration": "32.58730623232323", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "30.869567060606073", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "31.60407201010101", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "31.824163424242414", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "31.60885650632911", - "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class" - }, - { - "duration": "31.545026367088614", - "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style" - }, - { - "duration": "32.766090924050644", - "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element" - }, - { - "duration": "30.670539911392407", - "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element" - }, - { - "duration": "31.424053202531642", - "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class" - }, - { - "duration": "29.945014962025326", - "name": "smoothness.tough_animation_cases/css_transitions_inline_style" - }, - { - "duration": "30.360848227848116", - "name": "smoothness.tough_animation_cases/css_transitions_new_element" - }, - { - "duration": "30.526550646464642", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "30.09856731313132", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "30.06788649494948", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "30.217358606060596", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "30.35700803030304", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "30.33360631313132", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "30.383120535353534", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "30.39241971717171", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "30.23581458227848", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style" - }, - { - "duration": "30.079201708860758", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element" - }, - { - "duration": "30.031308582278477", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element" - }, - { - "duration": "31.459235969696973", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "30.68627027272727", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "31.04699124242425", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "31.226871252525253", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "30.250562075949357", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class" - }, - { - "duration": "30.009415443037977", - "name": "smoothness.tough_animation_cases/css_transitions_style_element" - }, - { - "duration": "30.990381240506327", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style" - }, - { - "duration": "31.18896429113924", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element" - }, - { - "duration": "30.36422558227846", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element" - }, - { - "duration": "30.902391708860762", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class" - }, - { - "duration": "30.01165607594937", - "name": "smoothness.tough_animation_cases/css_transitions_updating_class" - }, - { - "duration": "28.072727632911384", - "name": "smoothness.tough_animation_cases/css_value_type_color" - }, - { - "duration": "28.079098313131308", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316" - }, - { - "duration": "28.147146707070704", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316" - }, - { - "duration": "28.65298730379746", - "name": "smoothness.tough_animation_cases/css_value_type_filter" - }, - { - "duration": "28.678620090909092", - "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316" - }, - { - "duration": "27.723168924050643", - "name": "smoothness.tough_animation_cases/css_value_type_length" - }, - { - "duration": "27.773647636363645", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316" - }, - { - "duration": "28.033301212121213", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316" - }, - { - "duration": "28.067816556962015", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex" - }, - { - "duration": "28.10041787878788", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316" - }, - { - "duration": "28.259131313131316", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316" - }, - { - "duration": "28.058593696202532", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple" - }, - { - "duration": "28.051657676767675", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316" - }, - { - "duration": "28.24260953535355", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316" - }, - { - "duration": "28.68689516455698", - "name": "smoothness.tough_animation_cases/css_value_type_path" - }, - { - "duration": "28.66930103030303", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316" - }, - { - "duration": "28.477298262626263", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316" - }, - { - "duration": "28.131010367088606", - "name": "smoothness.tough_animation_cases/css_value_type_shadow" - }, - { - "duration": "28.1409104848485", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316" - }, - { - "duration": "28.192713222222224", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316" - }, - { - "duration": "27.75073567088608", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex" - }, - { - "duration": "27.79762033333332", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316" - }, - { - "duration": "27.79831377777778", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316" - }, - { - "duration": "27.54941921518988", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple" - }, - { - "duration": "27.92336455555555", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316" - }, - { - "duration": "27.753073131313137", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316" - }, - { - "duration": "27.540967886075947", - "name": "smoothness.tough_animation_cases/keyframed_animations" - }, - { - "duration": "27.624362919191928", - "name": "smoothness.tough_animation_cases/keyframed_animations.html" - }, - { - "duration": "28.660494949367084", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference" - }, - { - "duration": "28.561820414141405", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html" - }, - { - "duration": "28.760740303797466", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue" - }, - { - "duration": "28.536286555555552", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html" - }, - { - "duration": "28.320164202531643", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "28.065941405063292", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen" - }, - { - "duration": "27.95620525252525", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html" - }, - { - "duration": "28.38815881818182", - "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html" - }, - { - "duration": "28.094482282828288", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html" - }, - { - "duration": "28.100236822784797", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page" - }, - { - "duration": "3.882015476470588E-4", - "name": "smoothness.tough_animation_cases/robohornetpro" - }, - { - "duration": "27.395186686868673", - "name": "smoothness.tough_animation_cases/transform_transition_js_block.html" - }, - { - "duration": "28.10205679746835", - "name": "smoothness.tough_animation_cases/transform_transitions" - }, - { - "duration": "28.334037717171714", - "name": "smoothness.tough_animation_cases/transform_transitions.html" - }, - { - "duration": "27.289361354430373", - "name": "smoothness.tough_animation_cases/transform_transitions_js_block" - }, - { - "duration": "28.196671139240504", - "name": "smoothness.tough_animation_cases/web_animation_value_type_color" - }, - { - "duration": "27.88747105063291", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d" - }, - { - "duration": "28.109415164556957", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex" - }, - { - "duration": "28.171017670886073", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple" - }, - { - "duration": "28.446795430379748", - "name": "smoothness.tough_animation_cases/web_animation_value_type_path" - }, - { - "duration": "28.18946606329114", - "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow" - }, - { - "duration": "27.733102493670888", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex" - }, - { - "duration": "27.76254259493671", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple" - }, - { - "duration": "156.9857204705882", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316" - }, - { - "duration": "27.843329253164566", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time" - }, - { - "duration": "27.85949974747475", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316" - }, - { - "duration": "29.557070139240516", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous" - }, - { - "duration": "29.654945040404037", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316" - }, - { - "duration": "30.77703607594936", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining" - }, - { - "duration": "31.121465161616154", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316" - }, - { - "duration": "28.00174732911393", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations" - }, - { - "duration": "28.105338787878797", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "31.584008555555545", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316" - }, - { - "duration": "31.41249265822785", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page" - }, - { - "duration": "30.54752977777779", - "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html" - }, - { - "duration": "19.080685909090903", - "name": "smoothness.tough_canvas_cases/bouncing_balls_15" - }, - { - "duration": "45.170696090909104", - "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow" - }, - { - "duration": "30.730245025974018", - "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles" - }, - { - "duration": "20.949370025974027", - "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles" - }, - { - "duration": "18.35745779220779", - "name": "smoothness.tough_canvas_cases/bouncing_png_images" - }, - { - "duration": "29.780429467532475", - "name": "smoothness.tough_canvas_cases/bouncing_svg_images" - }, - { - "duration": "19.302947753246755", - "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear" - }, - { - "duration": "21.20933919480519", - "name": "smoothness.tough_canvas_cases/canvas_arcs" - }, - { - "duration": "21.16278798701299", - "name": "smoothness.tough_canvas_cases/canvas_font_cycler" - }, - { - "duration": "19.6703722987013", - "name": "smoothness.tough_canvas_cases/canvas_lines" - }, - { - "duration": "20.101712670886073", - "name": "smoothness.tough_canvas_cases/chip_tune" - }, - { - "duration": "19.503441860759494", - "name": "smoothness.tough_canvas_cases/crafty_mind" - }, - { - "duration": "22.02179524358974", - "name": "smoothness.tough_canvas_cases/effect_games" - }, - { - "duration": "20.63281672727273", - "name": "smoothness.tough_canvas_cases/fill_shapes" - }, - { - "duration": "33.34810815189873", - "name": "smoothness.tough_canvas_cases/geo_apis" - }, - { - "duration": "20.374479538461536", - "name": "smoothness.tough_canvas_cases/hakim" - }, - { - "duration": "39.257565020202016", - "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM" - }, - { - "duration": "20.52611616161617", - "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/" - }, - { - "duration": "21.294099898989895", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html" - }, - { - "duration": "39.82182797979799", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html" - }, - { - "duration": "20.000473404040406", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html" - }, - { - "duration": "24.320186040404046", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html" - }, - { - "duration": "22.61543681818182", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html" - }, - { - "duration": "21.034462393939393", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/" - }, - { - "duration": "22.698438343434347", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html" - }, - { - "duration": "25.157146090909087", - "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/" - }, - { - "duration": "20.715205414141412", - "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169" - }, - { - "duration": "21.299530606060607", - "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html" - }, - { - "duration": "19.389636050505047", - "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html" - }, - { - "duration": "20.74405278787878", - "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/" - }, - { - "duration": "20.300277686868696", - "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html" - }, - { - "duration": "19.6746681919192", - "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html" - }, - { - "duration": "22.4397556060606", - "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/" - }, - { - "duration": "22.59910464646464", - "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html" - }, - { - "duration": "23.25767676767677", - "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/" - }, - { - "duration": "20.798426353535355", - "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/" - }, - { - "duration": "24.113697769230768", - "name": "smoothness.tough_canvas_cases/jarro_doverson" - }, - { - "duration": "21.937401354430378", - "name": "smoothness.tough_canvas_cases/kevs_3d" - }, - { - "duration": "20.702875556962027", - "name": "smoothness.tough_canvas_cases/man_in_blue" - }, - { - "duration": "29.654976", - "name": "smoothness.tough_canvas_cases/many_images" - }, - { - "duration": "22.569982594936707", - "name": "smoothness.tough_canvas_cases/megi_dish" - }, - { - "duration": "24.377868220779227", - "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt" - }, - { - "duration": "21.45255720253165", - "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank" - }, - { - "duration": "20.677777461538454", - "name": "smoothness.tough_canvas_cases/microsoft_snow" - }, - { - "duration": "22.212061303797466", - "name": "smoothness.tough_canvas_cases/microsoft_speed_reading" - }, - { - "duration": "21.289256948717938", - "name": "smoothness.tough_canvas_cases/microsoft_tweet_map" - }, - { - "duration": "47.04659653846155", - "name": "smoothness.tough_canvas_cases/microsoft_video_city" - }, - { - "duration": "19.930058653846157", - "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains" - }, - { - "duration": "20.64460326582279", - "name": "smoothness.tough_canvas_cases/mix_10k" - }, - { - "duration": "20.603773831168823", - "name": "smoothness.tough_canvas_cases/put_get_image_data" - }, - { - "duration": "20.202671531645564", - "name": "smoothness.tough_canvas_cases/runway" - }, - { - "duration": "20.596650636363627", - "name": "smoothness.tough_canvas_cases/smash_cat" - }, - { - "duration": "19.451934679487184", - "name": "smoothness.tough_canvas_cases/spielzeugz" - }, - { - "duration": "22.607667402597404", - "name": "smoothness.tough_canvas_cases/stroke_shapes" - }, - { - "duration": "20.187603919191915", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html" - }, - { - "duration": "21.1028815050505", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html" - }, - { - "duration": "45.35835580808083", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image" - }, - { - "duration": "19.683793606060604", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15" - }, - { - "duration": "5.06711E-4", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html" - }, - { - "duration": "23.966289848484838", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html" - }, - { - "duration": "20.852733171717162", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html" - }, - { - "duration": "18.386774636363633", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html" - }, - { - "duration": "32.17657043434344", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html" - }, - { - "duration": "21.254412171717174", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html" - }, - { - "duration": "19.67092844444444", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html" - }, - { - "duration": "20.435415080808088", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html" - }, - { - "duration": "31.403039555555555", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html" - }, - { - "duration": "22.995322868686873", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html" - }, - { - "duration": "27.792222080808088", - "name": "smoothness.tough_filters_cases/Analog_Clock_SVG" - }, - { - "duration": "28.821003898989897", - "name": "smoothness.tough_filters_cases/Filter_Terrain_SVG" - }, - { - "duration": "32.777650414141405", - "name": "smoothness.tough_filters_cases/IE_PirateMark" - }, - { - "duration": "46.94865966666667", - "name": "smoothness.tough_filters_cases/MotionMark_Focus" - }, - { - "duration": "25.229982175000007", - "name": "smoothness.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "26.002865787500003", - "name": "smoothness.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "30.60252652499999", - "name": "smoothness.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "39.120848225", - "name": "smoothness.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "27.795290030303025", - "name": "smoothness.tough_image_decode_cases/cats_unscaled" - }, - { - "duration": "15.419358946969696", - "name": "smoothness.tough_image_decode_cases/cats_viewport_width" - }, - { - "duration": "27.758225555555562", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html" - }, - { - "duration": "15.4114132020202", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html" - }, - { - "duration": "44.263682646464645", - "name": "smoothness.tough_path_rendering_cases/GUIMark_Vector_Chart_Test" - }, - { - "duration": "38.494215868686865", - "name": "smoothness.tough_path_rendering_cases/IE_Chalkboard" - }, - { - "duration": "28.581301080808082", - "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes" - }, - { - "duration": "28.798777373737394", - "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes" - }, - { - "duration": "40.926306337499994", - "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "36.661938037499986", - "name": "smoothness.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "26.936737400000005", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "27.151556375000002", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "30.800633202020204", - "name": "smoothness.tough_pinch_zoom_cases/Blogger" - }, - { - "duration": "35.77718787878788", - "name": "smoothness.tough_pinch_zoom_cases/ESPN" - }, - { - "duration": "26.733205363636362", - "name": "smoothness.tough_pinch_zoom_cases/Facebook" - }, - { - "duration": "21.84861522222223", - "name": "smoothness.tough_pinch_zoom_cases/LinkedIn" - }, - { - "duration": "26.2707691919192", - "name": "smoothness.tough_pinch_zoom_cases/Twitter" - }, - { - "duration": "33.754365020202016", - "name": "smoothness.tough_pinch_zoom_cases/Weather.com" - }, - { - "duration": "22.544678183673472", - "name": "smoothness.tough_pinch_zoom_cases/amazon_pinch" - }, - { - "duration": "30.143703244897964", - "name": "smoothness.tough_pinch_zoom_cases/blogspot_pinch" - }, - { - "duration": "25.85749467346939", - "name": "smoothness.tough_pinch_zoom_cases/booking_pinch" - }, - { - "duration": "33.79667585416666", - "name": "smoothness.tough_pinch_zoom_cases/cnn_pinch" - }, - { - "duration": "31.572076816326522", - "name": "smoothness.tough_pinch_zoom_cases/ebay_pinch" - }, - { - "duration": "37.94760051020408", - "name": "smoothness.tough_pinch_zoom_cases/espn_pinch" - }, - { - "duration": "28.08947820408163", - "name": "smoothness.tough_pinch_zoom_cases/facebook_pinch" - }, - { - "duration": "53.52299646938776", - "name": "smoothness.tough_pinch_zoom_cases/gmail_pinch" - }, - { - "duration": "25.939297020408166", - "name": "smoothness.tough_pinch_zoom_cases/google_calendar_pinch" - }, - { - "duration": "26.891234734693878", - "name": "smoothness.tough_pinch_zoom_cases/google_image_pinch" - }, - { - "duration": "39.3597532244898", - "name": "smoothness.tough_pinch_zoom_cases/google_search_pinch" - }, - { - "duration": "25.26153025252526", - "name": "smoothness.tough_pinch_zoom_cases/http://booking.com" - }, - { - "duration": "32.91005675757576", - "name": "smoothness.tough_pinch_zoom_cases/http://games.yahoo.com" - }, - { - "duration": "32.16623657575758", - "name": "smoothness.tough_pinch_zoom_cases/http://news.yahoo.com" - }, - { - "duration": "38.012918141414154", - "name": "smoothness.tough_pinch_zoom_cases/http://sports.yahoo.com/" - }, - { - "duration": "22.356300727272735", - "name": "smoothness.tough_pinch_zoom_cases/http://www.amazon.com" - }, - { - "duration": "31.83677420202021", - "name": "smoothness.tough_pinch_zoom_cases/http://www.cnn.com" - }, - { - "duration": "31.15818551515153", - "name": "smoothness.tough_pinch_zoom_cases/http://www.ebay.com" - }, - { - "duration": "29.57042976767677", - "name": "smoothness.tough_pinch_zoom_cases/http://www.youtube.com" - }, - { - "duration": "41.39919131313131", - "name": "smoothness.tough_pinch_zoom_cases/https://mail.google.com/mail/" - }, - { - "duration": "38.07974644444444", - "name": "smoothness.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "26.21586877777778", - "name": "smoothness.tough_pinch_zoom_cases/https://www.google.com/calendar/" - }, - { - "duration": "27.164185626262615", - "name": "smoothness.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch" - }, - { - "duration": "21.756811081632655", - "name": "smoothness.tough_pinch_zoom_cases/linkedin_pinch" - }, - { - "duration": "27.52438779166666", - "name": "smoothness.tough_pinch_zoom_cases/twitter_pinch" - }, - { - "duration": "39.840795816326526", - "name": "smoothness.tough_pinch_zoom_cases/weather_pinch" - }, - { - "duration": "33.791566857142854", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_games_pinch" - }, - { - "duration": "33.86926775510203", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_news_pinch" - }, - { - "duration": "42.70190397959184", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_sports_pinch" - }, - { - "duration": "33.930994489795914", - "name": "smoothness.tough_pinch_zoom_cases/youtube_pinch" - }, - { - "duration": "24.13108227272728", - "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "23.94836456565657", - "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "23.862978989898988", - "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "23.742746070707067", - "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "23.407207363636363", - "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "23.426364505050497", - "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "23.521491949494948", - "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "22.432938313131313", - "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "20.96914249494949", - "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "19.93218999999999", - "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "35.07560601010102", - "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "23.06239716161617", - "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "22.35666229292929", - "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "22.40207157575757", - "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "22.09419401010101", - "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "21.878260545454538", - "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "21.823401494949493", - "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "20.98283712121212", - "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "19.7684117070707", - "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "18.984960101010103", - "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "24.856765303030322", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "24.898161424242435", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "24.734197606060604", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "24.76906805050504", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "24.89300415151514", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "24.713755777777774", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "24.56758952525253", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "24.398333050505055", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "23.001992525252525", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "22.03596396969696", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "21.491442232323227", - "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "21.42128835353535", - "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "21.47238290909091", - "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "21.641690636363645", - "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "21.603251090909094", - "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "21.471453616161618", - "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "21.45357283838384", - "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "20.922658777777777", - "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "19.419393868686875", - "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "18.60041250505051", - "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "37.1593949852941", - "name": "smoothness.tough_texture_upload_cases/background_color_animation" - }, - { - "duration": "37.316043010101", - "name": "smoothness.tough_texture_upload_cases/background_color_animation.html" - }, - { - "duration": "27.141407441176465", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient" - }, - { - "duration": "27.130495919191926", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient.html" - }, - { - "duration": "9.790934015384617E-4", - "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads.html" - }, - { - "duration": "27.191593264705887", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads" - }, - { - "duration": "27.141429262626275", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads.html" - }, - { - "duration": "25.56651914705883", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads" - }, - { - "duration": "25.83860575757576", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads.html" - }, - { - "duration": "25.98651282352941", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads" - }, - { - "duration": "26.291956888888887", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads.html" - }, - { - "duration": "6.2599812", - "name": "smoothness.tough_webgl_cases/animometer_webgl" - }, - { - "duration": "6.410708411111111", - "name": "smoothness.tough_webgl_cases/aquarium" - }, - { - "duration": "6.408661697979797", - "name": "smoothness.tough_webgl_cases/aquarium_20k" - }, - { - "duration": "6.296394094444443", - "name": "smoothness.tough_webgl_cases/blob" - }, - { - "duration": "6.29071058611111", - "name": "smoothness.tough_webgl_cases/dynamic_cube_map" - }, - { - "duration": "6.284061972222222", - "name": "smoothness.tough_webgl_cases/earth" - }, - { - "duration": "6.491773628282826", - "name": "smoothness.tough_webgl_cases/http://kenrussell.github.io/webgl-animometer/Animometer/tests/3d/webgl.html" - }, - { - "duration": "11.855262998989897", - "name": "smoothness.tough_webgl_cases/http://webglsamples.org/aquarium/aquarium.html" - }, - { - "duration": "6.4514991383838405", - "name": "smoothness.tough_webgl_cases/http://webglsamples.org/blob/blob.html" - }, - { - "duration": "6.5239576030303", - "name": "smoothness.tough_webgl_cases/http://webglsamples.org/dynamic-cubemap/dynamic-cubemap.html" - }, - { - "duration": "22.426197949494945", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/nvidia-vertex-buffer-object/index.html" - }, - { - "duration": "11.814221277777781", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/particles/index.html" - }, - { - "duration": "12.222427406060604", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/san-angeles/index.html" - }, - { - "duration": "13.075231064646461", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/Earth.html" - }, - { - "duration": "11.905891209090905", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/ManyPlanetsDeep.html" - }, - { - "duration": "6.211767508333333", - "name": "smoothness.tough_webgl_cases/many_planets_deep" - }, - { - "duration": "19.345400416666667", - "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object" - }, - { - "duration": "6.965218008333334", - "name": "smoothness.tough_webgl_cases/particles" - }, - { - "duration": "7.575802086111112", - "name": "smoothness.tough_webgl_cases/san_angeles" - }, - { - "duration": "147.17874989898988", - "name": "speedometer-future/http://browserbench.org/Speedometer/" - }, - { - "duration": "141.51412323232327", - "name": "speedometer/http://browserbench.org/Speedometer/" - }, - { - "duration": "259.4743301010102", - "name": "speedometer2-future/Speedometer2" - }, - { - "duration": "254.07946151515154", - "name": "speedometer2/Speedometer2" - }, - { - "duration": "35.292414670707075", - "name": "start_with_url.cold.startup_pages/about:blank" - }, - { - "duration": "35.710181262626264", - "name": "start_with_url.cold.startup_pages/http://bbc.co.uk" - }, - { - "duration": "32.594106345270895", - "name": "start_with_url.warm.startup_pages/about:blank" - }, - { - "duration": "34.49074906703397", - "name": "start_with_url.warm.startup_pages/http://bbc.co.uk" - }, - { - "duration": "30.523201151515153", - "name": "system_health.common_mobile/background:media:imgur" - }, - { - "duration": "4.997412306666666E-4", - "name": "system_health.common_mobile/background:news:nytimes" - }, - { - "duration": "32.607920555555566", - "name": "system_health.common_mobile/background:search:google" - }, - { - "duration": "45.91138055555555", - "name": "system_health.common_mobile/background:social:facebook" - }, - { - "duration": "54.127892333333364", - "name": "system_health.common_mobile/background:tools:gmail" - }, - { - "duration": "129.10833219191923", - "name": "system_health.common_mobile/browse:chrome:newtab" - }, - { - "duration": "44.26154185858585", - "name": "system_health.common_mobile/browse:chrome:omnibox" - }, - { - "duration": "124.92000149494949", - "name": "system_health.common_mobile/browse:media:facebook_photos" - }, - { - "duration": "69.29237593939395", - "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "104.34221198989903", - "name": "system_health.common_mobile/browse:media:imgur" - }, - { - "duration": "165.7748712121212", - "name": "system_health.common_mobile/browse:media:youtube" - }, - { - "duration": "263.25035606060607", - "name": "system_health.common_mobile/browse:news:cnn" - }, - { - "duration": "91.07696409090904", - "name": "system_health.common_mobile/browse:news:cricbuzz" - }, - { - "duration": "2.5241191615384617E-4", - "name": "system_health.common_mobile/browse:news:globo" - }, - { - "duration": "73.3268954646465", - "name": "system_health.common_mobile/browse:news:qq" - }, - { - "duration": "86.70862684848481", - "name": "system_health.common_mobile/browse:news:reddit" - }, - { - "duration": "4.328214192307692E-4", - "name": "system_health.common_mobile/browse:news:toi" - }, - { - "duration": "73.85789543434342", - "name": "system_health.common_mobile/browse:news:washingtonpost" - }, - { - "duration": "118.68553493939392", - "name": "system_health.common_mobile/browse:shopping:amazon" - }, - { - "duration": "122.05129403030305", - "name": "system_health.common_mobile/browse:shopping:avito" - }, - { - "duration": "4.1521512538461537E-4", - "name": "system_health.common_mobile/browse:shopping:flipkart" - }, - { - "duration": "57.02305162626266", - "name": "system_health.common_mobile/browse:shopping:lazada" - }, - { - "duration": "100.90330792929294", - "name": "system_health.common_mobile/browse:social:facebook" - }, - { - "duration": "167.08639454545457", - "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "128.90585100000004", - "name": "system_health.common_mobile/browse:social:instagram" - }, - { - "duration": "136.0685866666667", - "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "9.252108084615384E-4", - "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "73.87800973737373", - "name": "system_health.common_mobile/browse:social:twitter" - }, - { - "duration": "100.64880898989897", - "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "69.43588652525254", - "name": "system_health.common_mobile/browse:tools:maps" - }, - { - "duration": "25.36347053535353", - "name": "system_health.common_mobile/load:chrome:blank" - }, - { - "duration": "35.65053584848485", - "name": "system_health.common_mobile/load:games:bubbles" - }, - { - "duration": "26.172971959595962", - "name": "system_health.common_mobile/load:games:lazors" - }, - { - "duration": "4.368928761538461E-4", - "name": "system_health.common_mobile/load:games:spychase" - }, - { - "duration": "35.18797272727273", - "name": "system_health.common_mobile/load:media:dailymotion" - }, - { - "duration": "30.601108666666658", - "name": "system_health.common_mobile/load:media:facebook_photos" - }, - { - "duration": "30.22379213131314", - "name": "system_health.common_mobile/load:media:google_images" - }, - { - "duration": "30.756693828282838", - "name": "system_health.common_mobile/load:media:imgur" - }, - { - "duration": "29.093388303030306", - "name": "system_health.common_mobile/load:media:soundcloud" - }, - { - "duration": "29.98097957575759", - "name": "system_health.common_mobile/load:media:youtube" - }, - { - "duration": "66.80765163636366", - "name": "system_health.common_mobile/load:news:cnn" - }, - { - "duration": "56.37527630303031", - "name": "system_health.common_mobile/load:news:irctc" - }, - { - "duration": "39.18603206060606", - "name": "system_health.common_mobile/load:news:nytimes" - }, - { - "duration": "29.06739854545455", - "name": "system_health.common_mobile/load:news:qq" - }, - { - "duration": "31.76050677777777", - "name": "system_health.common_mobile/load:news:reddit" - }, - { - "duration": "35.09394305050506", - "name": "system_health.common_mobile/load:news:washingtonpost" - }, - { - "duration": "31.739422747474748", - "name": "system_health.common_mobile/load:news:wikipedia" - }, - { - "duration": "30.05324744444445", - "name": "system_health.common_mobile/load:search:baidu" - }, - { - "duration": "30.206667050505057", - "name": "system_health.common_mobile/load:search:ebay" - }, - { - "duration": "27.70260753535353", - "name": "system_health.common_mobile/load:search:google" - }, - { - "duration": "29.483762777777773", - "name": "system_health.common_mobile/load:search:taobao" - }, - { - "duration": "27.373684999999995", - "name": "system_health.common_mobile/load:search:yahoo" - }, - { - "duration": "28.899427909090907", - "name": "system_health.common_mobile/load:search:yandex" - }, - { - "duration": "28.57572242424243", - "name": "system_health.common_mobile/load:social:twitter" - }, - { - "duration": "28.179340717171712", - "name": "system_health.common_mobile/load:tools:docs" - }, - { - "duration": "42.73104664646467", - "name": "system_health.common_mobile/load:tools:drive" - }, - { - "duration": "33.71655949494951", - "name": "system_health.common_mobile/load:tools:dropbox" - }, - { - "duration": "4.542057315384615E-4", - "name": "system_health.common_mobile/load:tools:gmail" - }, - { - "duration": "30.491091030303025", - "name": "system_health.common_mobile/load:tools:stackoverflow" - }, - { - "duration": "45.300949686868705", - "name": "system_health.common_mobile/load:tools:weather" - }, - { - "duration": "147.23335838383838", - "name": "system_health.common_mobile/long_running:tools:gmail-background" - }, - { - "duration": "146.1766026262626", - "name": "system_health.common_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "31.621897760942765", - "name": "system_health.memory_mobile/background:media:imgur" - }, - { - "duration": "53.86591886531987", - "name": "system_health.memory_mobile/background:news:nytimes" - }, - { - "duration": "33.145711148148145", - "name": "system_health.memory_mobile/background:search:google" - }, - { - "duration": "38.12781888215488", - "name": "system_health.memory_mobile/background:social:facebook" - }, - { - "duration": "45.3187475016835", - "name": "system_health.memory_mobile/background:tools:gmail" - }, - { - "duration": "114.03136267340074", - "name": "system_health.memory_mobile/browse:chrome:newtab" - }, - { - "duration": "44.309386181818184", - "name": "system_health.memory_mobile/browse:chrome:omnibox" - }, - { - "duration": "102.94231690235692", - "name": "system_health.memory_mobile/browse:media:facebook_photos" - }, - { - "duration": "56.407467835016824", - "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "82.88522897979794", - "name": "system_health.memory_mobile/browse:media:imgur" - }, - { - "duration": "105.1720869057239", - "name": "system_health.memory_mobile/browse:media:youtube" - }, - { - "duration": "180.6079983838383", - "name": "system_health.memory_mobile/browse:news:cnn" - }, - { - "duration": "69.59971872390571", - "name": "system_health.memory_mobile/browse:news:cricbuzz" - }, - { - "duration": "3.2931234958333326E-4", - "name": "system_health.memory_mobile/browse:news:globo" - }, - { - "duration": "61.27877745791247", - "name": "system_health.memory_mobile/browse:news:qq" - }, - { - "duration": "73.69309203030303", - "name": "system_health.memory_mobile/browse:news:reddit" - }, - { - "duration": "4.845129126388888E-4", - "name": "system_health.memory_mobile/browse:news:toi" - }, - { - "duration": "60.8097763535354", - "name": "system_health.memory_mobile/browse:news:washingtonpost" - }, - { - "duration": "82.40707234680136", - "name": "system_health.memory_mobile/browse:shopping:amazon" - }, - { - "duration": "89.57884268686865", - "name": "system_health.memory_mobile/browse:shopping:avito" - }, - { - "duration": "5.035036133333332E-4", - "name": "system_health.memory_mobile/browse:shopping:flipkart" - }, - { - "duration": "49.062225909090934", - "name": "system_health.memory_mobile/browse:shopping:lazada" - }, - { - "duration": "80.10532982828282", - "name": "system_health.memory_mobile/browse:social:facebook" - }, - { - "duration": "102.98890005050504", - "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "96.68784291582486", - "name": "system_health.memory_mobile/browse:social:instagram" - }, - { - "duration": "98.06801944444445", - "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "110.20222482491579", - "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "62.92624894276095", - "name": "system_health.memory_mobile/browse:social:twitter" - }, - { - "duration": "77.72081903367", - "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "61.98962920538719", - "name": "system_health.memory_mobile/browse:tools:maps" - }, - { - "duration": "28.2482947003367", - "name": "system_health.memory_mobile/load:chrome:blank" - }, - { - "duration": "31.84797350168351", - "name": "system_health.memory_mobile/load:games:bubbles" - }, - { - "duration": "29.11291212457914", - "name": "system_health.memory_mobile/load:games:lazors" - }, - { - "duration": "38.73746326936027", - "name": "system_health.memory_mobile/load:games:spychase" - }, - { - "duration": "36.78424268013467", - "name": "system_health.memory_mobile/load:media:dailymotion" - }, - { - "duration": "32.57984762626263", - "name": "system_health.memory_mobile/load:media:facebook_photos" - }, - { - "duration": "32.48646622558922", - "name": "system_health.memory_mobile/load:media:google_images" - }, - { - "duration": "32.403381171717164", - "name": "system_health.memory_mobile/load:media:imgur" - }, - { - "duration": "31.170994821548835", - "name": "system_health.memory_mobile/load:media:soundcloud" - }, - { - "duration": "32.34003139730641", - "name": "system_health.memory_mobile/load:media:youtube" - }, - { - "duration": "60.88662639057237", - "name": "system_health.memory_mobile/load:news:cnn" - }, - { - "duration": "44.873896622895614", - "name": "system_health.memory_mobile/load:news:irctc" - }, - { - "duration": "39.01714937373736", - "name": "system_health.memory_mobile/load:news:nytimes" - }, - { - "duration": "30.845649148148148", - "name": "system_health.memory_mobile/load:news:qq" - }, - { - "duration": "34.32440148148148", - "name": "system_health.memory_mobile/load:news:reddit" - }, - { - "duration": "35.14253416835017", - "name": "system_health.memory_mobile/load:news:washingtonpost" - }, - { - "duration": "34.09335648484849", - "name": "system_health.memory_mobile/load:news:wikipedia" - }, - { - "duration": "31.72862553535353", - "name": "system_health.memory_mobile/load:search:baidu" - }, - { - "duration": "31.046157959595956", - "name": "system_health.memory_mobile/load:search:ebay" - }, - { - "duration": "30.443287969696957", - "name": "system_health.memory_mobile/load:search:google" - }, - { - "duration": "31.4326678047138", - "name": "system_health.memory_mobile/load:search:taobao" - }, - { - "duration": "30.222465400673393", - "name": "system_health.memory_mobile/load:search:yahoo" - }, - { - "duration": "31.155886313131305", - "name": "system_health.memory_mobile/load:search:yandex" - }, - { - "duration": "30.877675053872064", - "name": "system_health.memory_mobile/load:social:twitter" - }, - { - "duration": "30.76361068013468", - "name": "system_health.memory_mobile/load:tools:docs" - }, - { - "duration": "39.80516326262627", - "name": "system_health.memory_mobile/load:tools:drive" - }, - { - "duration": "34.836199090909105", - "name": "system_health.memory_mobile/load:tools:dropbox" - }, - { - "duration": "4.7509537736111114E-4", - "name": "system_health.memory_mobile/load:tools:gmail" - }, - { - "duration": "32.650360363636345", - "name": "system_health.memory_mobile/load:tools:stackoverflow" - }, - { - "duration": "42.68365425589225", - "name": "system_health.memory_mobile/load:tools:weather" - }, - { - "duration": "0.0014847914416666668", - "name": "system_health.memory_mobile/long_running:tools:gmail-background" - }, - { - "duration": "221.29104303030297", - "name": "system_health.memory_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "42.16013333333334", - "name": "thread_times.key_idle_power_cases/animated-gif.html" - }, - { - "duration": "46.59906654545455", - "name": "thread_times.key_idle_power_cases/blank.html" - }, - { - "duration": "43.07981933333334", - "name": "thread_times.key_idle_power_cases/css-animation.html" - }, - { - "duration": "44.422924333333334", - "name": "thread_times.key_idle_power_cases/idle_power_animated_gif" - }, - { - "duration": "47.25709283333333", - "name": "thread_times.key_idle_power_cases/idle_power_blank" - }, - { - "duration": "46.92146866666667", - "name": "thread_times.key_idle_power_cases/idle_power_css_animation" - }, - { - "duration": "50.05928216666666", - "name": "thread_times.key_idle_power_cases/idle_power_request_animation_frame" - }, - { - "duration": "120.83141666666667", - "name": "thread_times.key_idle_power_cases/idle_power_set_timeout_long" - }, - { - "duration": "49.886341666666674", - "name": "thread_times.key_idle_power_cases/idle_power_set_timetout" - }, - { - "duration": "43.01773242424242", - "name": "thread_times.key_idle_power_cases/request-animation-frame.html" - }, - { - "duration": "43.111070909090905", - "name": "thread_times.key_idle_power_cases/set-timeout.html" - }, - { - "duration": "113.29154936363632", - "name": "thread_times.key_idle_power_cases/set-timeout.html (Long Idle)" - }, - { - "duration": "50.290036898989904", - "name": "thread_times.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "49.124489767676764", - "name": "thread_times.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "44.61949068686869", - "name": "thread_times.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "34.96725150505053", - "name": "thread_times.key_mobile_sites_smooth/reddit" - }, - { - "duration": "37.14393296969697", - "name": "thread_times.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "42.227324333333335", - "name": "thread_times.key_noop_cases/no_op_raf" - }, - { - "duration": "38.80171424242424", - "name": "thread_times.key_noop_cases/no_op_raf.html" - }, - { - "duration": "23.259573833333334", - "name": "thread_times.key_noop_cases/no_op_scroll" - }, - { - "duration": "21.498834838383843", - "name": "thread_times.key_noop_cases/no_op_scroll.html" - }, - { - "duration": "21.956787666666667", - "name": "thread_times.key_noop_cases/no_op_settimeout" - }, - { - "duration": "19.948883484848484", - "name": "thread_times.key_noop_cases/no_op_settimeout.html" - }, - { - "duration": "28.211118", - "name": "thread_times.key_noop_cases/no_op_touch_handler" - }, - { - "duration": "23.8483464949495", - "name": "thread_times.key_noop_cases/no_op_touch_handler.html" - }, - { - "duration": "24.421865956521735", - "name": "thread_times.key_silk_cases/card_expansion" - }, - { - "duration": "27.36437055072464", - "name": "thread_times.key_silk_cases/card_expansion_animated" - }, - { - "duration": "24.397751507246383", - "name": "thread_times.key_silk_cases/card_expansion_images_text" - }, - { - "duration": "21.406990463768114", - "name": "thread_times.key_silk_cases/card_flying" - }, - { - "duration": "23.345918478260874", - "name": "thread_times.key_silk_cases/coordinated_animation" - }, - { - "duration": "21.541019768115934", - "name": "thread_times.key_silk_cases/font_wipe" - }, - { - "duration": "21.290426737373735", - "name": "thread_times.key_silk_cases/font_wipe.html" - }, - { - "duration": "23.73285276811594", - "name": "thread_times.key_silk_cases/google_news_ios" - }, - { - "duration": "21.935335173913046", - "name": "thread_times.key_silk_cases/gws_boogie_expansion" - }, - { - "duration": "22.01072876811594", - "name": "thread_times.key_silk_cases/gws_google_expansion" - }, - { - "duration": "24.54586379710145", - "name": "thread_times.key_silk_cases/horizontal_vertical_expansion" - }, - { - "duration": "41.376064939393935", - "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html" - }, - { - "duration": "18.72534972727272", - "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html" - }, - { - "duration": "17.97790021212121", - "name": "thread_times.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet" - }, - { - "duration": "23.733045646464653", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/" - }, - { - "duration": "20.812986242424238", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/" - }, - { - "duration": "23.623121505050506", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/" - }, - { - "duration": "23.966389181818187", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/" - }, - { - "duration": "23.94460159595961", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/" - }, - { - "duration": "27.063611121212116", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/" - }, - { - "duration": "26.43245223232324", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/jx5De/14/show/" - }, - { - "duration": "25.013207252525245", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/" - }, - { - "duration": "22.9556207070707", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/" - }, - { - "duration": "26.461238545454552", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/" - }, - { - "duration": "23.032574070707067", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/" - }, - { - "duration": "23.36859727272727", - "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll" - }, - { - "duration": "19.35272999999999", - "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe" - }, - { - "duration": "2.4189949E-4", - "name": "thread_times.key_silk_cases/http://plus.google.com/app/basic/stream" - }, - { - "duration": "3.11303138E-4", - "name": "thread_times.key_silk_cases/http://s.codepen.io/befamous/fullpage/pFsqb?scroll" - }, - { - "duration": "30.56261308080808", - "name": "thread_times.key_silk_cases/http://wiltzius.github.io/shape-shifter/" - }, - { - "duration": "21.76300625252525", - "name": "thread_times.key_silk_cases/http://www.google.com/#q=google" - }, - { - "duration": "2.3183822500000002E-4", - "name": "thread_times.key_silk_cases/https://polymer-topeka.appspot.com/" - }, - { - "duration": "21.609123797979805", - "name": "thread_times.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie" - }, - { - "duration": "2.48122212E-4", - "name": "thread_times.key_silk_cases/inbox_app.html?slide_drawer" - }, - { - "duration": "38.615341868686876", - "name": "thread_times.key_silk_cases/inbox_app.html?stress_hidey_bars" - }, - { - "duration": "2.55727767E-4", - "name": "thread_times.key_silk_cases/inbox_app.html?swipe_to_dismiss" - }, - { - "duration": "25.30313797979799", - "name": "thread_times.key_silk_cases/inbox_app.html?toggle_drawer" - }, - { - "duration": "28.457873420289854", - "name": "thread_times.key_silk_cases/infinite_scrolling" - }, - { - "duration": "27.93727089898989", - "name": "thread_times.key_silk_cases/infinite_scrolling.html" - }, - { - "duration": "21.899681275362315", - "name": "thread_times.key_silk_cases/list_animation_simple" - }, - { - "duration": "20.86351948484848", - "name": "thread_times.key_silk_cases/list_animation_simple.html" - }, - { - "duration": "41.15137926086957", - "name": "thread_times.key_silk_cases/list_recycle_transform" - }, - { - "duration": "23.729736434782605", - "name": "thread_times.key_silk_cases/mask_transition_animation" - }, - { - "duration": "1.306295405E-4", - "name": "thread_times.key_silk_cases/masonry.html" - }, - { - "duration": "19.58670218840579", - "name": "thread_times.key_silk_cases/mobile_news_sandbox" - }, - { - "duration": "27.066041333333335", - "name": "thread_times.key_silk_cases/parallax_effect" - }, - { - "duration": "18.484588449275364", - "name": "thread_times.key_silk_cases/physical_simulation" - }, - { - "duration": "26.14427753535353", - "name": "thread_times.key_silk_cases/pushState.html" - }, - { - "duration": "38.0912746521739", - "name": "thread_times.key_silk_cases/silk_finance" - }, - { - "duration": "36.946411000000005", - "name": "thread_times.key_silk_cases/silk_finance.html" - }, - { - "duration": "19.065163376811597", - "name": "thread_times.key_silk_cases/sticky_using_webkit" - }, - { - "duration": "39.87611542028985", - "name": "thread_times.key_silk_cases/stress_hidey_bars" - }, - { - "duration": "30.903316130434778", - "name": "thread_times.key_silk_cases/svg_icon_raster" - }, - { - "duration": "26.23442576811596", - "name": "thread_times.key_silk_cases/swipe_to_dismiss" - }, - { - "duration": "25.91719691304348", - "name": "thread_times.key_silk_cases/toggle_drawer" - }, - { - "duration": "26.807859072463774", - "name": "thread_times.key_silk_cases/update_history_state" - }, - { - "duration": "27.736277391304355", - "name": "thread_times.key_silk_cases/vertical_expansion" - }, - { - "duration": "24.420588362318835", - "name": "thread_times.key_silk_cases/zoom_in_animation" - }, - { - "duration": "59.80054148101265", - "name": "thread_times.simple_mobile_sites/ebay_scroll" - }, - { - "duration": "48.66278391139242", - "name": "thread_times.simple_mobile_sites/flickr_scroll" - }, - { - "duration": "35.98266257575758", - "name": "thread_times.simple_mobile_sites/http://m.nytimes.com/" - }, - { - "duration": "60.96098475757576", - "name": "thread_times.simple_mobile_sites/http://www.ebay.co.uk/" - }, - { - "duration": "41.11444178787878", - "name": "thread_times.simple_mobile_sites/http://www.nyc.gov" - }, - { - "duration": "29.90269434758948", - "name": "thread_times.simple_mobile_sites/https://www.flickr.com/" - }, - { - "duration": "40.64528583544303", - "name": "thread_times.simple_mobile_sites/nyc_gov_scroll" - }, - { - "duration": "35.64036446835443", - "name": "thread_times.simple_mobile_sites/nytimes_scroll" - }, - { - "duration": "42.812998", - "name": "thread_times.tough_compositor_cases/cc_poster_circle" - }, - { - "duration": "35.325621999999996", - "name": "thread_times.tough_compositor_cases/cc_scroll_200_layer_grid" - }, - { - "duration": "46.378828666666664", - "name": "thread_times.tough_compositor_cases/cc_scroll_text_only" - }, - { - "duration": "32.11457503030303", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION" - }, - { - "duration": "29.700842424242417", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS" - }, - { - "duration": "32.06771913131313", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE" - }, - { - "duration": "34.47874830303031", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE" - }, - { - "duration": "28.472643343434353", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID" - }, - { - "duration": "40.55503087878788", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY" - }, - { - "duration": "29.447922686868694", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY" - }, - { - "duration": "28.275476929292918", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID" - }, - { - "duration": "48.52476883333333", - "name": "thread_times.tough_compositor_cases/js_full_screen_invalidation" - }, - { - "duration": "72.052666", - "name": "thread_times.tough_compositor_cases/js_poster_circle" - }, - { - "duration": "35.808817999999995", - "name": "thread_times.tough_compositor_cases/js_scroll_200_layer_grid" - }, - { - "duration": "37.49106", - "name": "thread_times.tough_compositor_cases/js_scroll_text_only" - }, - { - "duration": "39.086663333333334", - "name": "thread_times.tough_compositor_cases/new_tilings" - }, - { - "duration": "30.368903838383833", - "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "30.375324484848484", - "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "30.532537525252526", - "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "30.465323010101017", - "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "28.648318242424242", - "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "28.35789631313131", - "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "28.141334070707085", - "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "26.767801050505053", - "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "24.504372909090915", - "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "22.86043765656566", - "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "37.006554868686855", - "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "25.80426756565657", - "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "25.65145073737374", - "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "25.85091108080809", - "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "25.127454535353536", - "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "24.84778224242424", - "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "24.959758303030313", - "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "23.191610010101005", - "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "21.526950585858586", - "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "20.10496767676767", - "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "28.509965787878784", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "28.85400212121211", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "28.2716900909091", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "28.339573636363628", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "28.039836969696967", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "27.883402494949504", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "27.82490727272726", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "27.683475898989883", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "25.35186578787879", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "24.049451252525248", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "21.425397030303035", - "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "22.041378191919183", - "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "22.10245430303031", - "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "22.016877757575756", - "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "21.88110057575758", - "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "21.853328505050506", - "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "21.793491616161614", - "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "21.086836171717163", - "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "19.327570424242417", - "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "18.476224737373734", - "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "19.057826787878785", - "name": "tracing.tracing_with_background_memory_infra/Facebook" - }, - { - "duration": "21.08620018181819", - "name": "tracing.tracing_with_background_memory_infra/Wikipedia" - }, - { - "duration": "15.221000328282827", - "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com" - }, - { - "duration": "16.61925050505051", - "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/" - }, - { - "duration": "14.9253668939394", - "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/" - }, - { - "duration": "16.73253023232323", - "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/" - }, - { - "duration": "17.52611996969697", - "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com" - }, - { - "duration": "30.24715939393939", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "19.17793015151515", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/" - }, - { - "duration": "146.7929597979798", - "name": "v8.browsing_mobile-future/browse:chrome:newtab" - }, - { - "duration": "52.477306323232305", - "name": "v8.browsing_mobile-future/browse:chrome:omnibox" - }, - { - "duration": "158.05751262626256", - "name": "v8.browsing_mobile-future/browse:media:facebook_photos" - }, - { - "duration": "86.89646531313133", - "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll" - }, - { - "duration": "132.51831900000005", - "name": "v8.browsing_mobile-future/browse:media:imgur" - }, - { - "duration": "9.438196855555557E-4", - "name": "v8.browsing_mobile-future/browse:media:youtube" - }, - { - "duration": "0.0012613455566666662", - "name": "v8.browsing_mobile-future/browse:news:cnn" - }, - { - "duration": "115.37527936363642", - "name": "v8.browsing_mobile-future/browse:news:cricbuzz" - }, - { - "duration": "2.597014106666667E-4", - "name": "v8.browsing_mobile-future/browse:news:globo" - }, - { - "duration": "90.47917367676766", - "name": "v8.browsing_mobile-future/browse:news:qq" - }, - { - "duration": "103.32026283838387", - "name": "v8.browsing_mobile-future/browse:news:reddit" - }, - { - "duration": "2.7879079200000004E-4", - "name": "v8.browsing_mobile-future/browse:news:toi" - }, - { - "duration": "92.65786173737375", - "name": "v8.browsing_mobile-future/browse:news:washingtonpost" - }, - { - "duration": "180.34606848484844", - "name": "v8.browsing_mobile-future/browse:shopping:amazon" - }, - { - "duration": "0.0012067635766666667", - "name": "v8.browsing_mobile-future/browse:shopping:avito" - }, - { - "duration": "4.884242999999999E-4", - "name": "v8.browsing_mobile-future/browse:shopping:flipkart" - }, - { - "duration": "9.663104993333333E-4", - "name": "v8.browsing_mobile-future/browse:shopping:lazada" - }, - { - "duration": "133.62747720202023", - "name": "v8.browsing_mobile-future/browse:social:facebook" - }, - { - "duration": "0.0011786302013333334", - "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll" - }, - { - "duration": "169.56490232323233", - "name": "v8.browsing_mobile-future/browse:social:instagram" - }, - { - "duration": "9.71237818888889E-4", - "name": "v8.browsing_mobile-future/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "0.0010667641899999999", - "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "88.0135880606061", - "name": "v8.browsing_mobile-future/browse:social:twitter" - }, - { - "duration": "0.0011911869113333333", - "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "90.29392606060604", - "name": "v8.browsing_mobile-future/browse:tools:maps" - }, - { - "duration": "150.06470383838382", - "name": "v8.browsing_mobile/browse:chrome:newtab" - }, - { - "duration": "54.07889719191921", - "name": "v8.browsing_mobile/browse:chrome:omnibox" - }, - { - "duration": "162.59746959595955", - "name": "v8.browsing_mobile/browse:media:facebook_photos" - }, - { - "duration": "88.07251865656566", - "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "134.4546121717172", - "name": "v8.browsing_mobile/browse:media:imgur" - }, - { - "duration": "8.64195817E-4", - "name": "v8.browsing_mobile/browse:media:youtube" - }, - { - "duration": "6.880026600000001E-4", - "name": "v8.browsing_mobile/browse:news:cnn" - }, - { - "duration": "118.00485893939393", - "name": "v8.browsing_mobile/browse:news:cricbuzz" - }, - { - "duration": "2.802151892307692E-4", - "name": "v8.browsing_mobile/browse:news:globo" - }, - { - "duration": "93.07734151515153", - "name": "v8.browsing_mobile/browse:news:qq" - }, - { - "duration": "109.77028254545453", - "name": "v8.browsing_mobile/browse:news:reddit" - }, - { - "duration": "2.7509836153846154E-4", - "name": "v8.browsing_mobile/browse:news:toi" - }, - { - "duration": "96.34806983838385", - "name": "v8.browsing_mobile/browse:news:washingtonpost" - }, - { - "duration": "184.5223194949495", - "name": "v8.browsing_mobile/browse:shopping:amazon" - }, - { - "duration": "8.973341730769232E-4", - "name": "v8.browsing_mobile/browse:shopping:avito" - }, - { - "duration": "4.4864874923076923E-4", - "name": "v8.browsing_mobile/browse:shopping:flipkart" - }, - { - "duration": "7.359614661538461E-4", - "name": "v8.browsing_mobile/browse:shopping:lazada" - }, - { - "duration": "136.9386156868687", - "name": "v8.browsing_mobile/browse:social:facebook" - }, - { - "duration": "9.95691006923077E-4", - "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "174.65320858585855", - "name": "v8.browsing_mobile/browse:social:instagram" - }, - { - "duration": "8.631706309999999E-4", - "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "0.0012045621819999999", - "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "91.83832190909092", - "name": "v8.browsing_mobile/browse:social:twitter" - }, - { - "duration": "7.01647536923077E-4", - "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "94.42155341414141", - "name": "v8.browsing_mobile/browse:tools:maps" - }, - { - "duration": "15.242968075757574", - "name": "wasm/AsmJsZenGarden" - }, - { - "duration": "0.0011331056956410258", - "name": "wasm/WasmSpaceBuggy" - }, - { - "duration": "15.24465491414141", - "name": "wasm/WasmStylizedRenderer" - }, - { - "duration": "15.330122737373733", - "name": "wasm/WasmSunTemple" - }, - { - "duration": "27.976230442760944", - "name": "wasm/WasmTanks" - }, - { - "duration": "15.47282452356902", - "name": "wasm/WasmZenGarden" - }, - { - "duration": "28.59426743434343", - "name": "webrtc/10s_datachannel_transfer" - }, - { - "duration": "36.38392025252526", - "name": "webrtc/canvas_capture_peer_connection" - }, - { - "duration": "46.898688020202", - "name": "webrtc/codec_constraints_h264" - }, - { - "duration": "46.83732043434342", - "name": "webrtc/codec_constraints_vp8" - }, - { - "duration": "46.76229864646462", - "name": "webrtc/codec_constraints_vp9" - }, - { - "duration": "31.79935216161616", - "name": "webrtc/hd_local_stream_10s" - }, - { - "duration": "53.127465505050516", - "name": "webrtc/multiple_peerconnections" - }, - { - "duration": "77.48114166666667", - "name": "webrtc/pause_play_peerconnections" - } -] \ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/android_pixel2_story_timing.json b/tools/perf/core/shard_maps/timing_data/android_pixel2_story_timing.json deleted file mode 100644 index 67ac46cf..0000000 --- a/tools/perf/core/shard_maps/timing_data/android_pixel2_story_timing.json +++ /dev/null
@@ -1,8014 +0,0 @@ -[ - { - "duration": "20.0", - "name": "blink_perf.bindings/append-child.html" - }, - { - "duration": "12.0", - "name": "blink_perf.bindings/create-element.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/document-implementation.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/dom-attribute-on-prototoype.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/first-child.html" - }, - { - "duration": "10.0", - "name": "blink_perf.bindings/gc-forest.html" - }, - { - "duration": "12.0", - "name": "blink_perf.bindings/gc-mini-tree.html" - }, - { - "duration": "25.0", - "name": "blink_perf.bindings/gc-tree.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/get-attribute-rare.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/get-attribute.html" - }, - { - "duration": "10.0", - "name": "blink_perf.bindings/get-element-by-id.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/get-elements-by-tag-name.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/id-getter.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/id-setter.html" - }, - { - "duration": "12.0", - "name": "blink_perf.bindings/indexed-getter.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/insert-before.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/named-property-enumerator.html" - }, - { - "duration": "25.0", - "name": "blink_perf.bindings/node-list-access.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/node-type.html" - }, - { - "duration": "6.0", - "name": "blink_perf.bindings/post-message.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/sequence-conversion-array.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html" - }, - { - "duration": "6.0", - "name": "blink_perf.bindings/serialize-array.html" - }, - { - "duration": "5.0", - "name": "blink_perf.bindings/serialize-long-string.html" - }, - { - "duration": "8.0", - "name": "blink_perf.bindings/serialize-map.html" - }, - { - "duration": "5.0", - "name": "blink_perf.bindings/serialize-nested-array.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/set-attribute-rare.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/set-attribute.html" - }, - { - "duration": "17.0", - "name": "blink_perf.bindings/structured-clone-json-deserialize.html" - }, - { - "duration": "17.0", - "name": "blink_perf.bindings/structured-clone-json-serialize.html" - }, - { - "duration": "8.0", - "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html" - }, - { - "duration": "8.0", - "name": "blink_perf.bindings/structured-clone-long-string-serialize.html" - }, - { - "duration": "12.0", - "name": "blink_perf.bindings/typed-array-construct-from-array.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/typed-array-construct-from-same-type.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/typed-array-construct-from-typed.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/typed-array-set-from-typed.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/undefined-first-child.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/undefined-get-element-by-id.html" - }, - { - "duration": "11.0", - "name": "blink_perf.bindings/undefined-id-getter.html" - }, - { - "duration": "20.0", - "name": "blink_perf.canvas/createImageBitmapFromImageData.html" - }, - { - "duration": "7.0", - "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "12.0", - "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "6.0", - "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html" - }, - { - "duration": "6.0", - "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "6.0", - "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "8.0", - "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "12.0", - "name": "blink_perf.canvas/drawimage-not-pixelaligned.html" - }, - { - "duration": "11.0", - "name": "blink_perf.canvas/drawimage.html" - }, - { - "duration": "11.0", - "name": "blink_perf.canvas/getImageData.html" - }, - { - "duration": "11.0", - "name": "blink_perf.canvas/getImageDataColorManaged.html" - }, - { - "duration": "11.0", - "name": "blink_perf.canvas/putImageData.html" - }, - { - "duration": "10.0", - "name": "blink_perf.canvas/toBlob_duration.html" - }, - { - "duration": "8.0", - "name": "blink_perf.canvas/toBlob_duration_jpeg.html" - }, - { - "duration": "5.0", - "name": "blink_perf.canvas/transferFromImageBitmap.html" - }, - { - "duration": "8.0", - "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html" - }, - { - "duration": "12.0", - "name": "blink_perf.canvas/upload-video-to-sub-texture.html" - }, - { - "duration": "5.0", - "name": "blink_perf.canvas/upload-video-to-texture.html" - }, - { - "duration": "6.0", - "name": "blink_perf.canvas/upload-webgl-to-texture.html" - }, - { - "duration": "24.0", - "name": "blink_perf.css/AttributeDescendantSelector.html" - }, - { - "duration": "12.0", - "name": "blink_perf.css/CSSPropertySetterGetter.html" - }, - { - "duration": "12.0", - "name": "blink_perf.css/CSSPropertySetterGetterMethods.html" - }, - { - "duration": "11.0", - "name": "blink_perf.css/CSSPropertyUpdateValue.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleChildClassSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleChildElementSelectors.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleElementSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "13.0", - "name": "blink_perf.css/ChangeStyleShallowTree.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleSingleClassSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html" - }, - { - "duration": "10.0", - "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleUniversalSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html" - }, - { - "duration": "9.0", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "15.0", - "name": "blink_perf.css/ClassDescendantSelector.html" - }, - { - "duration": "13.0", - "name": "blink_perf.css/ClassInvalidation.html" - }, - { - "duration": "15.0", - "name": "blink_perf.css/FocusUpdate.html" - }, - { - "duration": "10.0", - "name": "blink_perf.css/LoadBootstrapBlog.html" - }, - { - "duration": "10.0", - "name": "blink_perf.css/LoadMaterializeStarterPage.html" - }, - { - "duration": "11.0", - "name": "blink_perf.css/LoadSemanticPageExample.html" - }, - { - "duration": "12.0", - "name": "blink_perf.css/PseudoClassSelectors.html" - }, - { - "duration": "12.0", - "name": "blink_perf.css/SelectorCountScaling.html" - }, - { - "duration": "21.0", - "name": "blink_perf.dom/addRange.html" - }, - { - "duration": "6.0", - "name": "blink_perf.dom/delete-in-password-field.html" - }, - { - "duration": "13.0", - "name": "blink_perf.dom/div-editable.html" - }, - { - "duration": "5.0", - "name": "blink_perf.dom/inner_html_with_selection.html" - }, - { - "duration": "13.0", - "name": "blink_perf.dom/long-sibling-list.html" - }, - { - "duration": "8.0", - "name": "blink_perf.dom/modify-element-classname.html" - }, - { - "duration": "7.0", - "name": "blink_perf.dom/modify-element-id.html" - }, - { - "duration": "7.0", - "name": "blink_perf.dom/modify-element-title.html" - }, - { - "duration": "5.0", - "name": "blink_perf.dom/move-down-with-hidden-elements.html" - }, - { - "duration": "5.0", - "name": "blink_perf.dom/move-up-with-hidden-elements.html" - }, - { - "duration": "5.0", - "name": "blink_perf.dom/remove_child_with_selection.html" - }, - { - "duration": "12.0", - "name": "blink_perf.dom/select-multiple-add.html" - }, - { - "duration": "12.0", - "name": "blink_perf.dom/select-single-add.html" - }, - { - "duration": "11.0", - "name": "blink_perf.dom/select-single-remove.html" - }, - { - "duration": "11.0", - "name": "blink_perf.dom/textarea-dom.html" - }, - { - "duration": "10.0", - "name": "blink_perf.dom/textarea-edit.html" - }, - { - "duration": "29.0", - "name": "blink_perf.events/EventsDispatching.html" - }, - { - "duration": "12.0", - "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html" - }, - { - "duration": "24.0", - "name": "blink_perf.events/EventsDispatchingInShadowTrees.html" - }, - { - "duration": "22.0", - "name": "blink_perf.events/hit-test-lots-of-layers.html" - }, - { - "duration": "58.0", - "name": "blink_perf.image_decoder/decode-gif.html" - }, - { - "duration": "19.0", - "name": "blink_perf.image_decoder/decode-jpeg.html" - }, - { - "duration": "54.0", - "name": "blink_perf.image_decoder/decode-lossless-webp.html" - }, - { - "duration": "12.0", - "name": "blink_perf.image_decoder/decode-lossy-webp.html" - }, - { - "duration": "34.0", - "name": "blink_perf.image_decoder/decode-png-palette-opaque.html" - }, - { - "duration": "18.0", - "name": "blink_perf.image_decoder/decode-png-palette.html" - }, - { - "duration": "57.0", - "name": "blink_perf.image_decoder/decode-png.html" - }, - { - "duration": "23.0", - "name": "blink_perf.layout/ArabicLineLayout.html" - }, - { - "duration": "5.0", - "name": "blink_perf.layout/Shapes/MultipleShapes.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/SimpleTextPathLineLayout.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/add-remove-inline-floats.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/attach-inlines-2.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/attach-inlines.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/auto-grid-lots-of-data.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/chapter-reflow-once-random.html" - }, - { - "duration": "13.0", - "name": "blink_perf.layout/chapter-reflow-once.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/chapter-reflow-thrice.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/chapter-reflow-twice.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/chapter-reflow.html" - }, - { - "duration": "7.0", - "name": "blink_perf.layout/character_fallback.html" - }, - { - "duration": "5.0", - "name": "blink_perf.layout/character_fallback_aat.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/fixed-grid-lots-of-data.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/flexbox-column-nowrap.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/flexbox-column-wrap.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/flexbox-lots-of-data.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/flexbox-row-nowrap.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/flexbox-row-wrap.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/flexbox-with-stretch-layout.html" - }, - { - "duration": "20.0", - "name": "blink_perf.layout/floats_100_100.html" - }, - { - "duration": "20.0", - "name": "blink_perf.layout/floats_100_100_nested.html" - }, - { - "duration": "13.0", - "name": "blink_perf.layout/floats_10_1000.html" - }, - { - "duration": "9.0", - "name": "blink_perf.layout/floats_20_100.html" - }, - { - "duration": "10.0", - "name": "blink_perf.layout/floats_20_100_nested.html" - }, - { - "duration": "7.0", - "name": "blink_perf.layout/floats_2_100.html" - }, - { - "duration": "7.0", - "name": "blink_perf.layout/floats_2_100_nested.html" - }, - { - "duration": "10.0", - "name": "blink_perf.layout/floats_50_100.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/floats_50_100_nested.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/hindi-line-layout.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/large-spanning-grid-item.html" - }, - { - "duration": "16.0", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html" - }, - { - "duration": "16.0", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html" - }, - { - "duration": "16.0", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html" - }, - { - "duration": "7.0", - "name": "blink_perf.layout/latin-complex-text.html" - }, - { - "duration": "55.0", - "name": "blink_perf.layout/latin-ebook-resize.html" - }, - { - "duration": "12.0", - "name": "blink_perf.layout/latin-ebook.html" - }, - { - "duration": "6.0", - "name": "blink_perf.layout/layers_overlap_2d.html" - }, - { - "duration": "7.0", - "name": "blink_perf.layout/layers_overlap_3d.html" - }, - { - "duration": "17.0", - "name": "blink_perf.layout/line-layout-line-height.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/line-layout-repeat-append.html" - }, - { - "duration": "10.0", - "name": "blink_perf.layout/line-layout.html" - }, - { - "duration": "5.0", - "name": "blink_perf.layout/long-line-nowrap-collapse.html" - }, - { - "duration": "6.0", - "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html" - }, - { - "duration": "9.0", - "name": "blink_perf.layout/long-line-nowrap.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/multicol/deeply-nested-tables.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html" - }, - { - "duration": "10.0", - "name": "blink_perf.layout/multicol/lots-of-text-autofill.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/multicol/lots-of-text-balanced.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/multicol/tall-content-short-columns.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/nested-grid.html" - }, - { - "duration": "11.0", - "name": "blink_perf.layout/nested-percent-height-tables.html" - }, - { - "duration": "91.0", - "name": "blink_perf.layout/subtree-detaching.html" - }, - { - "duration": "7.0", - "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html" - }, - { - "duration": "9.0", - "name": "blink_perf.layout/word-break-break-all.html" - }, - { - "duration": "9.0", - "name": "blink_perf.layout/word-break-break-word.html" - }, - { - "duration": "9.0", - "name": "blink_perf.layout/word-wrap-break-word.html" - }, - { - "duration": "21.0", - "name": "blink_perf.owp_storage/blob-perf-files.html" - }, - { - "duration": "14.0", - "name": "blink_perf.owp_storage/blob-perf-ipc.html" - }, - { - "duration": "11.0", - "name": "blink_perf.owp_storage/blob-perf-shm.html" - }, - { - "duration": "14.0", - "name": "blink_perf.owp_storage/blob-perf-tiny.html" - }, - { - "duration": "14.0", - "name": "blink_perf.owp_storage/idb-load-docs.html" - }, - { - "duration": "22.0", - "name": "blink_perf.paint/appending-text.html" - }, - { - "duration": "19.0", - "name": "blink_perf.paint/color-changes.html" - }, - { - "duration": "17.0", - "name": "blink_perf.paint/complex-content-slow-scroll.html" - }, - { - "duration": "19.0", - "name": "blink_perf.paint/containment-resize.html" - }, - { - "duration": "18.0", - "name": "blink_perf.paint/fixed-and-many-layers-scroll.html" - }, - { - "duration": "20.0", - "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html" - }, - { - "duration": "16.0", - "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html" - }, - { - "duration": "21.0", - "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html" - }, - { - "duration": "17.0", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html" - }, - { - "duration": "20.0", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html" - }, - { - "duration": "14.0", - "name": "blink_perf.paint/large-table-collapsed-border-change.html" - }, - { - "duration": "20.0", - "name": "blink_perf.paint/large-table-repaint.html" - }, - { - "duration": "14.0", - "name": "blink_perf.paint/move-text-with-mask.html" - }, - { - "duration": "18.0", - "name": "blink_perf.paint/paint-offset-changes.html" - }, - { - "duration": "21.0", - "name": "blink_perf.paint/transform-changes.html" - }, - { - "duration": "20.0", - "name": "blink_perf.parser/css-parser-yui.html" - }, - { - "duration": "18.0", - "name": "blink_perf.parser/html-parser-threaded.html" - }, - { - "duration": "22.0", - "name": "blink_perf.parser/html-parser.html" - }, - { - "duration": "71.0", - "name": "blink_perf.parser/html5-full-render.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/iframe-append-remove.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/innerHTML-setter-siblings.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/innerHTML-setter.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/query-selector-all-attribute-complex.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/query-selector-all-attribute.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/query-selector-all-class-deep.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-all-class-first.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-all-class-last.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/query-selector-all-class.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/query-selector-all-deep.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-all-first.html" - }, - { - "duration": "13.0", - "name": "blink_perf.parser/query-selector-all-id-deep.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-all-id-first.html" - }, - { - "duration": "13.0", - "name": "blink_perf.parser/query-selector-all-id-last.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-all-last.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/query-selector-deep.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-first.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-id-deep.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-id-last.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/query-selector-last.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/simple-url.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/textarea-parsing.html" - }, - { - "duration": "11.0", - "name": "blink_perf.parser/tiny-innerHTML.html" - }, - { - "duration": "13.0", - "name": "blink_perf.parser/url-parser.html" - }, - { - "duration": "12.0", - "name": "blink_perf.parser/xml-parser.html" - }, - { - "duration": "15.0", - "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html" - }, - { - "duration": "6.0", - "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html" - }, - { - "duration": "6.0", - "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/shadow-style-share.html" - }, - { - "duration": "6.0", - "name": "blink_perf.shadow_dom/style-sheet-insert.html" - }, - { - "duration": "6.0", - "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html" - }, - { - "duration": "7.0", - "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html" - }, - { - "duration": "11.0", - "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html" - }, - { - "duration": "11.0", - "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html" - }, - { - "duration": "6.0", - "name": "blink_perf.shadow_dom/v0-content-reprojection.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html" - }, - { - "duration": "6.0", - "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html" - }, - { - "duration": "24.0", - "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-distribution.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-host-child-append.html" - }, - { - "duration": "24.0", - "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html" - }, - { - "duration": "54.0", - "name": "blink_perf.shadow_dom/v1-large-deep-layout.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html" - }, - { - "duration": "6.0", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-slot-append.html" - }, - { - "duration": "7.0", - "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html" - }, - { - "duration": "7.0", - "name": "blink_perf.shadow_dom/v1-small-deep-layout.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html" - }, - { - "duration": "5.0", - "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html" - }, - { - "duration": "14.0", - "name": "blink_perf.svg/AzLizardBenjiPark.html" - }, - { - "duration": "8.0", - "name": "blink_perf.svg/Bamboo.html" - }, - { - "duration": "6.0", - "name": "blink_perf.svg/Cactus.html" - }, - { - "duration": "6.0", - "name": "blink_perf.svg/Cowboy.html" - }, - { - "duration": "6.0", - "name": "blink_perf.svg/Cowboy_transform.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/CrawFishGanson.html" - }, - { - "duration": "6.0", - "name": "blink_perf.svg/Debian.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/DropsOnABlade.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/FlowerFromMyGarden.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/FoodLeifLodahl.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/France.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html" - }, - { - "duration": "6.0", - "name": "blink_perf.svg/GearFlowers.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/HarveyRayner.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/HereGear.html" - }, - { - "duration": "9.0", - "name": "blink_perf.svg/MtSaintHelens.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/Samurai.html" - }, - { - "duration": "64.0", - "name": "blink_perf.svg/SierpinskiCarpet.html" - }, - { - "duration": "6.0", - "name": "blink_perf.svg/SvgCubics.html" - }, - { - "duration": "7.0", - "name": "blink_perf.svg/SvgHitTesting.html" - }, - { - "duration": "11.0", - "name": "blink_perf.svg/SvgNestedUse.html" - }, - { - "duration": "5.0", - "name": "blink_perf.svg/UnderTheSee.html" - }, - { - "duration": "6.0", - "name": "blink_perf.svg/WorldIso.html" - }, - { - "duration": "8.0", - "name": "blink_perf.svg/Worldcup.html" - }, - { - "duration": "48.0", - "name": "dromaeo/http://dromaeo.com?dom-attr" - }, - { - "duration": "36.0", - "name": "dromaeo/http://dromaeo.com?dom-modify" - }, - { - "duration": "50.0", - "name": "dromaeo/http://dromaeo.com?dom-query" - }, - { - "duration": "31.0", - "name": "dromaeo/http://dromaeo.com?dom-traverse" - }, - { - "duration": "19.0", - "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html" - }, - { - "duration": "18.0", - "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html" - }, - { - "duration": "12.0", - "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html" - }, - { - "duration": "282.0", - "name": "jetstream/http://browserbench.org/JetStream/" - }, - { - "duration": "59.0", - "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html" - }, - { - "duration": "15.0", - "name": "loading.mobile/58Pic" - }, - { - "duration": "134.0", - "name": "loading.mobile/58Pic_3g" - }, - { - "duration": "20.0", - "name": "loading.mobile/Amazon" - }, - { - "duration": "205.0", - "name": "loading.mobile/Amazon_3g" - }, - { - "duration": "23.0", - "name": "loading.mobile/BOLNoticias" - }, - { - "duration": "270.0", - "name": "loading.mobile/BOLNoticias_3g" - }, - { - "duration": "20.0", - "name": "loading.mobile/Baidu" - }, - { - "duration": "161.0", - "name": "loading.mobile/Baidu_3g" - }, - { - "duration": "20.0", - "name": "loading.mobile/Bradesco" - }, - { - "duration": "94.0", - "name": "loading.mobile/Bradesco_3g" - }, - { - "duration": "19.0", - "name": "loading.mobile/Dailymotion" - }, - { - "duration": "66.0", - "name": "loading.mobile/Dailymotion_3g" - }, - { - "duration": "24.0", - "name": "loading.mobile/Dawn" - }, - { - "duration": "73.0", - "name": "loading.mobile/Dawn_3g" - }, - { - "duration": "26.0", - "name": "loading.mobile/DevOpera" - }, - { - "duration": "17.0", - "name": "loading.mobile/DevOpera_cold" - }, - { - "duration": "132.0", - "name": "loading.mobile/DevOpera_cold_3g" - }, - { - "duration": "24.0", - "name": "loading.mobile/DevOpera_hot" - }, - { - "duration": "30.0", - "name": "loading.mobile/DevOpera_hot_3g" - }, - { - "duration": "20.0", - "name": "loading.mobile/DevOpera_warm" - }, - { - "duration": "26.0", - "name": "loading.mobile/DevOpera_warm_3g" - }, - { - "duration": "21.0", - "name": "loading.mobile/Dramaq" - }, - { - "duration": "153.0", - "name": "loading.mobile/Dramaq_3g" - }, - { - "duration": "16.0", - "name": "loading.mobile/EnquiryIndianRail" - }, - { - "duration": "115.0", - "name": "loading.mobile/EnquiryIndianRail_3g" - }, - { - "duration": "21.0", - "name": "loading.mobile/Facebook" - }, - { - "duration": "218.0", - "name": "loading.mobile/Facebook_3g" - }, - { - "duration": "33.0", - "name": "loading.mobile/FlipBoard" - }, - { - "duration": "18.0", - "name": "loading.mobile/FlipBoard_cold" - }, - { - "duration": "353.0", - "name": "loading.mobile/FlipBoard_cold_3g" - }, - { - "duration": "27.0", - "name": "loading.mobile/FlipBoard_hot" - }, - { - "duration": "55.0", - "name": "loading.mobile/FlipBoard_hot_3g" - }, - { - "duration": "23.0", - "name": "loading.mobile/FlipBoard_warm" - }, - { - "duration": "81.0", - "name": "loading.mobile/FlipBoard_warm_3g" - }, - { - "duration": "34.0", - "name": "loading.mobile/FlipKart" - }, - { - "duration": "21.0", - "name": "loading.mobile/FlipKart_cold" - }, - { - "duration": "63.0", - "name": "loading.mobile/FlipKart_cold_3g" - }, - { - "duration": "32.0", - "name": "loading.mobile/FlipKart_hot" - }, - { - "duration": "29.0", - "name": "loading.mobile/FlipKart_hot_3g" - }, - { - "duration": "25.0", - "name": "loading.mobile/FlipKart_warm" - }, - { - "duration": "24.0", - "name": "loading.mobile/FlipKart_warm_3g" - }, - { - "duration": "18.0", - "name": "loading.mobile/FranceTVInfo" - }, - { - "duration": "213.0", - "name": "loading.mobile/FranceTVInfo_3g" - }, - { - "duration": "143.0", - "name": "loading.mobile/G1_3g" - }, - { - "duration": "22.0", - "name": "loading.mobile/GSShop" - }, - { - "duration": "147.0", - "name": "loading.mobile/GSShop_3g" - }, - { - "duration": "15.0", - "name": "loading.mobile/GoogleBrazil" - }, - { - "duration": "207.0", - "name": "loading.mobile/GoogleBrazil_3g" - }, - { - "duration": "17.0", - "name": "loading.mobile/GoogleIndia" - }, - { - "duration": "88.0", - "name": "loading.mobile/GoogleIndia_3g" - }, - { - "duration": "17.0", - "name": "loading.mobile/GoogleIndonesia" - }, - { - "duration": "191.0", - "name": "loading.mobile/GoogleIndonesia_3g" - }, - { - "duration": "25.0", - "name": "loading.mobile/GoogleRedirectToGoogleJapan" - }, - { - "duration": "268.0", - "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g" - }, - { - "duration": "20.0", - "name": "loading.mobile/Hongkiat" - }, - { - "duration": "232.0", - "name": "loading.mobile/Hongkiat_3g" - }, - { - "duration": "22.0", - "name": "loading.mobile/KapanLagi" - }, - { - "duration": "277.0", - "name": "loading.mobile/KapanLagi_3g" - }, - { - "duration": "26.0", - "name": "loading.mobile/Kaskus" - }, - { - "duration": "104.0", - "name": "loading.mobile/Kaskus_3g" - }, - { - "duration": "19.0", - "name": "loading.mobile/LocalMoxie" - }, - { - "duration": "69.0", - "name": "loading.mobile/LocalMoxie_3g" - }, - { - "duration": "16.0", - "name": "loading.mobile/Locanto" - }, - { - "duration": "78.0", - "name": "loading.mobile/Locanto_3g" - }, - { - "duration": "18.0", - "name": "loading.mobile/OLX" - }, - { - "duration": "228.0", - "name": "loading.mobile/OLX_3g" - }, - { - "duration": "17.0", - "name": "loading.mobile/QQNews" - }, - { - "duration": "223.0", - "name": "loading.mobile/QQNews_3g" - }, - { - "duration": "17.0", - "name": "loading.mobile/SlideShare" - }, - { - "duration": "193.0", - "name": "loading.mobile/SlideShare_3g" - }, - { - "duration": "21.0", - "name": "loading.mobile/Suumo" - }, - { - "duration": "16.0", - "name": "loading.mobile/Suumo_cold" - }, - { - "duration": "32.0", - "name": "loading.mobile/Suumo_cold_3g" - }, - { - "duration": "21.0", - "name": "loading.mobile/Suumo_hot" - }, - { - "duration": "28.0", - "name": "loading.mobile/Suumo_hot_3g" - }, - { - "duration": "18.0", - "name": "loading.mobile/Suumo_warm" - }, - { - "duration": "24.0", - "name": "loading.mobile/Suumo_warm_3g" - }, - { - "duration": "18.0", - "name": "loading.mobile/Thairath" - }, - { - "duration": "105.0", - "name": "loading.mobile/Thairath_3g" - }, - { - "duration": "24.0", - "name": "loading.mobile/TheStar" - }, - { - "duration": "86.0", - "name": "loading.mobile/TheStar_3g" - }, - { - "duration": "24.0", - "name": "loading.mobile/TribunNews" - }, - { - "duration": "106.0", - "name": "loading.mobile/TribunNews_3g" - }, - { - "duration": "17.0", - "name": "loading.mobile/Twitter" - }, - { - "duration": "122.0", - "name": "loading.mobile/Twitter_3g" - }, - { - "duration": "27.0", - "name": "loading.mobile/VoiceMemos" - }, - { - "duration": "17.0", - "name": "loading.mobile/VoiceMemos_cold" - }, - { - "duration": "152.0", - "name": "loading.mobile/VoiceMemos_cold_3g" - }, - { - "duration": "24.0", - "name": "loading.mobile/VoiceMemos_hot" - }, - { - "duration": "29.0", - "name": "loading.mobile/VoiceMemos_hot_3g" - }, - { - "duration": "20.0", - "name": "loading.mobile/VoiceMemos_warm" - }, - { - "duration": "26.0", - "name": "loading.mobile/VoiceMemos_warm_3g" - }, - { - "duration": "15.0", - "name": "loading.mobile/Wikipedia" - }, - { - "duration": "165.0", - "name": "loading.mobile/Wikipedia_3g" - }, - { - "duration": "24.0", - "name": "loading.mobile/YahooNews" - }, - { - "duration": "72.0", - "name": "loading.mobile/YahooNews_3g" - }, - { - "duration": "17.0", - "name": "loading.mobile/Youtube" - }, - { - "duration": "85.0", - "name": "loading.mobile/Youtube_3g" - }, - { - "duration": "21.0", - "name": "media.mobile/mse.html?media=aac_audio.mp4" - }, - { - "duration": "23.0", - "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4" - }, - { - "duration": "23.0", - "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true" - }, - { - "duration": "22.0", - "name": "media.mobile/mse.html?media=h264_video.mp4" - }, - { - "duration": "34.0", - "name": "media.mobile/video.html?src=crowd.ogg&type=audio" - }, - { - "duration": "32.0", - "name": "media.mobile/video.html?src=crowd1080_vp9.webm" - }, - { - "duration": "19.0", - "name": "media.mobile/video.html?src=crowd1080_vp9.webm&seek" - }, - { - "duration": "31.0", - "name": "media.mobile/video.html?src=crowd720_vp9.webm" - }, - { - "duration": "34.0", - "name": "media.mobile/video.html?src=tulip2.m4a&type=audio" - }, - { - "duration": "34.0", - "name": "media.mobile/video.html?src=tulip2.mp3&type=audio" - }, - { - "duration": "14.0", - "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek" - }, - { - "duration": "43.0", - "name": "media.mobile/video.html?src=tulip2.mp4" - }, - { - "duration": "43.0", - "name": "media.mobile/video.html?src=tulip2.mp4&busyjs" - }, - { - "duration": "17.0", - "name": "media.mobile/video.html?src=tulip2.mp4&seek" - }, - { - "duration": "35.0", - "name": "media.mobile/video.html?src=tulip2.ogg&type=audio" - }, - { - "duration": "14.0", - "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek" - }, - { - "duration": "44.0", - "name": "media.mobile/video.html?src=tulip2.vp9.webm" - }, - { - "duration": "28.0", - "name": "media.mobile/video.html?src=tulip2.vp9.webm&background" - }, - { - "duration": "19.0", - "name": "media.mobile/video.html?src=tulip2.vp9.webm&seek" - }, - { - "duration": "67.0", - "name": "media.mobile/video.html?src=tulip2.vp9.webm_Regular-3G" - }, - { - "duration": "35.0", - "name": "media.mobile/video.html?src=tulip2.wav&type=audio" - }, - { - "duration": "15.0", - "name": "media.mobile/video.html?src=tulip2.wav&type=audio&seek" - }, - { - "duration": "314.0", - "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "267.0", - "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "20.0", - "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "19.0", - "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "20.0", - "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science" - }, - { - "duration": "19.0", - "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "20.0", - "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "19.0", - "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google" - }, - { - "duration": "19.0", - "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "20.0", - "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna" - }, - { - "duration": "19.0", - "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "20.0", - "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "22.0", - "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "21.0", - "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "22.0", - "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science" - }, - { - "duration": "21.0", - "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "21.0", - "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "22.0", - "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google" - }, - { - "duration": "22.0", - "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "21.0", - "name": "memory.top_10_mobile/https_m_facebook_com_rihanna" - }, - { - "duration": "22.0", - "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "23.0", - "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "61.0", - "name": "octane/http://chromium.github.io/octane/index.html?auto=1" - }, - { - "duration": "21.0", - "name": "oortonline_tbmv2/http://oortonline.gl/#run" - }, - { - "duration": "26.0", - "name": "power.idle_platform/IdleStory_10s" - }, - { - "duration": "136.0", - "name": "power.idle_platform/IdleStory_120s" - }, - { - "duration": "75.0", - "name": "power.idle_platform/IdleStory_60s" - }, - { - "duration": "63.0", - "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom" - }, - { - "duration": "65.0", - "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180" - }, - { - "duration": "57.0", - "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404" - }, - { - "duration": "68.0", - "name": "power.typical_10_mobile/http://m.facebook.com/barackobama" - }, - { - "duration": "63.0", - "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486" - }, - { - "duration": "62.0", - "name": "power.typical_10_mobile/http://m.ynet.co.il" - }, - { - "duration": "63.0", - "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/" - }, - { - "duration": "58.0", - "name": "power.typical_10_mobile/http://wapbaike.baidu.com/" - }, - { - "duration": "59.0", - "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html" - }, - { - "duration": "64.0", - "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html" - }, - { - "duration": "63.0", - "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif" - }, - { - "duration": "16.0", - "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html" - }, - { - "duration": "22.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html" - }, - { - "duration": "12.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html" - }, - { - "duration": "15.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html" - }, - { - "duration": "15.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html" - }, - { - "duration": "10.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html" - }, - { - "duration": "25.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html" - }, - { - "duration": "13.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html" - }, - { - "duration": "22.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html" - }, - { - "duration": "18.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html" - }, - { - "duration": "15.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html" - }, - { - "duration": "20.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html" - }, - { - "duration": "16.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html" - }, - { - "duration": "22.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html" - }, - { - "duration": "12.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html" - }, - { - "duration": "9.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html" - }, - { - "duration": "30.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html" - }, - { - "duration": "22.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html" - }, - { - "duration": "15.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html" - }, - { - "duration": "12.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html" - }, - { - "duration": "12.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html" - }, - { - "duration": "29.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html" - }, - { - "duration": "130.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html" - }, - { - "duration": "87.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html" - }, - { - "duration": "30.0", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html" - }, - { - "duration": "48.0", - "name": "rendering.mobile/accu_weather_2018" - }, - { - "duration": "36.0", - "name": "rendering.mobile/accu_weather_2018_desktop_gpu_raster" - }, - { - "duration": "34.0", - "name": "rendering.mobile/accu_weather_desktop_gpu_raster_2018" - }, - { - "duration": "37.0", - "name": "rendering.mobile/amazon_2018" - }, - { - "duration": "38.0", - "name": "rendering.mobile/amazon_2018_desktop_gpu_raster" - }, - { - "duration": "36.0", - "name": "rendering.mobile/amazon_desktop_gpu_raster_2018" - }, - { - "duration": "33.0", - "name": "rendering.mobile/amazon_mobile_2018" - }, - { - "duration": "28.0", - "name": "rendering.mobile/amazon_mobile_sync_scroll_2018" - }, - { - "duration": "29.0", - "name": "rendering.mobile/amazon_pinch" - }, - { - "duration": "26.0", - "name": "rendering.mobile/amazon_pinch_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/analog_clock_svg" - }, - { - "duration": "32.0", - "name": "rendering.mobile/androidpolice_mobile" - }, - { - "duration": "59.0", - "name": "rendering.mobile/androidpolice_mobile_2018" - }, - { - "duration": "29.0", - "name": "rendering.mobile/androidpolice_mobile_sync_scroll" - }, - { - "duration": "60.0", - "name": "rendering.mobile/androidpolice_mobile_sync_scroll_2018" - }, - { - "duration": "7.0", - "name": "rendering.mobile/animometer_webgl" - }, - { - "duration": "7.0", - "name": "rendering.mobile/aquarium" - }, - { - "duration": "38.0", - "name": "rendering.mobile/background_color_animation" - }, - { - "duration": "28.0", - "name": "rendering.mobile/background_color_animation_with_gradient" - }, - { - "duration": "20.0", - "name": "rendering.mobile/baidu_mobile" - }, - { - "duration": "32.0", - "name": "rendering.mobile/baidu_mobile_2018" - }, - { - "duration": "18.0", - "name": "rendering.mobile/baidu_mobile_sync_scroll" - }, - { - "duration": "24.0", - "name": "rendering.mobile/baidu_mobile_sync_scroll_2018" - }, - { - "duration": "28.0", - "name": "rendering.mobile/balls_css_key_frame_animations" - }, - { - "duration": "31.0", - "name": "rendering.mobile/balls_css_transition_2_properties" - }, - { - "duration": "32.0", - "name": "rendering.mobile/balls_css_transition_40_properties" - }, - { - "duration": "31.0", - "name": "rendering.mobile/balls_css_transition_all_properties" - }, - { - "duration": "28.0", - "name": "rendering.mobile/balls_javascript_canvas" - }, - { - "duration": "27.0", - "name": "rendering.mobile/balls_javascript_css" - }, - { - "duration": "37.0", - "name": "rendering.mobile/balls_svg_animations" - }, - { - "duration": "36.0", - "name": "rendering.mobile/basic_stream" - }, - { - "duration": "19.0", - "name": "rendering.mobile/bing_mobile" - }, - { - "duration": "41.0", - "name": "rendering.mobile/bing_mobile_2018" - }, - { - "duration": "17.0", - "name": "rendering.mobile/bing_mobile_sync_scroll" - }, - { - "duration": "36.0", - "name": "rendering.mobile/bing_mobile_sync_scroll_2018" - }, - { - "duration": "6.0", - "name": "rendering.mobile/blob" - }, - { - "duration": "38.0", - "name": "rendering.mobile/blogspot" - }, - { - "duration": "29.0", - "name": "rendering.mobile/blogspot_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/blogspot_2018_desktop_gpu_raster" - }, - { - "duration": "36.0", - "name": "rendering.mobile/blogspot_desktop_gpu_raster" - }, - { - "duration": "24.0", - "name": "rendering.mobile/blogspot_desktop_gpu_raster_2018" - }, - { - "duration": "19.0", - "name": "rendering.mobile/blogspot_mobile" - }, - { - "duration": "30.0", - "name": "rendering.mobile/blogspot_mobile_2018" - }, - { - "duration": "17.0", - "name": "rendering.mobile/blogspot_mobile_sync_scroll" - }, - { - "duration": "24.0", - "name": "rendering.mobile/blogspot_mobile_sync_scroll_2018" - }, - { - "duration": "40.0", - "name": "rendering.mobile/boingboing_mobile" - }, - { - "duration": "36.0", - "name": "rendering.mobile/boingboing_mobile_2018" - }, - { - "duration": "28.0", - "name": "rendering.mobile/booking.com" - }, - { - "duration": "36.0", - "name": "rendering.mobile/booking.com_2018" - }, - { - "duration": "31.0", - "name": "rendering.mobile/booking.com_2018_desktop_gpu_raster" - }, - { - "duration": "26.0", - "name": "rendering.mobile/booking.com_desktop_gpu_raster" - }, - { - "duration": "31.0", - "name": "rendering.mobile/booking.com_desktop_gpu_raster_2018" - }, - { - "duration": "19.0", - "name": "rendering.mobile/booking.com_mobile" - }, - { - "duration": "27.0", - "name": "rendering.mobile/booking.com_mobile_2018" - }, - { - "duration": "16.0", - "name": "rendering.mobile/booking.com_mobile_sync_scroll" - }, - { - "duration": "20.0", - "name": "rendering.mobile/booking.com_mobile_sync_scroll_2018" - }, - { - "duration": "32.0", - "name": "rendering.mobile/booking_pinch" - }, - { - "duration": "29.0", - "name": "rendering.mobile/booking_pinch_desktop_gpu_raster" - }, - { - "duration": "23.0", - "name": "rendering.mobile/bouncing_balls_15" - }, - { - "duration": "21.0", - "name": "rendering.mobile/bouncing_balls_shadow" - }, - { - "duration": "20.0", - "name": "rendering.mobile/bouncing_clipped_rectangles" - }, - { - "duration": "21.0", - "name": "rendering.mobile/bouncing_gradient_circles" - }, - { - "duration": "18.0", - "name": "rendering.mobile/bouncing_png_images" - }, - { - "duration": "29.0", - "name": "rendering.mobile/bouncing_svg_images" - }, - { - "duration": "27.0", - "name": "rendering.mobile/canvas_05000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "rendering.mobile/canvas_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/canvas_10000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "rendering.mobile/canvas_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/canvas_15000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "rendering.mobile/canvas_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/canvas_20000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "rendering.mobile/canvas_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/canvas_30000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "rendering.mobile/canvas_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "26.0", - "name": "rendering.mobile/canvas_40000_pixels_per_second" - }, - { - "duration": "26.0", - "name": "rendering.mobile/canvas_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "24.0", - "name": "rendering.mobile/canvas_50000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "rendering.mobile/canvas_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "23.0", - "name": "rendering.mobile/canvas_60000_pixels_per_second" - }, - { - "duration": "21.0", - "name": "rendering.mobile/canvas_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "21.0", - "name": "rendering.mobile/canvas_75000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "rendering.mobile/canvas_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/canvas_90000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "rendering.mobile/canvas_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "24.0", - "name": "rendering.mobile/canvas_animation_no_clear" - }, - { - "duration": "20.0", - "name": "rendering.mobile/canvas_arcs" - }, - { - "duration": "20.0", - "name": "rendering.mobile/canvas_font_cycler" - }, - { - "duration": "21.0", - "name": "rendering.mobile/canvas_lines" - }, - { - "duration": "22.0", - "name": "rendering.mobile/canvas_to_blob" - }, - { - "duration": "30.0", - "name": "rendering.mobile/capitolvolkswagen_mobile" - }, - { - "duration": "45.0", - "name": "rendering.mobile/capitolvolkswagen_mobile_2018" - }, - { - "duration": "29.0", - "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll" - }, - { - "duration": "45.0", - "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll_2018" - }, - { - "duration": "23.0", - "name": "rendering.mobile/card_expansion" - }, - { - "duration": "25.0", - "name": "rendering.mobile/card_expansion_animated" - }, - { - "duration": "25.0", - "name": "rendering.mobile/card_expansion_images_text" - }, - { - "duration": "22.0", - "name": "rendering.mobile/card_flying" - }, - { - "duration": "15.0", - "name": "rendering.mobile/cats_unscaled" - }, - { - "duration": "14.0", - "name": "rendering.mobile/cats_viewport_width" - }, - { - "duration": "33.0", - "name": "rendering.mobile/cc_poster_circle" - }, - { - "duration": "34.0", - "name": "rendering.mobile/cc_scroll_200_layer_grid" - }, - { - "duration": "34.0", - "name": "rendering.mobile/cc_scroll_text_only" - }, - { - "duration": "27.0", - "name": "rendering.mobile/chip_tune" - }, - { - "duration": "33.0", - "name": "rendering.mobile/cnn_2018" - }, - { - "duration": "30.0", - "name": "rendering.mobile/cnn_2018_desktop_gpu_raster" - }, - { - "duration": "47.0", - "name": "rendering.mobile/cnn_article_mobile" - }, - { - "duration": "43.0", - "name": "rendering.mobile/cnn_article_mobile_2018" - }, - { - "duration": "45.0", - "name": "rendering.mobile/cnn_article_mobile_sync_scroll" - }, - { - "duration": "37.0", - "name": "rendering.mobile/cnn_article_mobile_sync_scroll_2018" - }, - { - "duration": "29.0", - "name": "rendering.mobile/cnn_desktop_gpu_raster_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/cnn_mobile" - }, - { - "duration": "36.0", - "name": "rendering.mobile/cnn_mobile_2018" - }, - { - "duration": "22.0", - "name": "rendering.mobile/cnn_mobile_sync_scroll" - }, - { - "duration": "27.0", - "name": "rendering.mobile/cnn_mobile_sync_scroll_2018" - }, - { - "duration": "39.0", - "name": "rendering.mobile/cnn_pathological" - }, - { - "duration": "39.0", - "name": "rendering.mobile/cnn_pinch" - }, - { - "duration": "38.0", - "name": "rendering.mobile/cnn_pinch_desktop_gpu_raster" - }, - { - "duration": "30.0", - "name": "rendering.mobile/compositor_heavy_animation" - }, - { - "duration": "23.0", - "name": "rendering.mobile/coordinated_animation" - }, - { - "duration": "27.0", - "name": "rendering.mobile/crafty_mind" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_animations_many_keyframes" - }, - { - "duration": "29.0", - "name": "rendering.mobile/css_animations_simultaneous_inline_style" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_animations_simultaneous_new_element" - }, - { - "duration": "29.0", - "name": "rendering.mobile/css_animations_simultaneous_style_element" - }, - { - "duration": "29.0", - "name": "rendering.mobile/css_animations_simultaneous_updating_class" - }, - { - "duration": "27.0", - "name": "rendering.mobile/css_animations_staggered_infinite_iterations" - }, - { - "duration": "32.0", - "name": "rendering.mobile/css_animations_staggered_inline_style" - }, - { - "duration": "33.0", - "name": "rendering.mobile/css_animations_staggered_new_element" - }, - { - "duration": "32.0", - "name": "rendering.mobile/css_animations_staggered_style_element" - }, - { - "duration": "32.0", - "name": "rendering.mobile/css_animations_staggered_updating_class" - }, - { - "duration": "32.0", - "name": "rendering.mobile/css_animations_triggered_inline_style" - }, - { - "duration": "33.0", - "name": "rendering.mobile/css_animations_triggered_new_element" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_animations_triggered_style_element" - }, - { - "duration": "32.0", - "name": "rendering.mobile/css_animations_triggered_updating_class" - }, - { - "duration": "29.0", - "name": "rendering.mobile/css_transitions_inline_style" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_transitions_new_element" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_transitions_staggered_inline_style" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_transitions_staggered_new_element" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_transitions_staggered_style_element" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_transitions_staggered_updating_class" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_transitions_style_element" - }, - { - "duration": "31.0", - "name": "rendering.mobile/css_transitions_triggered_inline_style" - }, - { - "duration": "31.0", - "name": "rendering.mobile/css_transitions_triggered_new_element" - }, - { - "duration": "31.0", - "name": "rendering.mobile/css_transitions_triggered_style_element" - }, - { - "duration": "31.0", - "name": "rendering.mobile/css_transitions_triggered_updating_class" - }, - { - "duration": "29.0", - "name": "rendering.mobile/css_transitions_updating_class" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_value_type_color" - }, - { - "duration": "91.0", - "name": "rendering.mobile/css_value_type_filter" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_value_type_length" - }, - { - "duration": "31.0", - "name": "rendering.mobile/css_value_type_length_complex" - }, - { - "duration": "31.0", - "name": "rendering.mobile/css_value_type_length_simple" - }, - { - "duration": "32.0", - "name": "rendering.mobile/css_value_type_path" - }, - { - "duration": "26.0", - "name": "rendering.mobile/css_value_type_shadow" - }, - { - "duration": "29.0", - "name": "rendering.mobile/css_value_type_transform_complex" - }, - { - "duration": "30.0", - "name": "rendering.mobile/css_value_type_transform_simple" - }, - { - "duration": "40.0", - "name": "rendering.mobile/cuteoverload_mobile" - }, - { - "duration": "36.0", - "name": "rendering.mobile/deviantart_mobile" - }, - { - "duration": "40.0", - "name": "rendering.mobile/deviantart_mobile_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/deviantart_mobile_sync_scroll" - }, - { - "duration": "32.0", - "name": "rendering.mobile/deviantart_mobile_sync_scroll_2018" - }, - { - "duration": "34.0", - "name": "rendering.mobile/digg_mobile_2018" - }, - { - "duration": "27.0", - "name": "rendering.mobile/digg_mobile_sync_scroll_2018" - }, - { - "duration": "7.0", - "name": "rendering.mobile/dynamic_cube_map" - }, - { - "duration": "7.0", - "name": "rendering.mobile/earth" - }, - { - "duration": "20.0", - "name": "rendering.mobile/ebay" - }, - { - "duration": "33.0", - "name": "rendering.mobile/ebay_2018" - }, - { - "duration": "30.0", - "name": "rendering.mobile/ebay_2018_desktop_gpu_raster" - }, - { - "duration": "17.0", - "name": "rendering.mobile/ebay_desktop_gpu_raster" - }, - { - "duration": "29.0", - "name": "rendering.mobile/ebay_desktop_gpu_raster_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/ebay_mobile" - }, - { - "duration": "31.0", - "name": "rendering.mobile/ebay_mobile_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/ebay_mobile_sync_scroll" - }, - { - "duration": "23.0", - "name": "rendering.mobile/ebay_mobile_sync_scroll_2018" - }, - { - "duration": "33.0", - "name": "rendering.mobile/ebay_pinch" - }, - { - "duration": "31.0", - "name": "rendering.mobile/ebay_pinch_desktop_gpu_raster" - }, - { - "duration": "40.0", - "name": "rendering.mobile/ebay_scroll" - }, - { - "duration": "41.0", - "name": "rendering.mobile/ebay_scroll_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/effect_games" - }, - { - "duration": "17.0", - "name": "rendering.mobile/espn" - }, - { - "duration": "40.0", - "name": "rendering.mobile/espn_2018" - }, - { - "duration": "37.0", - "name": "rendering.mobile/espn_2018_desktop_gpu_raster" - }, - { - "duration": "15.0", - "name": "rendering.mobile/espn_desktop_gpu_raster" - }, - { - "duration": "36.0", - "name": "rendering.mobile/espn_desktop_gpu_raster_2018" - }, - { - "duration": "36.0", - "name": "rendering.mobile/espn_mobile_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/espn_mobile_sync_scroll_2018" - }, - { - "duration": "34.0", - "name": "rendering.mobile/espn_pathological" - }, - { - "duration": "37.0", - "name": "rendering.mobile/espn_pinch" - }, - { - "duration": "37.0", - "name": "rendering.mobile/espn_pinch_desktop_gpu_raster" - }, - { - "duration": "27.0", - "name": "rendering.mobile/extra_large_texture_uploads" - }, - { - "duration": "30.0", - "name": "rendering.mobile/facebook" - }, - { - "duration": "31.0", - "name": "rendering.mobile/facebook_2018" - }, - { - "duration": "28.0", - "name": "rendering.mobile/facebook_2018_desktop_gpu_raster" - }, - { - "duration": "29.0", - "name": "rendering.mobile/facebook_desktop_gpu_raster" - }, - { - "duration": "27.0", - "name": "rendering.mobile/facebook_desktop_gpu_raster_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/facebook_mobile" - }, - { - "duration": "45.0", - "name": "rendering.mobile/facebook_mobile_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/facebook_mobile_sync_scroll" - }, - { - "duration": "38.0", - "name": "rendering.mobile/facebook_mobile_sync_scroll_2018" - }, - { - "duration": "30.0", - "name": "rendering.mobile/facebook_pinch" - }, - { - "duration": "27.0", - "name": "rendering.mobile/facebook_pinch_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/fill_shapes" - }, - { - "duration": "27.0", - "name": "rendering.mobile/filter_terrain_svg" - }, - { - "duration": "37.0", - "name": "rendering.mobile/flickr_scroll" - }, - { - "duration": "41.0", - "name": "rendering.mobile/flickr_scroll_2018" - }, - { - "duration": "23.0", - "name": "rendering.mobile/font_wipe" - }, - { - "duration": "28.0", - "name": "rendering.mobile/forecast.io_mobile_2018" - }, - { - "duration": "21.0", - "name": "rendering.mobile/forecast.io_mobile_sync_scroll_2018" - }, - { - "duration": "21.0", - "name": "rendering.mobile/geo_apis" - }, - { - "duration": "37.0", - "name": "rendering.mobile/gmail" - }, - { - "duration": "31.0", - "name": "rendering.mobile/gmail_2018" - }, - { - "duration": "27.0", - "name": "rendering.mobile/gmail_2018_desktop_gpu_raster" - }, - { - "duration": "35.0", - "name": "rendering.mobile/gmail_desktop_gpu_raster" - }, - { - "duration": "26.0", - "name": "rendering.mobile/gmail_desktop_gpu_raster_2018" - }, - { - "duration": "40.0", - "name": "rendering.mobile/gmail_pinch" - }, - { - "duration": "36.0", - "name": "rendering.mobile/gmail_pinch_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/google_calendar" - }, - { - "duration": "29.0", - "name": "rendering.mobile/google_calendar_2018" - }, - { - "duration": "25.0", - "name": "rendering.mobile/google_calendar_2018_desktop_gpu_raster" - }, - { - "duration": "27.0", - "name": "rendering.mobile/google_calendar_desktop_gpu_raster" - }, - { - "duration": "24.0", - "name": "rendering.mobile/google_calendar_desktop_gpu_raster_2018" - }, - { - "duration": "33.0", - "name": "rendering.mobile/google_calendar_pinch" - }, - { - "duration": "30.0", - "name": "rendering.mobile/google_calendar_pinch_desktop_gpu_raster" - }, - { - "duration": "53.0", - "name": "rendering.mobile/google_docs" - }, - { - "duration": "41.0", - "name": "rendering.mobile/google_docs_2018" - }, - { - "duration": "38.0", - "name": "rendering.mobile/google_docs_2018_desktop_gpu_raster" - }, - { - "duration": "53.0", - "name": "rendering.mobile/google_docs_desktop_gpu_raster" - }, - { - "duration": "37.0", - "name": "rendering.mobile/google_docs_desktop_gpu_raster_2018" - }, - { - "duration": "34.0", - "name": "rendering.mobile/google_image_pinch" - }, - { - "duration": "31.0", - "name": "rendering.mobile/google_image_pinch_desktop_gpu_raster" - }, - { - "duration": "37.0", - "name": "rendering.mobile/google_image_search" - }, - { - "duration": "35.0", - "name": "rendering.mobile/google_image_search_2018" - }, - { - "duration": "31.0", - "name": "rendering.mobile/google_image_search_2018_desktop_gpu_raster" - }, - { - "duration": "36.0", - "name": "rendering.mobile/google_image_search_desktop_gpu_raster" - }, - { - "duration": "30.0", - "name": "rendering.mobile/google_image_search_desktop_gpu_raster_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/google_image_search_mobile_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/google_image_search_mobile_sync_scroll_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/google_news_ios" - }, - { - "duration": "33.0", - "name": "rendering.mobile/google_news_mobile" - }, - { - "duration": "19.0", - "name": "rendering.mobile/google_news_mobile_2018" - }, - { - "duration": "33.0", - "name": "rendering.mobile/google_news_mobile_sync_scroll" - }, - { - "duration": "19.0", - "name": "rendering.mobile/google_news_mobile_sync_scroll_2018" - }, - { - "duration": "42.0", - "name": "rendering.mobile/google_plus" - }, - { - "duration": "41.0", - "name": "rendering.mobile/google_plus_2018" - }, - { - "duration": "37.0", - "name": "rendering.mobile/google_plus_2018_desktop_gpu_raster" - }, - { - "duration": "42.0", - "name": "rendering.mobile/google_plus_desktop_gpu_raster" - }, - { - "duration": "36.0", - "name": "rendering.mobile/google_plus_desktop_gpu_raster_2018" - }, - { - "duration": "28.0", - "name": "rendering.mobile/google_plus_mobile" - }, - { - "duration": "42.0", - "name": "rendering.mobile/google_plus_mobile_2018" - }, - { - "duration": "27.0", - "name": "rendering.mobile/google_plus_mobile_sync_scroll" - }, - { - "duration": "36.0", - "name": "rendering.mobile/google_plus_mobile_sync_scroll_2018" - }, - { - "duration": "29.0", - "name": "rendering.mobile/google_search_pinch" - }, - { - "duration": "26.0", - "name": "rendering.mobile/google_search_pinch_desktop_gpu_raster" - }, - { - "duration": "19.0", - "name": "rendering.mobile/google_web_search" - }, - { - "duration": "28.0", - "name": "rendering.mobile/google_web_search_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/google_web_search_2018_desktop_gpu_raster" - }, - { - "duration": "17.0", - "name": "rendering.mobile/google_web_search_desktop_gpu_raster" - }, - { - "duration": "23.0", - "name": "rendering.mobile/google_web_search_desktop_gpu_raster_2018" - }, - { - "duration": "21.0", - "name": "rendering.mobile/google_web_search_mobile" - }, - { - "duration": "38.0", - "name": "rendering.mobile/google_web_search_mobile_2018" - }, - { - "duration": "19.0", - "name": "rendering.mobile/google_web_search_mobile_sync_scroll" - }, - { - "duration": "31.0", - "name": "rendering.mobile/google_web_search_mobile_sync_scroll_2018" - }, - { - "duration": "23.0", - "name": "rendering.mobile/gsp.ro_mobile" - }, - { - "duration": "36.0", - "name": "rendering.mobile/gsp.ro_mobile_2018" - }, - { - "duration": "21.0", - "name": "rendering.mobile/gsp.ro_mobile_sync_scroll" - }, - { - "duration": "36.0", - "name": "rendering.mobile/gsp.ro_mobile_sync_scroll_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/guardian_pathological" - }, - { - "duration": "34.0", - "name": "rendering.mobile/guimark_vector_chart" - }, - { - "duration": "23.0", - "name": "rendering.mobile/gws_boogie_expansion" - }, - { - "duration": "23.0", - "name": "rendering.mobile/gws_google_expansion" - }, - { - "duration": "25.0", - "name": "rendering.mobile/hakim" - }, - { - "duration": "24.0", - "name": "rendering.mobile/horizontal_vertical_expansion" - }, - { - "duration": "41.0", - "name": "rendering.mobile/idle_power_animated_gif" - }, - { - "duration": "35.0", - "name": "rendering.mobile/idle_power_blank" - }, - { - "duration": "42.0", - "name": "rendering.mobile/idle_power_css_animation" - }, - { - "duration": "42.0", - "name": "rendering.mobile/idle_power_request_animation_frame" - }, - { - "duration": "113.0", - "name": "rendering.mobile/idle_power_set_timeout_long" - }, - { - "duration": "42.0", - "name": "rendering.mobile/idle_power_set_timetout" - }, - { - "duration": "42.0", - "name": "rendering.mobile/ie_chalkboard" - }, - { - "duration": "39.0", - "name": "rendering.mobile/ie_pirate_mark" - }, - { - "duration": "34.0", - "name": "rendering.mobile/infinite_scrolling" - }, - { - "duration": "28.0", - "name": "rendering.mobile/jarro_doverson" - }, - { - "duration": "43.0", - "name": "rendering.mobile/js_full_screen_invalidation" - }, - { - "duration": "37.0", - "name": "rendering.mobile/js_poster_circle" - }, - { - "duration": "35.0", - "name": "rendering.mobile/js_scroll_200_layer_grid" - }, - { - "duration": "35.0", - "name": "rendering.mobile/js_scroll_text_only" - }, - { - "duration": "27.0", - "name": "rendering.mobile/kevs_3d" - }, - { - "duration": "28.0", - "name": "rendering.mobile/keyframed_animations" - }, - { - "duration": "28.0", - "name": "rendering.mobile/large_texture_uploads" - }, - { - "duration": "39.0", - "name": "rendering.mobile/latimes_pathological" - }, - { - "duration": "22.0", - "name": "rendering.mobile/linkedin" - }, - { - "duration": "37.0", - "name": "rendering.mobile/linkedin_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/linkedin_2018_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/linkedin_desktop_gpu_raster" - }, - { - "duration": "33.0", - "name": "rendering.mobile/linkedin_desktop_gpu_raster_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/linkedin_mobile" - }, - { - "duration": "55.0", - "name": "rendering.mobile/linkedin_mobile_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/linkedin_mobile_sync_scroll" - }, - { - "duration": "49.0", - "name": "rendering.mobile/linkedin_mobile_sync_scroll_2018" - }, - { - "duration": "32.0", - "name": "rendering.mobile/linkedin_pathological" - }, - { - "duration": "29.0", - "name": "rendering.mobile/linkedin_pinch" - }, - { - "duration": "27.0", - "name": "rendering.mobile/linkedin_pinch_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/list_animation_simple" - }, - { - "duration": "34.0", - "name": "rendering.mobile/list_recycle_transform" - }, - { - "duration": "26.0", - "name": "rendering.mobile/man_in_blue" - }, - { - "duration": "33.0", - "name": "rendering.mobile/many_images" - }, - { - "duration": "7.0", - "name": "rendering.mobile/many_planets_deep" - }, - { - "duration": "45.0", - "name": "rendering.mobile/maps_perf_test" - }, - { - "duration": "23.0", - "name": "rendering.mobile/mask_transition_animation" - }, - { - "duration": "23.0", - "name": "rendering.mobile/masonry" - }, - { - "duration": "31.0", - "name": "rendering.mobile/medium_texture_uploads" - }, - { - "duration": "24.0", - "name": "rendering.mobile/megi_dish" - }, - { - "duration": "26.0", - "name": "rendering.mobile/microsoft_asteroid_belt" - }, - { - "duration": "23.0", - "name": "rendering.mobile/microsoft_fireflies" - }, - { - "duration": "24.0", - "name": "rendering.mobile/microsoft_fish_ie_tank" - }, - { - "duration": "23.0", - "name": "rendering.mobile/microsoft_snow" - }, - { - "duration": "24.0", - "name": "rendering.mobile/microsoft_speed_reading" - }, - { - "duration": "24.0", - "name": "rendering.mobile/microsoft_tweet_map" - }, - { - "duration": "31.0", - "name": "rendering.mobile/microsoft_video_city" - }, - { - "duration": "23.0", - "name": "rendering.mobile/microsoft_worker_fountains" - }, - { - "duration": "22.0", - "name": "rendering.mobile/mix_10k" - }, - { - "duration": "27.0", - "name": "rendering.mobile/mix_blend_mode_animation_difference" - }, - { - "duration": "27.0", - "name": "rendering.mobile/mix_blend_mode_animation_hue" - }, - { - "duration": "33.0", - "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "27.0", - "name": "rendering.mobile/mix_blend_mode_animation_screen" - }, - { - "duration": "18.0", - "name": "rendering.mobile/mlb_mobile" - }, - { - "duration": "51.0", - "name": "rendering.mobile/mlb_mobile_2018" - }, - { - "duration": "17.0", - "name": "rendering.mobile/mlb_mobile_sync_scroll" - }, - { - "duration": "46.0", - "name": "rendering.mobile/mlb_mobile_sync_scroll_2018" - }, - { - "duration": "19.0", - "name": "rendering.mobile/mobile_news_sandbox" - }, - { - "duration": "28.0", - "name": "rendering.mobile/motion_mark_canvas_fill_shapes" - }, - { - "duration": "27.0", - "name": "rendering.mobile/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "74.0", - "name": "rendering.mobile/motion_mark_focus" - }, - { - "duration": "39.0", - "name": "rendering.mobile/new_tilings" - }, - { - "duration": "28.0", - "name": "rendering.mobile/no_op_raf" - }, - { - "duration": "23.0", - "name": "rendering.mobile/no_op_scroll" - }, - { - "duration": "20.0", - "name": "rendering.mobile/no_op_settimeout" - }, - { - "duration": "26.0", - "name": "rendering.mobile/no_op_touch_handler" - }, - { - "duration": "7.0", - "name": "rendering.mobile/nvidia_vertex_buffer_object" - }, - { - "duration": "39.0", - "name": "rendering.mobile/nyc_gov_scroll" - }, - { - "duration": "42.0", - "name": "rendering.mobile/nyc_gov_scroll_2018" - }, - { - "duration": "28.0", - "name": "rendering.mobile/nytimes_mobile" - }, - { - "duration": "43.0", - "name": "rendering.mobile/nytimes_mobile_2018" - }, - { - "duration": "38.0", - "name": "rendering.mobile/nytimes_scroll" - }, - { - "duration": "47.0", - "name": "rendering.mobile/nytimes_scroll_2018" - }, - { - "duration": "43.0", - "name": "rendering.mobile/overlay_background_color_css_transitions_page" - }, - { - "duration": "25.0", - "name": "rendering.mobile/parallax_effect" - }, - { - "duration": "6.0", - "name": "rendering.mobile/particles" - }, - { - "duration": "36.0", - "name": "rendering.mobile/pbs_pathological" - }, - { - "duration": "19.0", - "name": "rendering.mobile/physical_simulation" - }, - { - "duration": "35.0", - "name": "rendering.mobile/pinterest" - }, - { - "duration": "38.0", - "name": "rendering.mobile/pinterest_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/pinterest_2018_desktop_gpu_raster" - }, - { - "duration": "34.0", - "name": "rendering.mobile/pinterest_desktop_gpu_raster_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/pinterest_mobile" - }, - { - "duration": "23.0", - "name": "rendering.mobile/pinterest_mobile_2018" - }, - { - "duration": "36.0", - "name": "rendering.mobile/pinterest_mobile_sync_scroll" - }, - { - "duration": "15.0", - "name": "rendering.mobile/pinterest_mobile_sync_scroll_2018" - }, - { - "duration": "20.0", - "name": "rendering.mobile/put_get_image_data" - }, - { - "duration": "28.0", - "name": "rendering.mobile/raf" - }, - { - "duration": "28.0", - "name": "rendering.mobile/raf_animation" - }, - { - "duration": "27.0", - "name": "rendering.mobile/raf_canvas" - }, - { - "duration": "28.0", - "name": "rendering.mobile/raf_touch_animation" - }, - { - "duration": "37.0", - "name": "rendering.mobile/recode_pathological" - }, - { - "duration": "31.0", - "name": "rendering.mobile/reddit_mobile" - }, - { - "duration": "40.0", - "name": "rendering.mobile/reddit_mobile_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/runway" - }, - { - "duration": "6.0", - "name": "rendering.mobile/san_angeles" - }, - { - "duration": "16.0", - "name": "rendering.mobile/second_batch_js_heavy" - }, - { - "duration": "15.0", - "name": "rendering.mobile/second_batch_js_light" - }, - { - "duration": "16.0", - "name": "rendering.mobile/second_batch_js_medium" - }, - { - "duration": "26.0", - "name": "rendering.mobile/sfgate_mobile" - }, - { - "duration": "45.0", - "name": "rendering.mobile/sfgate_mobile_2018" - }, - { - "duration": "25.0", - "name": "rendering.mobile/sfgate_mobile_sync_scroll" - }, - { - "duration": "40.0", - "name": "rendering.mobile/sfgate_mobile_sync_scroll_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/silk_finance" - }, - { - "duration": "28.0", - "name": "rendering.mobile/simple_text_page" - }, - { - "duration": "21.0", - "name": "rendering.mobile/simple_touch_drag" - }, - { - "duration": "31.0", - "name": "rendering.mobile/slashdot_mobile" - }, - { - "duration": "37.0", - "name": "rendering.mobile/slashdot_mobile_2018" - }, - { - "duration": "20.0", - "name": "rendering.mobile/slide_drawer" - }, - { - "duration": "31.0", - "name": "rendering.mobile/small_texture_uploads" - }, - { - "duration": "28.0", - "name": "rendering.mobile/smash_cat" - }, - { - "duration": "22.0", - "name": "rendering.mobile/spielzeugz" - }, - { - "duration": "22.0", - "name": "rendering.mobile/sticky_using_webkit" - }, - { - "duration": "45.0", - "name": "rendering.mobile/stress_hidey_bars" - }, - { - "duration": "20.0", - "name": "rendering.mobile/stroke_shapes" - }, - { - "duration": "35.0", - "name": "rendering.mobile/svg_icon_raster" - }, - { - "duration": "15.0", - "name": "rendering.mobile/swipe_action" - }, - { - "duration": "23.0", - "name": "rendering.mobile/swipe_to_dismiss" - }, - { - "duration": "29.0", - "name": "rendering.mobile/sync_scroll_offset" - }, - { - "duration": "53.0", - "name": "rendering.mobile/techcrunch" - }, - { - "duration": "43.0", - "name": "rendering.mobile/techcrunch_2018" - }, - { - "duration": "39.0", - "name": "rendering.mobile/techcrunch_2018_desktop_gpu_raster" - }, - { - "duration": "51.0", - "name": "rendering.mobile/techcrunch_desktop_gpu_raster" - }, - { - "duration": "39.0", - "name": "rendering.mobile/techcrunch_desktop_gpu_raster_2018" - }, - { - "duration": "23.0", - "name": "rendering.mobile/techcrunch_mobile" - }, - { - "duration": "46.0", - "name": "rendering.mobile/techcrunch_mobile_2018" - }, - { - "duration": "21.0", - "name": "rendering.mobile/techcrunch_mobile_sync_scroll" - }, - { - "duration": "40.0", - "name": "rendering.mobile/techcrunch_mobile_sync_scroll_2018" - }, - { - "duration": "29.0", - "name": "rendering.mobile/text_05000_pixels_per_second" - }, - { - "duration": "29.0", - "name": "rendering.mobile/text_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "30.0", - "name": "rendering.mobile/text_10000_pixels_per_second" - }, - { - "duration": "29.0", - "name": "rendering.mobile/text_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "30.0", - "name": "rendering.mobile/text_15000_pixels_per_second" - }, - { - "duration": "29.0", - "name": "rendering.mobile/text_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "32.0", - "name": "rendering.mobile/text_20000_pixels_per_second" - }, - { - "duration": "30.0", - "name": "rendering.mobile/text_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "32.0", - "name": "rendering.mobile/text_30000_pixels_per_second" - }, - { - "duration": "30.0", - "name": "rendering.mobile/text_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "30.0", - "name": "rendering.mobile/text_40000_pixels_per_second" - }, - { - "duration": "28.0", - "name": "rendering.mobile/text_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "26.0", - "name": "rendering.mobile/text_50000_pixels_per_second" - }, - { - "duration": "25.0", - "name": "rendering.mobile/text_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "24.0", - "name": "rendering.mobile/text_60000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "rendering.mobile/text_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "23.0", - "name": "rendering.mobile/text_75000_pixels_per_second" - }, - { - "duration": "21.0", - "name": "rendering.mobile/text_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "22.0", - "name": "rendering.mobile/text_90000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "26.0", - "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "26.0", - "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "26.0", - "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "29.0", - "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "26.0", - "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "29.0", - "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "26.0", - "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.0", - "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "25.0", - "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "25.0", - "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "23.0", - "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "22.0", - "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "21.0", - "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_hover_05000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_hover_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_hover_10000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_hover_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "21.0", - "name": "rendering.mobile/text_hover_15000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_hover_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "21.0", - "name": "rendering.mobile/text_hover_20000_pixels_per_second" - }, - { - "duration": "21.0", - "name": "rendering.mobile/text_hover_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_hover_30000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "rendering.mobile/text_hover_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "19.0", - "name": "rendering.mobile/text_hover_40000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "rendering.mobile/text_hover_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "18.0", - "name": "rendering.mobile/text_hover_50000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "rendering.mobile/text_hover_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "17.0", - "name": "rendering.mobile/text_hover_60000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "rendering.mobile/text_hover_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "16.0", - "name": "rendering.mobile/text_hover_75000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "rendering.mobile/text_hover_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "16.0", - "name": "rendering.mobile/text_hover_90000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "rendering.mobile/text_hover_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "37.0", - "name": "rendering.mobile/theverge_article_mobile" - }, - { - "duration": "47.0", - "name": "rendering.mobile/theverge_article_mobile_2018" - }, - { - "duration": "36.0", - "name": "rendering.mobile/theverge_article_mobile_sync_scroll" - }, - { - "duration": "47.0", - "name": "rendering.mobile/theverge_article_mobile_sync_scroll_2018" - }, - { - "duration": "25.0", - "name": "rendering.mobile/theverge_mobile" - }, - { - "duration": "51.0", - "name": "rendering.mobile/theverge_mobile_2018" - }, - { - "duration": "24.0", - "name": "rendering.mobile/theverge_mobile_sync_scroll" - }, - { - "duration": "44.0", - "name": "rendering.mobile/theverge_mobile_sync_scroll_2018" - }, - { - "duration": "27.0", - "name": "rendering.mobile/toggle_drawer" - }, - { - "duration": "29.0", - "name": "rendering.mobile/touch_handler_scrolling" - }, - { - "duration": "32.0", - "name": "rendering.mobile/transform_transitions" - }, - { - "duration": "31.0", - "name": "rendering.mobile/transform_transitions_js_block" - }, - { - "duration": "39.0", - "name": "rendering.mobile/twitch_2018" - }, - { - "duration": "34.0", - "name": "rendering.mobile/twitch_2018_desktop_gpu_raster" - }, - { - "duration": "32.0", - "name": "rendering.mobile/twitch_desktop_gpu_raster_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/twitter" - }, - { - "duration": "36.0", - "name": "rendering.mobile/twitter_2018" - }, - { - "duration": "36.0", - "name": "rendering.mobile/twitter_2018_desktop_gpu_raster" - }, - { - "duration": "23.0", - "name": "rendering.mobile/twitter_desktop_gpu_raster" - }, - { - "duration": "34.0", - "name": "rendering.mobile/twitter_desktop_gpu_raster_2018" - }, - { - "duration": "25.0", - "name": "rendering.mobile/twitter_mobile_2018" - }, - { - "duration": "19.0", - "name": "rendering.mobile/twitter_mobile_sync_scroll_2018" - }, - { - "duration": "34.0", - "name": "rendering.mobile/twitter_pinch" - }, - { - "duration": "31.0", - "name": "rendering.mobile/twitter_pinch_desktop_gpu_raster" - }, - { - "duration": "25.0", - "name": "rendering.mobile/update_history_state" - }, - { - "duration": "38.0", - "name": "rendering.mobile/usatoday_mobile" - }, - { - "duration": "31.0", - "name": "rendering.mobile/usatoday_mobile_2018" - }, - { - "duration": "39.0", - "name": "rendering.mobile/usatoday_mobile_sync_scroll" - }, - { - "duration": "23.0", - "name": "rendering.mobile/usatoday_mobile_sync_scroll_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/vertical_expansion" - }, - { - "duration": "30.0", - "name": "rendering.mobile/weather.com" - }, - { - "duration": "28.0", - "name": "rendering.mobile/weather.com_desktop_gpu_raster" - }, - { - "duration": "45.0", - "name": "rendering.mobile/weather_pinch" - }, - { - "duration": "42.0", - "name": "rendering.mobile/weather_pinch_desktop_gpu_raster" - }, - { - "duration": "30.0", - "name": "rendering.mobile/web_animation_value_type_color" - }, - { - "duration": "30.0", - "name": "rendering.mobile/web_animation_value_type_length_3d" - }, - { - "duration": "31.0", - "name": "rendering.mobile/web_animation_value_type_length_complex" - }, - { - "duration": "30.0", - "name": "rendering.mobile/web_animation_value_type_length_simple" - }, - { - "duration": "32.0", - "name": "rendering.mobile/web_animation_value_type_path" - }, - { - "duration": "26.0", - "name": "rendering.mobile/web_animation_value_type_shadow" - }, - { - "duration": "30.0", - "name": "rendering.mobile/web_animation_value_type_transform_complex" - }, - { - "duration": "30.0", - "name": "rendering.mobile/web_animation_value_type_transform_simple" - }, - { - "duration": "32.0", - "name": "rendering.mobile/web_animations_many_keyframes" - }, - { - "duration": "30.0", - "name": "rendering.mobile/web_animations_set_current_time" - }, - { - "duration": "30.0", - "name": "rendering.mobile/web_animations_simultaneous" - }, - { - "duration": "32.0", - "name": "rendering.mobile/web_animations_staggered_chaining" - }, - { - "duration": "28.0", - "name": "rendering.mobile/web_animations_staggered_infinite_iterations" - }, - { - "duration": "32.0", - "name": "rendering.mobile/web_animations_staggered_triggering_page" - }, - { - "duration": "35.0", - "name": "rendering.mobile/wikipedia" - }, - { - "duration": "39.0", - "name": "rendering.mobile/wikipedia_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/wikipedia_2018_desktop_gpu_raster" - }, - { - "duration": "27.0", - "name": "rendering.mobile/wikipedia_delayed_scroll_start" - }, - { - "duration": "40.0", - "name": "rendering.mobile/wikipedia_delayed_scroll_start_2018" - }, - { - "duration": "27.0", - "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll" - }, - { - "duration": "34.0", - "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll_2018" - }, - { - "duration": "34.0", - "name": "rendering.mobile/wikipedia_desktop_gpu_raster" - }, - { - "duration": "34.0", - "name": "rendering.mobile/wikipedia_desktop_gpu_raster_2018" - }, - { - "duration": "27.0", - "name": "rendering.mobile/wikipedia_mobile" - }, - { - "duration": "40.0", - "name": "rendering.mobile/wikipedia_mobile_2018" - }, - { - "duration": "27.0", - "name": "rendering.mobile/wikipedia_mobile_sync_scroll" - }, - { - "duration": "33.0", - "name": "rendering.mobile/wikipedia_mobile_sync_scroll_2018" - }, - { - "duration": "41.0", - "name": "rendering.mobile/wordpress" - }, - { - "duration": "43.0", - "name": "rendering.mobile/wordpress_2018" - }, - { - "duration": "39.0", - "name": "rendering.mobile/wordpress_2018_desktop_gpu_raster" - }, - { - "duration": "39.0", - "name": "rendering.mobile/wordpress_desktop_gpu_raster" - }, - { - "duration": "39.0", - "name": "rendering.mobile/wordpress_desktop_gpu_raster_2018" - }, - { - "duration": "39.0", - "name": "rendering.mobile/wordpress_mobile" - }, - { - "duration": "45.0", - "name": "rendering.mobile/wordpress_mobile_2018" - }, - { - "duration": "38.0", - "name": "rendering.mobile/wordpress_mobile_sync_scroll" - }, - { - "duration": "37.0", - "name": "rendering.mobile/wordpress_mobile_sync_scroll_2018" - }, - { - "duration": "37.0", - "name": "rendering.mobile/worldjournal_mobile" - }, - { - "duration": "45.0", - "name": "rendering.mobile/worldjournal_mobile_2018" - }, - { - "duration": "37.0", - "name": "rendering.mobile/worldjournal_mobile_sync_scroll" - }, - { - "duration": "38.0", - "name": "rendering.mobile/worldjournal_mobile_sync_scroll_2018" - }, - { - "duration": "42.0", - "name": "rendering.mobile/wow_wiki_pathological" - }, - { - "duration": "48.0", - "name": "rendering.mobile/wowwiki_mobile" - }, - { - "duration": "71.0", - "name": "rendering.mobile/wowwiki_mobile_2018" - }, - { - "duration": "46.0", - "name": "rendering.mobile/wowwiki_mobile_sync_scroll" - }, - { - "duration": "61.0", - "name": "rendering.mobile/wowwiki_mobile_sync_scroll_2018" - }, - { - "duration": "23.0", - "name": "rendering.mobile/wsj_mobile" - }, - { - "duration": "55.0", - "name": "rendering.mobile/wsj_mobile_2018" - }, - { - "duration": "21.0", - "name": "rendering.mobile/wsj_mobile_sync_scroll" - }, - { - "duration": "51.0", - "name": "rendering.mobile/wsj_mobile_sync_scroll_2018" - }, - { - "duration": "23.0", - "name": "rendering.mobile/yahoo_answers" - }, - { - "duration": "31.0", - "name": "rendering.mobile/yahoo_answers_2018" - }, - { - "duration": "28.0", - "name": "rendering.mobile/yahoo_answers_2018_desktop_gpu_raster" - }, - { - "duration": "21.0", - "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster" - }, - { - "duration": "27.0", - "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/yahoo_answers_mobile" - }, - { - "duration": "27.0", - "name": "rendering.mobile/yahoo_answers_mobile_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll" - }, - { - "duration": "21.0", - "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll_2018" - }, - { - "duration": "34.0", - "name": "rendering.mobile/yahoo_games" - }, - { - "duration": "34.0", - "name": "rendering.mobile/yahoo_games_desktop_gpu_raster" - }, - { - "duration": "39.0", - "name": "rendering.mobile/yahoo_games_pinch" - }, - { - "duration": "37.0", - "name": "rendering.mobile/yahoo_games_pinch_desktop_gpu_raster" - }, - { - "duration": "27.0", - "name": "rendering.mobile/yahoo_news" - }, - { - "duration": "31.0", - "name": "rendering.mobile/yahoo_news_2018" - }, - { - "duration": "30.0", - "name": "rendering.mobile/yahoo_news_2018_desktop_gpu_raster" - }, - { - "duration": "25.0", - "name": "rendering.mobile/yahoo_news_desktop_gpu_raster" - }, - { - "duration": "27.0", - "name": "rendering.mobile/yahoo_news_desktop_gpu_raster_2018" - }, - { - "duration": "26.0", - "name": "rendering.mobile/yahoo_news_mobile" - }, - { - "duration": "41.0", - "name": "rendering.mobile/yahoo_news_mobile_2018" - }, - { - "duration": "25.0", - "name": "rendering.mobile/yahoo_news_mobile_sync_scroll" - }, - { - "duration": "35.0", - "name": "rendering.mobile/yahoo_news_mobile_sync_scroll_2018" - }, - { - "duration": "39.0", - "name": "rendering.mobile/yahoo_news_pinch" - }, - { - "duration": "35.0", - "name": "rendering.mobile/yahoo_news_pinch_desktop_gpu_raster" - }, - { - "duration": "29.0", - "name": "rendering.mobile/yahoo_sports" - }, - { - "duration": "36.0", - "name": "rendering.mobile/yahoo_sports_2018" - }, - { - "duration": "33.0", - "name": "rendering.mobile/yahoo_sports_2018_desktop_gpu_raster" - }, - { - "duration": "26.0", - "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster" - }, - { - "duration": "32.0", - "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster_2018" - }, - { - "duration": "33.0", - "name": "rendering.mobile/yahoo_sports_pathological" - }, - { - "duration": "56.0", - "name": "rendering.mobile/yahoo_sports_pinch" - }, - { - "duration": "52.0", - "name": "rendering.mobile/yahoo_sports_pinch_desktop_gpu_raster" - }, - { - "duration": "32.0", - "name": "rendering.mobile/youtube" - }, - { - "duration": "26.0", - "name": "rendering.mobile/youtube_2018" - }, - { - "duration": "23.0", - "name": "rendering.mobile/youtube_2018_desktop_gpu_raster" - }, - { - "duration": "30.0", - "name": "rendering.mobile/youtube_desktop_gpu_raster" - }, - { - "duration": "22.0", - "name": "rendering.mobile/youtube_desktop_gpu_raster_2018" - }, - { - "duration": "18.0", - "name": "rendering.mobile/youtube_mobile" - }, - { - "duration": "25.0", - "name": "rendering.mobile/youtube_mobile_2018" - }, - { - "duration": "16.0", - "name": "rendering.mobile/youtube_mobile_sync_scroll" - }, - { - "duration": "17.0", - "name": "rendering.mobile/youtube_mobile_sync_scroll_2018" - }, - { - "duration": "35.0", - "name": "rendering.mobile/youtube_pinch" - }, - { - "duration": "32.0", - "name": "rendering.mobile/youtube_pinch_desktop_gpu_raster" - }, - { - "duration": "29.0", - "name": "rendering.mobile/yuv_decoding" - }, - { - "duration": "31.0", - "name": "rendering.mobile/yuv_decoding_gpu_rasterization_and_decoding" - }, - { - "duration": "33.0", - "name": "rendering.mobile/zdnet_pathological" - }, - { - "duration": "23.0", - "name": "rendering.mobile/zoom_in_animation" - }, - { - "duration": "19.0", - "name": "scheduler.tough_scheduling_cases/raf" - }, - { - "duration": "19.0", - "name": "scheduler.tough_scheduling_cases/raf_animation" - }, - { - "duration": "18.0", - "name": "scheduler.tough_scheduling_cases/raf_canvas" - }, - { - "duration": "19.0", - "name": "scheduler.tough_scheduling_cases/raf_touch_animation" - }, - { - "duration": "12.0", - "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy" - }, - { - "duration": "12.0", - "name": "scheduler.tough_scheduling_cases/second_batch_js_light" - }, - { - "duration": "12.0", - "name": "scheduler.tough_scheduling_cases/second_batch_js_medium" - }, - { - "duration": "24.0", - "name": "scheduler.tough_scheduling_cases/simple_text_page" - }, - { - "duration": "14.0", - "name": "scheduler.tough_scheduling_cases/simple_touch_drag" - }, - { - "duration": "19.0", - "name": "scheduler.tough_scheduling_cases/sync_scroll_offset" - }, - { - "duration": "19.0", - "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling" - }, - { - "duration": "15.0", - "name": "smoothness.gpu_rasterization.polymer/core_scroll_header_panel" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.polymer/paper_button" - }, - { - "duration": "28.0", - "name": "smoothness.gpu_rasterization.polymer/paper_calculator" - }, - { - "duration": "24.0", - "name": "smoothness.gpu_rasterization.polymer/paper_checkbox" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.polymer/paper_fab" - }, - { - "duration": "43.0", - "name": "smoothness.gpu_rasterization.polymer/paper_icon_button" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.polymer/paper_shadow" - }, - { - "duration": "56.0", - "name": "smoothness.gpu_rasterization.polymer/paper_tabs" - }, - { - "duration": "15.0", - "name": "smoothness.gpu_rasterization.polymer/paper_toggle_button" - }, - { - "duration": "25.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/blogspot" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/booking.com" - }, - { - "duration": "13.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/ebay" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/espn" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/facebook" - }, - { - "duration": "26.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/gmail" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_calendar" - }, - { - "duration": "29.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_docs" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_image_search" - }, - { - "duration": "26.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_plus" - }, - { - "duration": "13.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_web_search" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/linkedin" - }, - { - "duration": "24.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/techcrunch" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/twitter" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/weather.com" - }, - { - "duration": "23.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/wikipedia" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/wordpress" - }, - { - "duration": "15.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_answers" - }, - { - "duration": "24.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_games" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_news" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_sports" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.top_25_smooth/youtube" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG" - }, - { - "duration": "25.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark" - }, - { - "duration": "26.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "25.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "26.0", - "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "27.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test" - }, - { - "duration": "33.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes" - }, - { - "duration": "27.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "34.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Blogger" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ESPN" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Facebook" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/LinkedIn" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Twitter" - }, - { - "duration": "23.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Weather.com" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/amazon_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/blogspot_pinch" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/booking_pinch" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/cnn_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ebay_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/espn_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/facebook_pinch" - }, - { - "duration": "23.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/gmail_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_calendar_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_image_pinch" - }, - { - "duration": "27.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_search_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://booking.com" - }, - { - "duration": "24.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://news.yahoo.com" - }, - { - "duration": "24.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://sports.yahoo.com/" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.amazon.com" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.cnn.com" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.ebay.com" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.youtube.com" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://mail.google.com/mail/" - }, - { - "duration": "23.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/calendar/" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/linkedin_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/twitter_pinch" - }, - { - "duration": "25.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/weather_pinch" - }, - { - "duration": "25.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_games_pinch" - }, - { - "duration": "22.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_news_pinch" - }, - { - "duration": "25.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_sports_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/youtube_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "13.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "30.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "13.0", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding" - }, - { - "duration": "27.0", - "name": "smoothness.image_decoding_cases/yuv_decoding" - }, - { - "duration": "16.0", - "name": "smoothness.key_mobile_sites_smooth/androidpolice" - }, - { - "duration": "13.0", - "name": "smoothness.key_mobile_sites_smooth/baidu" - }, - { - "duration": "12.0", - "name": "smoothness.key_mobile_sites_smooth/bing" - }, - { - "duration": "15.0", - "name": "smoothness.key_mobile_sites_smooth/blogspot" - }, - { - "duration": "25.0", - "name": "smoothness.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "13.0", - "name": "smoothness.key_mobile_sites_smooth/booking.com" - }, - { - "duration": "24.0", - "name": "smoothness.key_mobile_sites_smooth/capitolvolkswagen" - }, - { - "duration": "15.0", - "name": "smoothness.key_mobile_sites_smooth/cnn" - }, - { - "duration": "30.0", - "name": "smoothness.key_mobile_sites_smooth/cnn_article" - }, - { - "duration": "24.0", - "name": "smoothness.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "21.0", - "name": "smoothness.key_mobile_sites_smooth/deviantart" - }, - { - "duration": "16.0", - "name": "smoothness.key_mobile_sites_smooth/ebay" - }, - { - "duration": "16.0", - "name": "smoothness.key_mobile_sites_smooth/facebook" - }, - { - "duration": "21.0", - "name": "smoothness.key_mobile_sites_smooth/google_news" - }, - { - "duration": "18.0", - "name": "smoothness.key_mobile_sites_smooth/google_plus" - }, - { - "duration": "14.0", - "name": "smoothness.key_mobile_sites_smooth/google_web_search" - }, - { - "duration": "15.0", - "name": "smoothness.key_mobile_sites_smooth/gsp.ro" - }, - { - "duration": "17.0", - "name": "smoothness.key_mobile_sites_smooth/linkedin" - }, - { - "duration": "13.0", - "name": "smoothness.key_mobile_sites_smooth/mlb" - }, - { - "duration": "17.0", - "name": "smoothness.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "22.0", - "name": "smoothness.key_mobile_sites_smooth/pinterest" - }, - { - "duration": "21.0", - "name": "smoothness.key_mobile_sites_smooth/reddit" - }, - { - "duration": "18.0", - "name": "smoothness.key_mobile_sites_smooth/sfgate" - }, - { - "duration": "19.0", - "name": "smoothness.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "14.0", - "name": "smoothness.key_mobile_sites_smooth/techcrunch" - }, - { - "duration": "16.0", - "name": "smoothness.key_mobile_sites_smooth/theverge" - }, - { - "duration": "23.0", - "name": "smoothness.key_mobile_sites_smooth/theverge_article" - }, - { - "duration": "22.0", - "name": "smoothness.key_mobile_sites_smooth/usatoday" - }, - { - "duration": "18.0", - "name": "smoothness.key_mobile_sites_smooth/wikipedia" - }, - { - "duration": "18.0", - "name": "smoothness.key_mobile_sites_smooth/wikipedia_delayed_scroll_start" - }, - { - "duration": "21.0", - "name": "smoothness.key_mobile_sites_smooth/wordpress" - }, - { - "duration": "19.0", - "name": "smoothness.key_mobile_sites_smooth/worldjournal" - }, - { - "duration": "27.0", - "name": "smoothness.key_mobile_sites_smooth/wowwiki" - }, - { - "duration": "15.0", - "name": "smoothness.key_mobile_sites_smooth/wsj" - }, - { - "duration": "17.0", - "name": "smoothness.key_mobile_sites_smooth/yahoo_answers" - }, - { - "duration": "17.0", - "name": "smoothness.key_mobile_sites_smooth/yahoo_news" - }, - { - "duration": "13.0", - "name": "smoothness.key_mobile_sites_smooth/youtube" - }, - { - "duration": "25.0", - "name": "smoothness.key_silk_cases/basic_stream" - }, - { - "duration": "16.0", - "name": "smoothness.key_silk_cases/card_expansion" - }, - { - "duration": "17.0", - "name": "smoothness.key_silk_cases/card_expansion_animated" - }, - { - "duration": "18.0", - "name": "smoothness.key_silk_cases/card_expansion_images_text" - }, - { - "duration": "16.0", - "name": "smoothness.key_silk_cases/card_flying" - }, - { - "duration": "18.0", - "name": "smoothness.key_silk_cases/coordinated_animation" - }, - { - "duration": "22.0", - "name": "smoothness.key_silk_cases/font_wipe" - }, - { - "duration": "19.0", - "name": "smoothness.key_silk_cases/google_news_ios" - }, - { - "duration": "18.0", - "name": "smoothness.key_silk_cases/gws_boogie_expansion" - }, - { - "duration": "18.0", - "name": "smoothness.key_silk_cases/gws_google_expansion" - }, - { - "duration": "17.0", - "name": "smoothness.key_silk_cases/horizontal_vertical_expansion" - }, - { - "duration": "23.0", - "name": "smoothness.key_silk_cases/infinite_scrolling" - }, - { - "duration": "15.0", - "name": "smoothness.key_silk_cases/list_animation_simple" - }, - { - "duration": "27.0", - "name": "smoothness.key_silk_cases/list_recycle_transform" - }, - { - "duration": "17.0", - "name": "smoothness.key_silk_cases/mask_transition_animation" - }, - { - "duration": "17.0", - "name": "smoothness.key_silk_cases/masonry" - }, - { - "duration": "15.0", - "name": "smoothness.key_silk_cases/mobile_news_sandbox" - }, - { - "duration": "17.0", - "name": "smoothness.key_silk_cases/parallax_effect" - }, - { - "duration": "15.0", - "name": "smoothness.key_silk_cases/physical_simulation" - }, - { - "duration": "24.0", - "name": "smoothness.key_silk_cases/silk_finance" - }, - { - "duration": "16.0", - "name": "smoothness.key_silk_cases/sticky_using_webkit" - }, - { - "duration": "26.0", - "name": "smoothness.key_silk_cases/stress_hidey_bars" - }, - { - "duration": "26.0", - "name": "smoothness.key_silk_cases/svg_icon_raster" - }, - { - "duration": "13.0", - "name": "smoothness.key_silk_cases/swipe_action" - }, - { - "duration": "16.0", - "name": "smoothness.key_silk_cases/swipe_to_dismiss" - }, - { - "duration": "20.0", - "name": "smoothness.key_silk_cases/toggle_drawer" - }, - { - "duration": "18.0", - "name": "smoothness.key_silk_cases/update_history_state" - }, - { - "duration": "17.0", - "name": "smoothness.key_silk_cases/vertical_expansion" - }, - { - "duration": "16.0", - "name": "smoothness.key_silk_cases/zoom_in_animation" - }, - { - "duration": "29.0", - "name": "smoothness.maps/maps_perf_test" - }, - { - "duration": "28.0", - "name": "smoothness.pathological_mobile_sites/cnn_pathological" - }, - { - "duration": "20.0", - "name": "smoothness.pathological_mobile_sites/espn_pathological" - }, - { - "duration": "18.0", - "name": "smoothness.pathological_mobile_sites/guardian_pathological" - }, - { - "duration": "34.0", - "name": "smoothness.pathological_mobile_sites/http://edition.cnn.com" - }, - { - "duration": "21.0", - "name": "smoothness.pathological_mobile_sites/http://m.espn.go.com/nhl/rankings" - }, - { - "duration": "24.0", - "name": "smoothness.pathological_mobile_sites/http://recode.net" - }, - { - "duration": "24.0", - "name": "smoothness.pathological_mobile_sites/http://sports.yahoo.com/" - }, - { - "duration": "24.0", - "name": "smoothness.pathological_mobile_sites/http://www.latimes.com" - }, - { - "duration": "23.0", - "name": "smoothness.pathological_mobile_sites/http://www.pbs.org/newshour/bb/much-really-cost-live-city-like-seattle/#the-rundown" - }, - { - "duration": "18.0", - "name": "smoothness.pathological_mobile_sites/http://www.theguardian.com/politics/2015/mar/09/ed-balls-tory-spending-plans-nhs-charging" - }, - { - "duration": "25.0", - "name": "smoothness.pathological_mobile_sites/http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria" - }, - { - "duration": "22.0", - "name": "smoothness.pathological_mobile_sites/http://www.zdnet.com" - }, - { - "duration": "22.0", - "name": "smoothness.pathological_mobile_sites/https://www.linkedin.com/in/linustorvalds" - }, - { - "duration": "24.0", - "name": "smoothness.pathological_mobile_sites/latimes_pathological" - }, - { - "duration": "21.0", - "name": "smoothness.pathological_mobile_sites/linkedin_pathological" - }, - { - "duration": "22.0", - "name": "smoothness.pathological_mobile_sites/pbs_pathological" - }, - { - "duration": "23.0", - "name": "smoothness.pathological_mobile_sites/recode_pathological" - }, - { - "duration": "25.0", - "name": "smoothness.pathological_mobile_sites/wow_wiki_pathological" - }, - { - "duration": "23.0", - "name": "smoothness.pathological_mobile_sites/yahoo_sports_pathological" - }, - { - "duration": "20.0", - "name": "smoothness.pathological_mobile_sites/zdnet_pathological" - }, - { - "duration": "31.0", - "name": "smoothness.simple_mobile_sites/ebay_scroll" - }, - { - "duration": "25.0", - "name": "smoothness.simple_mobile_sites/flickr_scroll" - }, - { - "duration": "27.0", - "name": "smoothness.simple_mobile_sites/http://m.nytimes.com/" - }, - { - "duration": "32.0", - "name": "smoothness.simple_mobile_sites/http://www.ebay.co.uk/" - }, - { - "duration": "27.0", - "name": "smoothness.simple_mobile_sites/http://www.nyc.gov" - }, - { - "duration": "26.0", - "name": "smoothness.simple_mobile_sites/https://www.flickr.com/" - }, - { - "duration": "26.0", - "name": "smoothness.simple_mobile_sites/nyc_gov_scroll" - }, - { - "duration": "26.0", - "name": "smoothness.simple_mobile_sites/nytimes_scroll" - }, - { - "duration": "12.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/amazon" - }, - { - "duration": "16.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/androidpolice" - }, - { - "duration": "13.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/baidu" - }, - { - "duration": "12.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/bing" - }, - { - "duration": "14.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/blogspot" - }, - { - "duration": "27.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "13.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/booking.com" - }, - { - "duration": "25.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/capitolvolkswagen" - }, - { - "duration": "15.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn" - }, - { - "duration": "32.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn_article" - }, - { - "duration": "25.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "21.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/deviantart" - }, - { - "duration": "16.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/ebay" - }, - { - "duration": "24.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/espn" - }, - { - "duration": "16.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/facebook" - }, - { - "duration": "15.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/forecast.io" - }, - { - "duration": "21.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_news" - }, - { - "duration": "20.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_plus" - }, - { - "duration": "14.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_web_search" - }, - { - "duration": "14.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/gsp.ro" - }, - { - "duration": "17.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/linkedin" - }, - { - "duration": "13.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/mlb" - }, - { - "duration": "17.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "23.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/pinterest" - }, - { - "duration": "21.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/reddit" - }, - { - "duration": "18.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/sfgate" - }, - { - "duration": "20.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "14.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/techcrunch" - }, - { - "duration": "16.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge" - }, - { - "duration": "23.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge_article" - }, - { - "duration": "13.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/twitter" - }, - { - "duration": "23.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/usatoday" - }, - { - "duration": "18.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia" - }, - { - "duration": "18.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia_delayed_scroll_start" - }, - { - "duration": "22.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wordpress" - }, - { - "duration": "21.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/worldjournal" - }, - { - "duration": "26.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wowwiki" - }, - { - "duration": "15.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wsj" - }, - { - "duration": "17.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_answers" - }, - { - "duration": "17.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_news" - }, - { - "duration": "14.0", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/youtube" - }, - { - "duration": "25.0", - "name": "smoothness.top_25_smooth/blogspot" - }, - { - "duration": "17.0", - "name": "smoothness.top_25_smooth/booking.com" - }, - { - "duration": "13.0", - "name": "smoothness.top_25_smooth/ebay" - }, - { - "duration": "16.0", - "name": "smoothness.top_25_smooth/espn" - }, - { - "duration": "21.0", - "name": "smoothness.top_25_smooth/facebook" - }, - { - "duration": "24.0", - "name": "smoothness.top_25_smooth/gmail" - }, - { - "duration": "19.0", - "name": "smoothness.top_25_smooth/google_calendar" - }, - { - "duration": "29.0", - "name": "smoothness.top_25_smooth/google_docs" - }, - { - "duration": "22.0", - "name": "smoothness.top_25_smooth/google_image_search" - }, - { - "duration": "26.0", - "name": "smoothness.top_25_smooth/google_plus" - }, - { - "duration": "13.0", - "name": "smoothness.top_25_smooth/google_web_search" - }, - { - "duration": "16.0", - "name": "smoothness.top_25_smooth/linkedin" - }, - { - "duration": "21.0", - "name": "smoothness.top_25_smooth/pinterest" - }, - { - "duration": "24.0", - "name": "smoothness.top_25_smooth/techcrunch" - }, - { - "duration": "19.0", - "name": "smoothness.top_25_smooth/twitter" - }, - { - "duration": "16.0", - "name": "smoothness.top_25_smooth/weather.com" - }, - { - "duration": "23.0", - "name": "smoothness.top_25_smooth/wikipedia" - }, - { - "duration": "23.0", - "name": "smoothness.top_25_smooth/wordpress" - }, - { - "duration": "15.0", - "name": "smoothness.top_25_smooth/yahoo_answers" - }, - { - "duration": "24.0", - "name": "smoothness.top_25_smooth/yahoo_games" - }, - { - "duration": "17.0", - "name": "smoothness.top_25_smooth/yahoo_news" - }, - { - "duration": "18.0", - "name": "smoothness.top_25_smooth/yahoo_sports" - }, - { - "duration": "19.0", - "name": "smoothness.top_25_smooth/youtube" - }, - { - "duration": "27.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/balls_javascript_css" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/balls_javascript_css.html" - }, - { - "duration": "38.0", - "name": "smoothness.tough_animation_cases/balls_svg_animations" - }, - { - "duration": "27.0", - "name": "smoothness.tough_animation_cases/balls_svg_animations.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class" - }, - { - "duration": "25.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_inline_style" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_new_element" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_style_element" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/css_transitions_updating_class" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_color" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/css_value_type_filter" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_path" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/css_value_type_shadow" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/keyframed_animations" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/keyframed_animations.html" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html" - }, - { - "duration": "27.0", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html" - }, - { - "duration": "28.0", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/transform_transition_js_block.html" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/transform_transitions" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/transform_transitions.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/transform_transitions_js_block" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_color" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_path" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous" - }, - { - "duration": "23.0", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316" - }, - { - "duration": "21.0", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations" - }, - { - "duration": "22.0", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316" - }, - { - "duration": "24.0", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page" - }, - { - "duration": "22.0", - "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/bouncing_balls_15" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/bouncing_png_images" - }, - { - "duration": "24.0", - "name": "smoothness.tough_canvas_cases/bouncing_svg_images" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/canvas_arcs" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/canvas_font_cycler" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/canvas_lines" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/canvas_to_blob" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/chip_tune" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/crafty_mind" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/effect_games" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/fill_shapes" - }, - { - "duration": "22.0", - "name": "smoothness.tough_canvas_cases/geo_apis" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/hakim" - }, - { - "duration": "22.0", - "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html" - }, - { - "duration": "18.0", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/jarro_doverson" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/kevs_3d" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/man_in_blue" - }, - { - "duration": "22.0", - "name": "smoothness.tough_canvas_cases/many_images" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/megi_dish" - }, - { - "duration": "18.0", - "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/microsoft_snow" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/microsoft_speed_reading" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/microsoft_tweet_map" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/microsoft_video_city" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/mix_10k" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/put_get_image_data" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/runway" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/smash_cat" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/spielzeugz" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/stroke_shapes" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html" - }, - { - "duration": "17.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html" - }, - { - "duration": "16.0", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html" - }, - { - "duration": "21.0", - "name": "smoothness.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "21.0", - "name": "smoothness.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "25.0", - "name": "smoothness.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "27.0", - "name": "smoothness.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "16.0", - "name": "smoothness.tough_image_decode_cases/cats_unscaled" - }, - { - "duration": "11.0", - "name": "smoothness.tough_image_decode_cases/cats_viewport_width" - }, - { - "duration": "16.0", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html" - }, - { - "duration": "11.0", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html" - }, - { - "duration": "27.0", - "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "32.0", - "name": "smoothness.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "21.0", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "21.0", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "18.0", - "name": "smoothness.tough_pinch_zoom_cases/amazon_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.tough_pinch_zoom_cases/blogspot_pinch" - }, - { - "duration": "20.0", - "name": "smoothness.tough_pinch_zoom_cases/booking_pinch" - }, - { - "duration": "22.0", - "name": "smoothness.tough_pinch_zoom_cases/cnn_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.tough_pinch_zoom_cases/ebay_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.tough_pinch_zoom_cases/espn_pinch" - }, - { - "duration": "18.0", - "name": "smoothness.tough_pinch_zoom_cases/facebook_pinch" - }, - { - "duration": "23.0", - "name": "smoothness.tough_pinch_zoom_cases/gmail_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.tough_pinch_zoom_cases/google_calendar_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.tough_pinch_zoom_cases/google_image_pinch" - }, - { - "duration": "26.0", - "name": "smoothness.tough_pinch_zoom_cases/google_search_pinch" - }, - { - "duration": "18.0", - "name": "smoothness.tough_pinch_zoom_cases/linkedin_pinch" - }, - { - "duration": "20.0", - "name": "smoothness.tough_pinch_zoom_cases/twitter_pinch" - }, - { - "duration": "25.0", - "name": "smoothness.tough_pinch_zoom_cases/weather_pinch" - }, - { - "duration": "25.0", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_games_pinch" - }, - { - "duration": "22.0", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_news_pinch" - }, - { - "duration": "25.0", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_sports_pinch" - }, - { - "duration": "21.0", - "name": "smoothness.tough_pinch_zoom_cases/youtube_pinch" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "24.0", - "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "13.0", - "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "13.0", - "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "smoothness.tough_texture_upload_cases/background_color_animation" - }, - { - "duration": "22.0", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient" - }, - { - "duration": "22.0", - "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads" - }, - { - "duration": "21.0", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads" - }, - { - "duration": "22.0", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads" - }, - { - "duration": "22.0", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads" - }, - { - "duration": "27.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html" - }, - { - "duration": "22.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html" - }, - { - "duration": "23.0", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/animometer_webgl" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/aquarium" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/aquarium_20k" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/blob" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/dynamic_cube_map" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/earth" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/many_planets_deep" - }, - { - "duration": "9.0", - "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/particles" - }, - { - "duration": "4.0", - "name": "smoothness.tough_webgl_cases/san_angeles" - }, - { - "duration": "36.0", - "name": "speedometer-future/http://browserbench.org/Speedometer/" - }, - { - "duration": "36.0", - "name": "speedometer/http://browserbench.org/Speedometer/" - }, - { - "duration": "60.0", - "name": "speedometer2-future/Speedometer2" - }, - { - "duration": "59.0", - "name": "speedometer2/Speedometer2" - }, - { - "duration": "31.0", - "name": "start_with_url.cold.startup_pages/about:blank" - }, - { - "duration": "30.0", - "name": "start_with_url.cold.startup_pages/http://bbc.co.uk" - }, - { - "duration": "29.0", - "name": "start_with_url.warm.startup_pages/about:blank" - }, - { - "duration": "30.0", - "name": "start_with_url.warm.startup_pages/http://bbc.co.uk" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/background:media:imgur" - }, - { - "duration": "49.0", - "name": "system_health.common_mobile/background:news:nytimes" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/background:search:google" - }, - { - "duration": "36.0", - "name": "system_health.common_mobile/background:social:facebook" - }, - { - "duration": "36.0", - "name": "system_health.common_mobile/background:tools:gmail" - }, - { - "duration": "88.0", - "name": "system_health.common_mobile/browse:chrome:newtab" - }, - { - "duration": "34.0", - "name": "system_health.common_mobile/browse:chrome:omnibox" - }, - { - "duration": "98.0", - "name": "system_health.common_mobile/browse:media:facebook_photos" - }, - { - "duration": "63.0", - "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "92.0", - "name": "system_health.common_mobile/browse:media:imgur" - }, - { - "duration": "112.0", - "name": "system_health.common_mobile/browse:media:youtube" - }, - { - "duration": "111.0", - "name": "system_health.common_mobile/browse:news:cnn" - }, - { - "duration": "75.0", - "name": "system_health.common_mobile/browse:news:cricbuzz" - }, - { - "duration": "67.0", - "name": "system_health.common_mobile/browse:news:qq" - }, - { - "duration": "61.0", - "name": "system_health.common_mobile/browse:news:reddit" - }, - { - "duration": "153.0", - "name": "system_health.common_mobile/browse:news:toi" - }, - { - "duration": "69.0", - "name": "system_health.common_mobile/browse:news:washingtonpost" - }, - { - "duration": "86.0", - "name": "system_health.common_mobile/browse:shopping:amazon" - }, - { - "duration": "82.0", - "name": "system_health.common_mobile/browse:shopping:avito" - }, - { - "duration": "42.0", - "name": "system_health.common_mobile/browse:shopping:lazada" - }, - { - "duration": "87.0", - "name": "system_health.common_mobile/browse:social:facebook" - }, - { - "duration": "223.0", - "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "92.0", - "name": "system_health.common_mobile/browse:social:instagram" - }, - { - "duration": "106.0", - "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "132.0", - "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "65.0", - "name": "system_health.common_mobile/browse:social:twitter" - }, - { - "duration": "91.0", - "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "58.0", - "name": "system_health.common_mobile/browse:tools:maps" - }, - { - "duration": "22.0", - "name": "system_health.common_mobile/load:chrome:blank" - }, - { - "duration": "27.0", - "name": "system_health.common_mobile/load:games:bubbles" - }, - { - "duration": "23.0", - "name": "system_health.common_mobile/load:games:lazors" - }, - { - "duration": "37.0", - "name": "system_health.common_mobile/load:games:spychase" - }, - { - "duration": "26.0", - "name": "system_health.common_mobile/load:media:dailymotion" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:media:facebook_photos" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:media:google_images" - }, - { - "duration": "26.0", - "name": "system_health.common_mobile/load:media:imgur" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:media:soundcloud" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:media:youtube" - }, - { - "duration": "38.0", - "name": "system_health.common_mobile/load:news:cnn" - }, - { - "duration": "31.0", - "name": "system_health.common_mobile/load:news:irctc" - }, - { - "duration": "29.0", - "name": "system_health.common_mobile/load:news:nytimes" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:news:qq" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:news:reddit" - }, - { - "duration": "28.0", - "name": "system_health.common_mobile/load:news:washingtonpost" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:news:wikipedia" - }, - { - "duration": "24.0", - "name": "system_health.common_mobile/load:search:baidu" - }, - { - "duration": "26.0", - "name": "system_health.common_mobile/load:search:ebay" - }, - { - "duration": "23.0", - "name": "system_health.common_mobile/load:search:google" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:search:taobao" - }, - { - "duration": "24.0", - "name": "system_health.common_mobile/load:search:yahoo" - }, - { - "duration": "23.0", - "name": "system_health.common_mobile/load:search:yandex" - }, - { - "duration": "24.0", - "name": "system_health.common_mobile/load:social:twitter" - }, - { - "duration": "24.0", - "name": "system_health.common_mobile/load:tools:docs" - }, - { - "duration": "27.0", - "name": "system_health.common_mobile/load:tools:drive" - }, - { - "duration": "23.0", - "name": "system_health.common_mobile/load:tools:dropbox" - }, - { - "duration": "35.0", - "name": "system_health.common_mobile/load:tools:gmail" - }, - { - "duration": "25.0", - "name": "system_health.common_mobile/load:tools:stackoverflow" - }, - { - "duration": "30.0", - "name": "system_health.common_mobile/load:tools:weather" - }, - { - "duration": "136.0", - "name": "system_health.common_mobile/long_running:tools:gmail-background" - }, - { - "duration": "134.0", - "name": "system_health.common_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "25.0", - "name": "system_health.memory_mobile/background:media:imgur" - }, - { - "duration": "38.0", - "name": "system_health.memory_mobile/background:news:nytimes" - }, - { - "duration": "25.0", - "name": "system_health.memory_mobile/background:search:google" - }, - { - "duration": "27.0", - "name": "system_health.memory_mobile/background:social:facebook" - }, - { - "duration": "31.0", - "name": "system_health.memory_mobile/background:tools:gmail" - }, - { - "duration": "77.0", - "name": "system_health.memory_mobile/browse:chrome:newtab" - }, - { - "duration": "31.0", - "name": "system_health.memory_mobile/browse:chrome:omnibox" - }, - { - "duration": "75.0", - "name": "system_health.memory_mobile/browse:media:facebook_photos" - }, - { - "duration": "46.0", - "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "70.0", - "name": "system_health.memory_mobile/browse:media:imgur" - }, - { - "duration": "81.0", - "name": "system_health.memory_mobile/browse:media:youtube" - }, - { - "duration": "57.0", - "name": "system_health.memory_mobile/browse:news:cnn" - }, - { - "duration": "52.0", - "name": "system_health.memory_mobile/browse:news:cricbuzz" - }, - { - "duration": "49.0", - "name": "system_health.memory_mobile/browse:news:qq" - }, - { - "duration": "49.0", - "name": "system_health.memory_mobile/browse:news:reddit" - }, - { - "duration": "69.0", - "name": "system_health.memory_mobile/browse:news:toi" - }, - { - "duration": "48.0", - "name": "system_health.memory_mobile/browse:news:washingtonpost" - }, - { - "duration": "52.0", - "name": "system_health.memory_mobile/browse:shopping:amazon" - }, - { - "duration": "53.0", - "name": "system_health.memory_mobile/browse:shopping:avito" - }, - { - "duration": "32.0", - "name": "system_health.memory_mobile/browse:shopping:lazada" - }, - { - "duration": "61.0", - "name": "system_health.memory_mobile/browse:social:facebook" - }, - { - "duration": "76.0", - "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "72.0", - "name": "system_health.memory_mobile/browse:social:instagram" - }, - { - "duration": "71.0", - "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "71.0", - "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "49.0", - "name": "system_health.memory_mobile/browse:social:twitter" - }, - { - "duration": "56.0", - "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "45.0", - "name": "system_health.memory_mobile/browse:tools:maps" - }, - { - "duration": "26.0", - "name": "system_health.memory_mobile/load:chrome:blank" - }, - { - "duration": "23.0", - "name": "system_health.memory_mobile/load:games:bubbles" - }, - { - "duration": "23.0", - "name": "system_health.memory_mobile/load:games:lazors" - }, - { - "duration": "28.0", - "name": "system_health.memory_mobile/load:games:spychase" - }, - { - "duration": "25.0", - "name": "system_health.memory_mobile/load:media:dailymotion" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:media:facebook_photos" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:media:google_images" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:media:imgur" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:media:soundcloud" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:media:youtube" - }, - { - "duration": "28.0", - "name": "system_health.memory_mobile/load:news:cnn" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:news:irctc" - }, - { - "duration": "25.0", - "name": "system_health.memory_mobile/load:news:nytimes" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:news:qq" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:news:reddit" - }, - { - "duration": "25.0", - "name": "system_health.memory_mobile/load:news:washingtonpost" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:news:wikipedia" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:search:baidu" - }, - { - "duration": "23.0", - "name": "system_health.memory_mobile/load:search:ebay" - }, - { - "duration": "23.0", - "name": "system_health.memory_mobile/load:search:google" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:search:taobao" - }, - { - "duration": "26.0", - "name": "system_health.memory_mobile/load:search:yahoo" - }, - { - "duration": "22.0", - "name": "system_health.memory_mobile/load:search:yandex" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:social:twitter" - }, - { - "duration": "23.0", - "name": "system_health.memory_mobile/load:tools:docs" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:tools:drive" - }, - { - "duration": "23.0", - "name": "system_health.memory_mobile/load:tools:dropbox" - }, - { - "duration": "24.0", - "name": "system_health.memory_mobile/load:tools:stackoverflow" - }, - { - "duration": "26.0", - "name": "system_health.memory_mobile/load:tools:weather" - }, - { - "duration": "292.0", - "name": "system_health.memory_mobile/long_running:tools:gmail-background" - }, - { - "duration": "252.0", - "name": "system_health.memory_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "36.0", - "name": "thread_times.key_idle_power_cases/animated-gif.html" - }, - { - "duration": "36.0", - "name": "thread_times.key_idle_power_cases/blank.html" - }, - { - "duration": "37.0", - "name": "thread_times.key_idle_power_cases/css-animation.html" - }, - { - "duration": "36.0", - "name": "thread_times.key_idle_power_cases/idle_power_animated_gif" - }, - { - "duration": "36.0", - "name": "thread_times.key_idle_power_cases/idle_power_blank" - }, - { - "duration": "37.0", - "name": "thread_times.key_idle_power_cases/idle_power_css_animation" - }, - { - "duration": "39.0", - "name": "thread_times.key_idle_power_cases/idle_power_request_animation_frame" - }, - { - "duration": "109.0", - "name": "thread_times.key_idle_power_cases/idle_power_set_timeout_long" - }, - { - "duration": "38.0", - "name": "thread_times.key_idle_power_cases/idle_power_set_timetout" - }, - { - "duration": "38.0", - "name": "thread_times.key_idle_power_cases/request-animation-frame.html" - }, - { - "duration": "38.0", - "name": "thread_times.key_idle_power_cases/set-timeout.html" - }, - { - "duration": "108.0", - "name": "thread_times.key_idle_power_cases/set-timeout.html (Long Idle)" - }, - { - "duration": "34.0", - "name": "thread_times.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "33.0", - "name": "thread_times.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "34.0", - "name": "thread_times.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "26.0", - "name": "thread_times.key_mobile_sites_smooth/reddit" - }, - { - "duration": "24.0", - "name": "thread_times.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "27.0", - "name": "thread_times.key_noop_cases/no_op_raf" - }, - { - "duration": "27.0", - "name": "thread_times.key_noop_cases/no_op_raf.html" - }, - { - "duration": "19.0", - "name": "thread_times.key_noop_cases/no_op_scroll" - }, - { - "duration": "19.0", - "name": "thread_times.key_noop_cases/no_op_scroll.html" - }, - { - "duration": "16.0", - "name": "thread_times.key_noop_cases/no_op_settimeout" - }, - { - "duration": "17.0", - "name": "thread_times.key_noop_cases/no_op_settimeout.html" - }, - { - "duration": "22.0", - "name": "thread_times.key_noop_cases/no_op_touch_handler" - }, - { - "duration": "22.0", - "name": "thread_times.key_noop_cases/no_op_touch_handler.html" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/card_expansion" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/card_expansion_animated" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/card_expansion_images_text" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/card_flying" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/coordinated_animation" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/font_wipe" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/font_wipe.html" - }, - { - "duration": "22.0", - "name": "thread_times.key_silk_cases/google_news_ios" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/gws_boogie_expansion" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/gws_google_expansion" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/horizontal_vertical_expansion" - }, - { - "duration": "32.0", - "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html" - }, - { - "duration": "17.0", - "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html" - }, - { - "duration": "14.0", - "name": "thread_times.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/jx5De/14/show/" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/" - }, - { - "duration": "21.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/" - }, - { - "duration": "22.0", - "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll" - }, - { - "duration": "16.0", - "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe" - }, - { - "duration": "30.0", - "name": "thread_times.key_silk_cases/http://wiltzius.github.io/shape-shifter/" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/http://www.google.com/#q=google" - }, - { - "duration": "18.0", - "name": "thread_times.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie" - }, - { - "duration": "33.0", - "name": "thread_times.key_silk_cases/inbox_app.html?stress_hidey_bars" - }, - { - "duration": "22.0", - "name": "thread_times.key_silk_cases/inbox_app.html?toggle_drawer" - }, - { - "duration": "29.0", - "name": "thread_times.key_silk_cases/infinite_scrolling" - }, - { - "duration": "29.0", - "name": "thread_times.key_silk_cases/infinite_scrolling.html" - }, - { - "duration": "16.0", - "name": "thread_times.key_silk_cases/list_animation_simple" - }, - { - "duration": "16.0", - "name": "thread_times.key_silk_cases/list_animation_simple.html" - }, - { - "duration": "32.0", - "name": "thread_times.key_silk_cases/list_recycle_transform" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/mask_transition_animation" - }, - { - "duration": "16.0", - "name": "thread_times.key_silk_cases/mobile_news_sandbox" - }, - { - "duration": "21.0", - "name": "thread_times.key_silk_cases/parallax_effect" - }, - { - "duration": "14.0", - "name": "thread_times.key_silk_cases/physical_simulation" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/pushState.html" - }, - { - "duration": "30.0", - "name": "thread_times.key_silk_cases/silk_finance" - }, - { - "duration": "30.0", - "name": "thread_times.key_silk_cases/silk_finance.html" - }, - { - "duration": "17.0", - "name": "thread_times.key_silk_cases/sticky_using_webkit" - }, - { - "duration": "33.0", - "name": "thread_times.key_silk_cases/stress_hidey_bars" - }, - { - "duration": "31.0", - "name": "thread_times.key_silk_cases/svg_icon_raster" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/swipe_to_dismiss" - }, - { - "duration": "22.0", - "name": "thread_times.key_silk_cases/toggle_drawer" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/update_history_state" - }, - { - "duration": "20.0", - "name": "thread_times.key_silk_cases/vertical_expansion" - }, - { - "duration": "19.0", - "name": "thread_times.key_silk_cases/zoom_in_animation" - }, - { - "duration": "39.0", - "name": "thread_times.simple_mobile_sites/ebay_scroll" - }, - { - "duration": "30.0", - "name": "thread_times.simple_mobile_sites/flickr_scroll" - }, - { - "duration": "32.0", - "name": "thread_times.simple_mobile_sites/http://m.nytimes.com/" - }, - { - "duration": "40.0", - "name": "thread_times.simple_mobile_sites/http://www.ebay.co.uk/" - }, - { - "duration": "34.0", - "name": "thread_times.simple_mobile_sites/http://www.nyc.gov" - }, - { - "duration": "30.0", - "name": "thread_times.simple_mobile_sites/https://www.flickr.com/" - }, - { - "duration": "34.0", - "name": "thread_times.simple_mobile_sites/nyc_gov_scroll" - }, - { - "duration": "32.0", - "name": "thread_times.simple_mobile_sites/nytimes_scroll" - }, - { - "duration": "28.0", - "name": "thread_times.tough_compositor_cases/cc_poster_circle" - }, - { - "duration": "30.0", - "name": "thread_times.tough_compositor_cases/cc_scroll_200_layer_grid" - }, - { - "duration": "35.0", - "name": "thread_times.tough_compositor_cases/cc_scroll_text_only" - }, - { - "duration": "36.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION" - }, - { - "duration": "32.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS" - }, - { - "duration": "27.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE" - }, - { - "duration": "30.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE" - }, - { - "duration": "29.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID" - }, - { - "duration": "34.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY" - }, - { - "duration": "29.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY" - }, - { - "duration": "29.0", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID" - }, - { - "duration": "37.0", - "name": "thread_times.tough_compositor_cases/js_full_screen_invalidation" - }, - { - "duration": "31.0", - "name": "thread_times.tough_compositor_cases/js_poster_circle" - }, - { - "duration": "30.0", - "name": "thread_times.tough_compositor_cases/js_scroll_200_layer_grid" - }, - { - "duration": "31.0", - "name": "thread_times.tough_compositor_cases/js_scroll_text_only" - }, - { - "duration": "32.0", - "name": "thread_times.tough_compositor_cases/new_tilings" - }, - { - "duration": "22.0", - "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "22.0", - "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "21.0", - "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "28.0", - "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "25.0", - "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "25.0", - "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "26.0", - "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "27.0", - "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "24.0", - "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "21.0", - "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "19.0", - "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "24.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "24.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "23.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "20.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "18.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "17.0", - "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "16.0", - "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "15.0", - "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "14.0", - "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "13.0", - "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "13.0", - "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "13.0", - "name": "tracing.tracing_with_background_memory_infra/Facebook" - }, - { - "duration": "13.0", - "name": "tracing.tracing_with_background_memory_infra/Wikipedia" - }, - { - "duration": "11.0", - "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com" - }, - { - "duration": "11.0", - "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/" - }, - { - "duration": "10.0", - "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/" - }, - { - "duration": "11.0", - "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/" - }, - { - "duration": "14.0", - "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com" - }, - { - "duration": "19.0", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "14.0", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/" - }, - { - "duration": "98.0", - "name": "v8.browsing_mobile-future/browse:chrome:newtab" - }, - { - "duration": "38.0", - "name": "v8.browsing_mobile-future/browse:chrome:omnibox" - }, - { - "duration": "119.0", - "name": "v8.browsing_mobile-future/browse:media:facebook_photos" - }, - { - "duration": "77.0", - "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll" - }, - { - "duration": "118.0", - "name": "v8.browsing_mobile-future/browse:media:imgur" - }, - { - "duration": "133.0", - "name": "v8.browsing_mobile-future/browse:media:youtube" - }, - { - "duration": "169.0", - "name": "v8.browsing_mobile-future/browse:news:cnn" - }, - { - "duration": "91.0", - "name": "v8.browsing_mobile-future/browse:news:cricbuzz" - }, - { - "duration": "80.0", - "name": "v8.browsing_mobile-future/browse:news:qq" - }, - { - "duration": "72.0", - "name": "v8.browsing_mobile-future/browse:news:reddit" - }, - { - "duration": "241.0", - "name": "v8.browsing_mobile-future/browse:news:toi" - }, - { - "duration": "85.0", - "name": "v8.browsing_mobile-future/browse:news:washingtonpost" - }, - { - "duration": "121.0", - "name": "v8.browsing_mobile-future/browse:shopping:amazon" - }, - { - "duration": "108.0", - "name": "v8.browsing_mobile-future/browse:shopping:avito" - }, - { - "duration": "52.0", - "name": "v8.browsing_mobile-future/browse:shopping:lazada" - }, - { - "duration": "114.0", - "name": "v8.browsing_mobile-future/browse:social:facebook" - }, - { - "duration": "320.0", - "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll" - }, - { - "duration": "117.0", - "name": "v8.browsing_mobile-future/browse:social:instagram" - }, - { - "duration": "141.0", - "name": "v8.browsing_mobile-future/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "165.0", - "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "75.0", - "name": "v8.browsing_mobile-future/browse:social:twitter" - }, - { - "duration": "121.0", - "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "77.0", - "name": "v8.browsing_mobile-future/browse:tools:maps" - }, - { - "duration": "100.0", - "name": "v8.browsing_mobile/browse:chrome:newtab" - }, - { - "duration": "39.0", - "name": "v8.browsing_mobile/browse:chrome:omnibox" - }, - { - "duration": "121.0", - "name": "v8.browsing_mobile/browse:media:facebook_photos" - }, - { - "duration": "78.0", - "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "121.0", - "name": "v8.browsing_mobile/browse:media:imgur" - }, - { - "duration": "131.0", - "name": "v8.browsing_mobile/browse:media:youtube" - }, - { - "duration": "169.0", - "name": "v8.browsing_mobile/browse:news:cnn" - }, - { - "duration": "90.0", - "name": "v8.browsing_mobile/browse:news:cricbuzz" - }, - { - "duration": "82.0", - "name": "v8.browsing_mobile/browse:news:qq" - }, - { - "duration": "73.0", - "name": "v8.browsing_mobile/browse:news:reddit" - }, - { - "duration": "237.0", - "name": "v8.browsing_mobile/browse:news:toi" - }, - { - "duration": "88.0", - "name": "v8.browsing_mobile/browse:news:washingtonpost" - }, - { - "duration": "129.0", - "name": "v8.browsing_mobile/browse:shopping:amazon" - }, - { - "duration": "107.0", - "name": "v8.browsing_mobile/browse:shopping:avito" - }, - { - "duration": "53.0", - "name": "v8.browsing_mobile/browse:shopping:lazada" - }, - { - "duration": "113.0", - "name": "v8.browsing_mobile/browse:social:facebook" - }, - { - "duration": "323.0", - "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "113.0", - "name": "v8.browsing_mobile/browse:social:instagram" - }, - { - "duration": "145.0", - "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "167.0", - "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "76.0", - "name": "v8.browsing_mobile/browse:social:twitter" - }, - { - "duration": "121.0", - "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "77.0", - "name": "v8.browsing_mobile/browse:tools:maps" - }, - { - "duration": "9.0", - "name": "wasm/AsmJsZenGarden" - }, - { - "duration": "21.0", - "name": "wasm/WasmSpaceBuggy" - }, - { - "duration": "9.0", - "name": "wasm/WasmStylizedRenderer" - }, - { - "duration": "9.0", - "name": "wasm/WasmSunTemple" - }, - { - "duration": "17.0", - "name": "wasm/WasmTanks" - }, - { - "duration": "9.0", - "name": "wasm/WasmZenGarden" - }, - { - "duration": "22.0", - "name": "webrtc/10s_datachannel_transfer" - }, - { - "duration": "27.0", - "name": "webrtc/canvas_capture_peer_connection" - }, - { - "duration": "36.0", - "name": "webrtc/codec_constraints_h264" - }, - { - "duration": "36.0", - "name": "webrtc/codec_constraints_vp8" - }, - { - "duration": "36.0", - "name": "webrtc/codec_constraints_vp9" - }, - { - "duration": "23.0", - "name": "webrtc/hd_local_stream_10s" - }, - { - "duration": "45.0", - "name": "webrtc/multiple_peerconnections" - }, - { - "duration": "68.0", - "name": "webrtc/pause_play_peerconnections" - } -]
diff --git a/tools/perf/core/shard_maps/timing_data/mac1012_story_timing.json b/tools/perf/core/shard_maps/timing_data/mac1012_story_timing.json deleted file mode 100644 index 0940e02..0000000 --- a/tools/perf/core/shard_maps/timing_data/mac1012_story_timing.json +++ /dev/null
@@ -1,5694 +0,0 @@ -[ - { - "duration": "8.960256459459458", - "name": "blink_perf.bindings/append-child.html" - }, - { - "duration": "7.376134381081082", - "name": "blink_perf.bindings/create-element.html" - }, - { - "duration": "6.83619094054054", - "name": "blink_perf.bindings/document-implementation.html" - }, - { - "duration": "6.6628048783783775", - "name": "blink_perf.bindings/dom-attribute-on-prototoype.html" - }, - { - "duration": "6.822711875675675", - "name": "blink_perf.bindings/first-child.html" - }, - { - "duration": "3.4028262270270275", - "name": "blink_perf.bindings/gc-forest.html" - }, - { - "duration": "3.992991581081082", - "name": "blink_perf.bindings/gc-mini-tree.html" - }, - { - "duration": "16.33124027027027", - "name": "blink_perf.bindings/gc-tree.html" - }, - { - "duration": "6.712598397297298", - "name": "blink_perf.bindings/get-attribute-rare.html" - }, - { - "duration": "6.776766940540541", - "name": "blink_perf.bindings/get-attribute.html" - }, - { - "duration": "6.836365545945947", - "name": "blink_perf.bindings/get-element-by-id.html" - }, - { - "duration": "6.738692418918919", - "name": "blink_perf.bindings/get-elements-by-tag-name.html" - }, - { - "duration": "6.9598345162162145", - "name": "blink_perf.bindings/id-getter.html" - }, - { - "duration": "6.849441121621621", - "name": "blink_perf.bindings/id-setter.html" - }, - { - "duration": "7.3500484297297275", - "name": "blink_perf.bindings/indexed-getter.html" - }, - { - "duration": "6.667772643243243", - "name": "blink_perf.bindings/insert-before.html" - }, - { - "duration": "6.800501400000003", - "name": "blink_perf.bindings/named-property-enumerator.html" - }, - { - "duration": "19.917038675675677", - "name": "blink_perf.bindings/node-list-access.html" - }, - { - "duration": "6.828512243243243", - "name": "blink_perf.bindings/node-type.html" - }, - { - "duration": "1.465146143243243", - "name": "blink_perf.bindings/post-message.html" - }, - { - "duration": "6.985167083783783", - "name": "blink_perf.bindings/sequence-conversion-array.html" - }, - { - "duration": "7.023515518918918", - "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html" - }, - { - "duration": "1.5721907243243245", - "name": "blink_perf.bindings/serialize-array.html" - }, - { - "duration": "1.2826985459459457", - "name": "blink_perf.bindings/serialize-long-string.html" - }, - { - "duration": "2.9387476540540547", - "name": "blink_perf.bindings/serialize-map.html" - }, - { - "duration": "1.303903456756757", - "name": "blink_perf.bindings/serialize-nested-array.html" - }, - { - "duration": "6.736935475675675", - "name": "blink_perf.bindings/set-attribute-rare.html" - }, - { - "duration": "6.877832835135134", - "name": "blink_perf.bindings/set-attribute.html" - }, - { - "duration": "6.516000945945946", - "name": "blink_perf.bindings/structured-clone-json-deserialize.html" - }, - { - "duration": "6.308375740540541", - "name": "blink_perf.bindings/structured-clone-json-serialize.html" - }, - { - "duration": "3.8272098621621615", - "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html" - }, - { - "duration": "3.785892037837837", - "name": "blink_perf.bindings/structured-clone-long-string-serialize.html" - }, - { - "duration": "7.364221910810813", - "name": "blink_perf.bindings/typed-array-construct-from-array.html" - }, - { - "duration": "6.845970900000001", - "name": "blink_perf.bindings/typed-array-construct-from-same-type.html" - }, - { - "duration": "6.958278508108109", - "name": "blink_perf.bindings/typed-array-construct-from-typed.html" - }, - { - "duration": "6.672509151351352", - "name": "blink_perf.bindings/typed-array-set-from-typed.html" - }, - { - "duration": "6.810353164864867", - "name": "blink_perf.bindings/undefined-first-child.html" - }, - { - "duration": "6.653950640540543", - "name": "blink_perf.bindings/undefined-get-element-by-id.html" - }, - { - "duration": "6.766140337837837", - "name": "blink_perf.bindings/undefined-id-getter.html" - }, - { - "duration": "9.532661621621623", - "name": "blink_perf.canvas/createImageBitmapFromImageData.html" - }, - { - "duration": "6.547650767567569", - "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "12.355803432432433", - "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "1.332524502702703", - "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html" - }, - { - "duration": "3.7747110162162163", - "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "3.8096741108108105", - "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "4.645618375675676", - "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "7.6614039567567565", - "name": "blink_perf.canvas/drawimage-not-pixelaligned.html" - }, - { - "duration": "7.582014254054054", - "name": "blink_perf.canvas/drawimage.html" - }, - { - "duration": "7.671882840540541", - "name": "blink_perf.canvas/getImageData.html" - }, - { - "duration": "6.934235843243243", - "name": "blink_perf.canvas/getImageDataColorManaged.html" - }, - { - "duration": "7.554265964864863", - "name": "blink_perf.canvas/putImageData.html" - }, - { - "duration": "6.742011616216216", - "name": "blink_perf.canvas/toBlob_duration.html" - }, - { - "duration": "2.7262764702702693", - "name": "blink_perf.canvas/toBlob_duration_jpeg.html" - }, - { - "duration": "2.404524394594595", - "name": "blink_perf.canvas/transferFromImageBitmap.html" - }, - { - "duration": "3.7508849", - "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html" - }, - { - "duration": "8.209883051351351", - "name": "blink_perf.canvas/upload-video-to-sub-texture.html" - }, - { - "duration": "1.6901786270270267", - "name": "blink_perf.canvas/upload-video-to-texture.html" - }, - { - "duration": "3.865295721621622", - "name": "blink_perf.canvas/upload-webgl-to-texture.html" - }, - { - "duration": "13.874755361111108", - "name": "blink_perf.css/AttributeDescendantSelector.html" - }, - { - "duration": "7.0071268", - "name": "blink_perf.css/CSSPropertySetterGetter.html" - }, - { - "duration": "7.0284523", - "name": "blink_perf.css/CSSPropertySetterGetterMethods.html" - }, - { - "duration": "7.347104611111113", - "name": "blink_perf.css/CSSPropertyUpdateValue.html" - }, - { - "duration": "6.3025206222222225", - "name": "blink_perf.css/ChangeStyleChildClassSelector.html" - }, - { - "duration": "6.301286836111111", - "name": "blink_perf.css/ChangeStyleChildElementSelectors.html" - }, - { - "duration": "6.2814088861111115", - "name": "blink_perf.css/ChangeStyleElementSelector.html" - }, - { - "duration": "6.254317605555556", - "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html" - }, - { - "duration": "6.298482394444444", - "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html" - }, - { - "duration": "6.23627936111111", - "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html" - }, - { - "duration": "6.154798336111111", - "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html" - }, - { - "duration": "6.118395563888888", - "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html" - }, - { - "duration": "6.127613166666666", - "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html" - }, - { - "duration": "6.102952036111111", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html" - }, - { - "duration": "6.160826719444443", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "7.2046931388888895", - "name": "blink_perf.css/ChangeStyleShallowTree.html" - }, - { - "duration": "6.155368311111112", - "name": "blink_perf.css/ChangeStyleSingleClassSelector.html" - }, - { - "duration": "6.138644358333334", - "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html" - }, - { - "duration": "6.148338800000001", - "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html" - }, - { - "duration": "6.1443218055555535", - "name": "blink_perf.css/ChangeStyleUniversalSelector.html" - }, - { - "duration": "6.120344038888889", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html" - }, - { - "duration": "6.110495483333334", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "11.15817361111111", - "name": "blink_perf.css/ClassDescendantSelector.html" - }, - { - "duration": "7.928971305555554", - "name": "blink_perf.css/ClassInvalidation.html" - }, - { - "duration": "10.303034750000004", - "name": "blink_perf.css/FocusUpdate.html" - }, - { - "duration": "6.653497402777777", - "name": "blink_perf.css/LoadBootstrapBlog.html" - }, - { - "duration": "6.776161833333333", - "name": "blink_perf.css/LoadMaterializeStarterPage.html" - }, - { - "duration": "6.99379410833333", - "name": "blink_perf.css/LoadSemanticPageExample.html" - }, - { - "duration": "6.993864555555554", - "name": "blink_perf.css/PseudoClassSelectors.html" - }, - { - "duration": "7.695606588235294", - "name": "blink_perf.css/SelectorCountScaling.html" - }, - { - "duration": "10.703977324324324", - "name": "blink_perf.dom/addRange.html" - }, - { - "duration": "1.5626855243243238", - "name": "blink_perf.dom/delete-in-password-field.html" - }, - { - "duration": "7.130308862162161", - "name": "blink_perf.dom/div-editable.html" - }, - { - "duration": "1.2980855513513514", - "name": "blink_perf.dom/inner_html_with_selection.html" - }, - { - "duration": "15.904510891891892", - "name": "blink_perf.dom/long-sibling-list.html" - }, - { - "duration": "2.082055445945946", - "name": "blink_perf.dom/modify-element-classname.html" - }, - { - "duration": "1.7407453027027024", - "name": "blink_perf.dom/modify-element-id.html" - }, - { - "duration": "1.7262009054054055", - "name": "blink_perf.dom/modify-element-title.html" - }, - { - "duration": "1.5395644702702707", - "name": "blink_perf.dom/move-down-with-hidden-elements.html" - }, - { - "duration": "1.554258016216216", - "name": "blink_perf.dom/move-up-with-hidden-elements.html" - }, - { - "duration": "1.3077688702702701", - "name": "blink_perf.dom/remove_child_with_selection.html" - }, - { - "duration": "7.105649572972974", - "name": "blink_perf.dom/select-multiple-add.html" - }, - { - "duration": "7.231162748648648", - "name": "blink_perf.dom/select-single-add.html" - }, - { - "duration": "7.875329089189188", - "name": "blink_perf.dom/select-single-remove.html" - }, - { - "duration": "7.534921013513514", - "name": "blink_perf.dom/textarea-dom.html" - }, - { - "duration": "7.9708355351351345", - "name": "blink_perf.dom/textarea-edit.html" - }, - { - "duration": "9.276065243243243", - "name": "blink_perf.events/EventsDispatching.html" - }, - { - "duration": "8.44198383783784", - "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html" - }, - { - "duration": "21.194762216216215", - "name": "blink_perf.events/EventsDispatchingInShadowTrees.html" - }, - { - "duration": "8.845441216216217", - "name": "blink_perf.events/hit-test-lots-of-layers.html" - }, - { - "duration": "15.719419567567567", - "name": "blink_perf.image_decoder/decode-gif.html" - }, - { - "duration": "7.93450028108108", - "name": "blink_perf.image_decoder/decode-jpeg.html" - }, - { - "duration": "13.07304058108108", - "name": "blink_perf.image_decoder/decode-lossless-webp.html" - }, - { - "duration": "7.198945929729729", - "name": "blink_perf.image_decoder/decode-lossy-webp.html" - }, - { - "duration": "9.936797581081084", - "name": "blink_perf.image_decoder/decode-png-palette-opaque.html" - }, - { - "duration": "7.7760739675675685", - "name": "blink_perf.image_decoder/decode-png-palette.html" - }, - { - "duration": "13.124076581081075", - "name": "blink_perf.image_decoder/decode-png.html" - }, - { - "duration": "14.208034675675679", - "name": "blink_perf.layout/ArabicLineLayout.html" - }, - { - "duration": "1.4943000432432434", - "name": "blink_perf.layout/Shapes/MultipleShapes.html" - }, - { - "duration": "6.865831789189191", - "name": "blink_perf.layout/SimpleTextPathLineLayout.html" - }, - { - "duration": "7.275825394594594", - "name": "blink_perf.layout/add-remove-inline-floats.html" - }, - { - "duration": "7.014069418918919", - "name": "blink_perf.layout/attach-inlines-2.html" - }, - { - "duration": "6.742081521621621", - "name": "blink_perf.layout/attach-inlines.html" - }, - { - "duration": "8.125929029729727", - "name": "blink_perf.layout/auto-grid-lots-of-data.html" - }, - { - "duration": "6.68381557027027", - "name": "blink_perf.layout/chapter-reflow-once-random.html" - }, - { - "duration": "12.653700662162162", - "name": "blink_perf.layout/chapter-reflow-once.html" - }, - { - "duration": "8.384600472972972", - "name": "blink_perf.layout/chapter-reflow-thrice.html" - }, - { - "duration": "9.54320683783784", - "name": "blink_perf.layout/chapter-reflow-twice.html" - }, - { - "duration": "10.68801952702703", - "name": "blink_perf.layout/chapter-reflow.html" - }, - { - "duration": "3.8492108297297296", - "name": "blink_perf.layout/character_fallback.html" - }, - { - "duration": "1.4588405216216214", - "name": "blink_perf.layout/character_fallback_aat.html" - }, - { - "duration": "8.48531522972973", - "name": "blink_perf.layout/fixed-grid-lots-of-data.html" - }, - { - "duration": "8.297918256756756", - "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html" - }, - { - "duration": "7.112286602702701", - "name": "blink_perf.layout/flexbox-column-nowrap.html" - }, - { - "duration": "7.104304121621621", - "name": "blink_perf.layout/flexbox-column-wrap.html" - }, - { - "duration": "6.917115983783784", - "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html" - }, - { - "duration": "7.872306670270272", - "name": "blink_perf.layout/flexbox-lots-of-data.html" - }, - { - "duration": "7.055328016216216", - "name": "blink_perf.layout/flexbox-row-nowrap.html" - }, - { - "duration": "7.129850516216215", - "name": "blink_perf.layout/flexbox-row-wrap.html" - }, - { - "duration": "8.188121164864866", - "name": "blink_perf.layout/flexbox-with-stretch-layout.html" - }, - { - "duration": "7.23329107027027", - "name": "blink_perf.layout/floats_100_100.html" - }, - { - "duration": "7.385129981081082", - "name": "blink_perf.layout/floats_100_100_nested.html" - }, - { - "duration": "4.883930662162162", - "name": "blink_perf.layout/floats_10_1000.html" - }, - { - "duration": "2.8508621675675685", - "name": "blink_perf.layout/floats_20_100.html" - }, - { - "duration": "3.2631202459459465", - "name": "blink_perf.layout/floats_20_100_nested.html" - }, - { - "duration": "2.0363707729729734", - "name": "blink_perf.layout/floats_2_100.html" - }, - { - "duration": "1.956557405405405", - "name": "blink_perf.layout/floats_2_100_nested.html" - }, - { - "duration": "3.5925398972972973", - "name": "blink_perf.layout/floats_50_100.html" - }, - { - "duration": "3.79678461081081", - "name": "blink_perf.layout/floats_50_100_nested.html" - }, - { - "duration": "11.753409621621623", - "name": "blink_perf.layout/hindi-line-layout.html" - }, - { - "duration": "7.12732874864865", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html" - }, - { - "duration": "7.030093556756758", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html" - }, - { - "duration": "7.030012600000001", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html" - }, - { - "duration": "1.350735235135135", - "name": "blink_perf.layout/latin-complex-text.html" - }, - { - "duration": "1.8157927810810812", - "name": "blink_perf.layout/layers_overlap_2d.html" - }, - { - "duration": "1.9387704864864859", - "name": "blink_perf.layout/layers_overlap_3d.html" - }, - { - "duration": "5.496430056756757", - "name": "blink_perf.layout/line-layout-line-height.html" - }, - { - "duration": "6.726405848648651", - "name": "blink_perf.layout/line-layout-repeat-append.html" - }, - { - "duration": "6.849355786486487", - "name": "blink_perf.layout/line-layout.html" - }, - { - "duration": "1.5756603675675676", - "name": "blink_perf.layout/long-line-nowrap-collapse.html" - }, - { - "duration": "1.5711319513513515", - "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html" - }, - { - "duration": "3.932565505405405", - "name": "blink_perf.layout/long-line-nowrap.html" - }, - { - "duration": "7.161559291891893", - "name": "blink_perf.layout/multicol/deeply-nested-tables.html" - }, - { - "duration": "7.136085667567569", - "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html" - }, - { - "duration": "6.6681868864864855", - "name": "blink_perf.layout/multicol/lots-of-text-autofill.html" - }, - { - "duration": "6.59980391891892", - "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html" - }, - { - "duration": "6.631259032432434", - "name": "blink_perf.layout/multicol/lots-of-text-balanced.html" - }, - { - "duration": "7.0538907891891895", - "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html" - }, - { - "duration": "6.786697883783783", - "name": "blink_perf.layout/multicol/tall-content-short-columns.html" - }, - { - "duration": "7.048064562162162", - "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html" - }, - { - "duration": "7.068471300000001", - "name": "blink_perf.layout/nested-grid.html" - }, - { - "duration": "7.129423305405407", - "name": "blink_perf.layout/nested-percent-height-tables.html" - }, - { - "duration": "46.97381245945946", - "name": "blink_perf.layout/subtree-detaching.html" - }, - { - "duration": "2.272726872972973", - "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html" - }, - { - "duration": "2.7719594783783776", - "name": "blink_perf.layout/word-break-break-all.html" - }, - { - "duration": "2.757234989189189", - "name": "blink_perf.layout/word-break-break-word.html" - }, - { - "duration": "2.7687943729729723", - "name": "blink_perf.layout/word-wrap-break-word.html" - }, - { - "duration": "9.301432918918918", - "name": "blink_perf.owp_storage/blob-perf-files.html" - }, - { - "duration": "8.45514506756757", - "name": "blink_perf.owp_storage/blob-perf-ipc.html" - }, - { - "duration": "7.125718975675675", - "name": "blink_perf.owp_storage/blob-perf-shm.html" - }, - { - "duration": "8.435046945945947", - "name": "blink_perf.owp_storage/blob-perf-tiny.html" - }, - { - "duration": "8.470627743243245", - "name": "blink_perf.owp_storage/idb-load-docs.html" - }, - { - "duration": "9.216856319444442", - "name": "blink_perf.paint/appending-text.html" - }, - { - "duration": "12.655533097222218", - "name": "blink_perf.paint/color-changes.html" - }, - { - "duration": "11.927033291666666", - "name": "blink_perf.paint/complex-content-slow-scroll.html" - }, - { - "duration": "9.665613597222219", - "name": "blink_perf.paint/containment-resize.html" - }, - { - "duration": "10.340964111111115", - "name": "blink_perf.paint/fixed-and-many-layers-scroll.html" - }, - { - "duration": "11.367298347222224", - "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html" - }, - { - "duration": "8.906942597222223", - "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html" - }, - { - "duration": "11.895780236111108", - "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html" - }, - { - "duration": "10.064014555555557", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html" - }, - { - "duration": "10.566386875000001", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html" - }, - { - "duration": "8.681112861111112", - "name": "blink_perf.paint/large-table-collapsed-border-change.html" - }, - { - "duration": "10.917510569444442", - "name": "blink_perf.paint/large-table-repaint.html" - }, - { - "duration": "8.373493708333335", - "name": "blink_perf.paint/move-text-with-mask.html" - }, - { - "duration": "10.106495972222222", - "name": "blink_perf.paint/paint-offset-changes.html" - }, - { - "duration": "15.181958861111111", - "name": "blink_perf.paint/transform-changes.html" - }, - { - "duration": "9.512041375", - "name": "blink_perf.parser/css-parser-yui.html" - }, - { - "duration": "6.748737833333332", - "name": "blink_perf.parser/html-parser-threaded.html" - }, - { - "duration": "6.573137105555556", - "name": "blink_perf.parser/html-parser.html" - }, - { - "duration": "33.04385908333333", - "name": "blink_perf.parser/html5-full-render.html" - }, - { - "duration": "7.185502672222223", - "name": "blink_perf.parser/iframe-append-remove.html" - }, - { - "duration": "7.405465636111111", - "name": "blink_perf.parser/innerHTML-setter-siblings.html" - }, - { - "duration": "7.332257600000001", - "name": "blink_perf.parser/innerHTML-setter.html" - }, - { - "duration": "7.317969166666667", - "name": "blink_perf.parser/query-selector-all-attribute-complex.html" - }, - { - "duration": "7.325370336111113", - "name": "blink_perf.parser/query-selector-all-attribute.html" - }, - { - "duration": "7.211272419444443", - "name": "blink_perf.parser/query-selector-all-class-deep.html" - }, - { - "duration": "8.551177138888887", - "name": "blink_perf.parser/query-selector-all-class-first.html" - }, - { - "duration": "7.416076338888889", - "name": "blink_perf.parser/query-selector-all-class-last.html" - }, - { - "duration": "7.5717231722222245", - "name": "blink_perf.parser/query-selector-all-class.html" - }, - { - "duration": "7.2301646277777785", - "name": "blink_perf.parser/query-selector-all-deep.html" - }, - { - "duration": "8.756113291666667", - "name": "blink_perf.parser/query-selector-all-first.html" - }, - { - "duration": "8.812626027777776", - "name": "blink_perf.parser/query-selector-all-id-deep.html" - }, - { - "duration": "8.537789972222221", - "name": "blink_perf.parser/query-selector-all-id-first.html" - }, - { - "duration": "8.933691416666667", - "name": "blink_perf.parser/query-selector-all-id-last.html" - }, - { - "duration": "7.1728614916666675", - "name": "blink_perf.parser/query-selector-all-last.html" - }, - { - "duration": "7.275198877777778", - "name": "blink_perf.parser/query-selector-deep.html" - }, - { - "duration": "6.984518122222223", - "name": "blink_perf.parser/query-selector-first.html" - }, - { - "duration": "7.022112513888889", - "name": "blink_perf.parser/query-selector-id-deep.html" - }, - { - "duration": "7.5036327722222245", - "name": "blink_perf.parser/query-selector-id-last.html" - }, - { - "duration": "7.154861838888889", - "name": "blink_perf.parser/query-selector-last.html" - }, - { - "duration": "6.663223386111112", - "name": "blink_perf.parser/simple-url.html" - }, - { - "duration": "7.644716238888886", - "name": "blink_perf.parser/textarea-parsing.html" - }, - { - "duration": "7.425186116666669", - "name": "blink_perf.parser/tiny-innerHTML.html" - }, - { - "duration": "8.504079638888888", - "name": "blink_perf.parser/url-parser.html" - }, - { - "duration": "7.182861388888891", - "name": "blink_perf.parser/xml-parser.html" - }, - { - "duration": "4.129536983783783", - "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html" - }, - { - "duration": "1.6907527594594591", - "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html" - }, - { - "duration": "1.752588989189189", - "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html" - }, - { - "duration": "1.3414538891891898", - "name": "blink_perf.shadow_dom/shadow-style-share.html" - }, - { - "duration": "1.5166720351351348", - "name": "blink_perf.shadow_dom/style-sheet-insert.html" - }, - { - "duration": "1.5316037594594591", - "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html" - }, - { - "duration": "1.8243143216216213", - "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html" - }, - { - "duration": "2.6161963243243243", - "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html" - }, - { - "duration": "2.7664721378378374", - "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html" - }, - { - "duration": "1.5208932864864866", - "name": "blink_perf.shadow_dom/v0-content-reprojection.html" - }, - { - "duration": "1.3961794513513512", - "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html" - }, - { - "duration": "1.3234779783783786", - "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html" - }, - { - "duration": "1.5454668972972971", - "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html" - }, - { - "duration": "1.348754854054054", - "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html" - }, - { - "duration": "11.545008148648645", - "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html" - }, - { - "duration": "1.3032808945945944", - "name": "blink_perf.shadow_dom/v1-distribution.html" - }, - { - "duration": "1.2824134918918917", - "name": "blink_perf.shadow_dom/v1-host-child-append.html" - }, - { - "duration": "11.490774027027026", - "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html" - }, - { - "duration": "22.191232567567567", - "name": "blink_perf.shadow_dom/v1-large-deep-layout.html" - }, - { - "duration": "1.286741754054054", - "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html" - }, - { - "duration": "1.2680600459459455", - "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html" - }, - { - "duration": "1.5736437054054058", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html" - }, - { - "duration": "1.2952796189189189", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "1.3033758486486484", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html" - }, - { - "duration": "1.3788280459459463", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html" - }, - { - "duration": "1.2879160513513515", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "1.3009531621621624", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html" - }, - { - "duration": "1.2828242027027028", - "name": "blink_perf.shadow_dom/v1-slot-append.html" - }, - { - "duration": "2.2693072054054046", - "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html" - }, - { - "duration": "2.2700022459459452", - "name": "blink_perf.shadow_dom/v1-small-deep-layout.html" - }, - { - "duration": "1.2846065432432434", - "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html" - }, - { - "duration": "1.310353018918919", - "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html" - }, - { - "duration": "3.601881424324324", - "name": "blink_perf.svg/AzLizardBenjiPark.html" - }, - { - "duration": "2.477357678378379", - "name": "blink_perf.svg/Bamboo.html" - }, - { - "duration": "1.5371056891891888", - "name": "blink_perf.svg/Cactus.html" - }, - { - "duration": "1.528599391891892", - "name": "blink_perf.svg/Cowboy.html" - }, - { - "duration": "3.7703578", - "name": "blink_perf.svg/Cowboy_transform.html" - }, - { - "duration": "1.3876730162162165", - "name": "blink_perf.svg/CrawFishGanson.html" - }, - { - "duration": "1.495045794594595", - "name": "blink_perf.svg/Debian.html" - }, - { - "duration": "1.3357924324324328", - "name": "blink_perf.svg/DropsOnABlade.html" - }, - { - "duration": "1.3449378729729728", - "name": "blink_perf.svg/FlowerFromMyGarden.html" - }, - { - "duration": "1.4629230729729734", - "name": "blink_perf.svg/FoodLeifLodahl.html" - }, - { - "duration": "1.489532013513514", - "name": "blink_perf.svg/France.html" - }, - { - "duration": "1.3387789810810808", - "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html" - }, - { - "duration": "1.5533717513513512", - "name": "blink_perf.svg/GearFlowers.html" - }, - { - "duration": "1.4580355243243244", - "name": "blink_perf.svg/HarveyRayner.html" - }, - { - "duration": "1.371933564864865", - "name": "blink_perf.svg/HereGear.html" - }, - { - "duration": "2.76618225945946", - "name": "blink_perf.svg/MtSaintHelens.html" - }, - { - "duration": "1.3017238405405407", - "name": "blink_perf.svg/Samurai.html" - }, - { - "duration": "28.654858540540534", - "name": "blink_perf.svg/SierpinskiCarpet.html" - }, - { - "duration": "2.258932886486486", - "name": "blink_perf.svg/SvgCubics.html" - }, - { - "duration": "1.7122763189189187", - "name": "blink_perf.svg/SvgHitTesting.html" - }, - { - "duration": "7.811848689189188", - "name": "blink_perf.svg/SvgNestedUse.html" - }, - { - "duration": "1.4791418675675676", - "name": "blink_perf.svg/UnderTheSee.html" - }, - { - "duration": "1.6314424054054057", - "name": "blink_perf.svg/WorldIso.html" - }, - { - "duration": "2.4628368351351355", - "name": "blink_perf.svg/Worldcup.html" - }, - { - "duration": "33.65733644444444", - "name": "dromaeo/http://dromaeo.com?dom-attr" - }, - { - "duration": "33.51815622222221", - "name": "dromaeo/http://dromaeo.com?dom-modify" - }, - { - "duration": "46.62220277777778", - "name": "dromaeo/http://dromaeo.com?dom-query" - }, - { - "duration": "27.12640508333333", - "name": "dromaeo/http://dromaeo.com?dom-traverse" - }, - { - "duration": "8.361888986486488", - "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html" - }, - { - "duration": "1.3292940459459457", - "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html" - }, - { - "duration": "1.3782127694444446", - "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html" - }, - { - "duration": "185.65575135135137", - "name": "jetstream/http://browserbench.org/JetStream/" - }, - { - "duration": "23.115383055555558", - "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html" - }, - { - "duration": "61.24238319696969", - "name": "loading.desktop/24h" - }, - { - "duration": "26.609354250000003", - "name": "loading.desktop/24h_cold" - }, - { - "duration": "34.68846325", - "name": "loading.desktop/24h_warm" - }, - { - "duration": "100.35381830303032", - "name": "loading.desktop/AirBnB" - }, - { - "duration": "39.8633885", - "name": "loading.desktop/AirBnB_cold" - }, - { - "duration": "59.80281574999999", - "name": "loading.desktop/AirBnB_warm" - }, - { - "duration": "48.434719666666666", - "name": "loading.desktop/Aljayyash" - }, - { - "duration": "22.0845525", - "name": "loading.desktop/Aljayyash_cold" - }, - { - "duration": "26.395913375", - "name": "loading.desktop/Aljayyash_warm" - }, - { - "duration": "95.00097803030302", - "name": "loading.desktop/AllRecipes" - }, - { - "duration": "36.6232995", - "name": "loading.desktop/AllRecipes_cold" - }, - { - "duration": "57.965820750000006", - "name": "loading.desktop/AllRecipes_warm" - }, - { - "duration": "104.26652406060606", - "name": "loading.desktop/ArsTechnica" - }, - { - "duration": "39.51999525", - "name": "loading.desktop/ArsTechnica_cold" - }, - { - "duration": "58.807424749999996", - "name": "loading.desktop/ArsTechnica_warm" - }, - { - "duration": "48.99256522727273", - "name": "loading.desktop/Baidu" - }, - { - "duration": "21.82160375", - "name": "loading.desktop/Baidu_cold" - }, - { - "duration": "27.15095225", - "name": "loading.desktop/Baidu_warm" - }, - { - "duration": "75.53524006060607", - "name": "loading.desktop/Bhaskar" - }, - { - "duration": "31.567435250000003", - "name": "loading.desktop/Bhaskar_cold" - }, - { - "duration": "43.92694425", - "name": "loading.desktop/Bhaskar_warm" - }, - { - "duration": "62.77154201515152", - "name": "loading.desktop/Chosun" - }, - { - "duration": "26.994935625000004", - "name": "loading.desktop/Chosun_cold" - }, - { - "duration": "34.923154749999995", - "name": "loading.desktop/Chosun_warm" - }, - { - "duration": "56.80244531818182", - "name": "loading.desktop/Colorado.edu" - }, - { - "duration": "24.66709075", - "name": "loading.desktop/Colorado.edu_cold" - }, - { - "duration": "32.03421675", - "name": "loading.desktop/Colorado.edu_warm" - }, - { - "duration": "60.261231318181814", - "name": "loading.desktop/Danawa" - }, - { - "duration": "26.23972375", - "name": "loading.desktop/Danawa_cold" - }, - { - "duration": "34.0827965", - "name": "loading.desktop/Danawa_warm" - }, - { - "duration": "56.900626166666676", - "name": "loading.desktop/Daum" - }, - { - "duration": "24.9109605", - "name": "loading.desktop/Daum_cold" - }, - { - "duration": "31.640629000000004", - "name": "loading.desktop/Daum_warm" - }, - { - "duration": "65.33932131818182", - "name": "loading.desktop/Donga" - }, - { - "duration": "27.593401500000002", - "name": "loading.desktop/Donga_cold" - }, - { - "duration": "36.722539499999996", - "name": "loading.desktop/Donga_warm" - }, - { - "duration": "88.18139448484847", - "name": "loading.desktop/Economist" - }, - { - "duration": "35.23546375", - "name": "loading.desktop/Economist_cold" - }, - { - "duration": "52.71560624999999", - "name": "loading.desktop/Economist_warm" - }, - { - "duration": "149.28064193939392", - "name": "loading.desktop/Elmundo" - }, - { - "duration": "39.702808000000005", - "name": "loading.desktop/Elmundo_cold" - }, - { - "duration": "108.33241724999999", - "name": "loading.desktop/Elmundo_warm" - }, - { - "duration": "58.96177848484848", - "name": "loading.desktop/FC2Blog" - }, - { - "duration": "25.633494", - "name": "loading.desktop/FC2Blog_cold" - }, - { - "duration": "33.11414550000001", - "name": "loading.desktop/FC2Blog_warm" - }, - { - "duration": "65.6928483030303", - "name": "loading.desktop/FIFA" - }, - { - "duration": "28.18330075", - "name": "loading.desktop/FIFA_cold" - }, - { - "duration": "37.11194175", - "name": "loading.desktop/FIFA_warm" - }, - { - "duration": "77.47790256060604", - "name": "loading.desktop/FarsNews" - }, - { - "duration": "44.536587374999996", - "name": "loading.desktop/FarsNews_cold" - }, - { - "duration": "32.916211", - "name": "loading.desktop/FarsNews_warm" - }, - { - "duration": "60.257690696969696", - "name": "loading.desktop/Flickr" - }, - { - "duration": "26.009117999999997", - "name": "loading.desktop/Flickr_cold" - }, - { - "duration": "34.23535", - "name": "loading.desktop/Flickr_warm" - }, - { - "duration": "60.680559954545444", - "name": "loading.desktop/FlipKart" - }, - { - "duration": "25.740063375", - "name": "loading.desktop/FlipKart_cold" - }, - { - "duration": "34.8121215", - "name": "loading.desktop/FlipKart_warm" - }, - { - "duration": "49.46483409090908", - "name": "loading.desktop/Free.fr" - }, - { - "duration": "21.983998624999998", - "name": "loading.desktop/Free.fr_cold" - }, - { - "duration": "27.00177125", - "name": "loading.desktop/Free.fr_warm" - }, - { - "duration": "46.34730078787879", - "name": "loading.desktop/HTML5Rocks" - }, - { - "duration": "21.176502375", - "name": "loading.desktop/HTML5Rocks_cold" - }, - { - "duration": "24.853324", - "name": "loading.desktop/HTML5Rocks_warm" - }, - { - "duration": "48.184653999999995", - "name": "loading.desktop/Haraj" - }, - { - "duration": "21.55604175", - "name": "loading.desktop/Haraj_cold" - }, - { - "duration": "26.341018", - "name": "loading.desktop/Haraj_warm" - }, - { - "duration": "62.25722783333333", - "name": "loading.desktop/HatenaBookmark" - }, - { - "duration": "27.342886124999996", - "name": "loading.desktop/HatenaBookmark_cold" - }, - { - "duration": "35.31977875", - "name": "loading.desktop/HatenaBookmark_warm" - }, - { - "duration": "62.712117469696985", - "name": "loading.desktop/IGN" - }, - { - "duration": "26.5488225", - "name": "loading.desktop/IGN_cold" - }, - { - "duration": "35.827023000000004", - "name": "loading.desktop/IGN_warm" - }, - { - "duration": "68.5413376818182", - "name": "loading.desktop/IMDB" - }, - { - "duration": "28.758691125", - "name": "loading.desktop/IMDB_cold" - }, - { - "duration": "39.6640675", - "name": "loading.desktop/IMDB_warm" - }, - { - "duration": "61.50407990909092", - "name": "loading.desktop/IndiaTimes" - }, - { - "duration": "26.15056925", - "name": "loading.desktop/IndiaTimes_cold" - }, - { - "duration": "35.39860675", - "name": "loading.desktop/IndiaTimes_warm" - }, - { - "duration": "66.91351901515152", - "name": "loading.desktop/Kakaku" - }, - { - "duration": "28.759978874999998", - "name": "loading.desktop/Kakaku_cold" - }, - { - "duration": "38.470656250000005", - "name": "loading.desktop/Kakaku_warm" - }, - { - "duration": "106.06202127272729", - "name": "loading.desktop/Kenh14" - }, - { - "duration": "43.595248", - "name": "loading.desktop/Kenh14_cold" - }, - { - "duration": "61.97051733333333", - "name": "loading.desktop/Kenh14_warm" - }, - { - "duration": "57.11001762121212", - "name": "loading.desktop/Mercadolivre" - }, - { - "duration": "29.73029125", - "name": "loading.desktop/Mercadolivre_cold" - }, - { - "duration": "31.797325", - "name": "loading.desktop/Mercadolivre_warm" - }, - { - "duration": "55.76981349999999", - "name": "loading.desktop/Naver" - }, - { - "duration": "28.94473325", - "name": "loading.desktop/Naver_cold" - }, - { - "duration": "30.98264525", - "name": "loading.desktop/Naver_warm" - }, - { - "duration": "50.91436474242425", - "name": "loading.desktop/Orange" - }, - { - "duration": "22.584999375", - "name": "loading.desktop/Orange_cold" - }, - { - "duration": "28.311454750000003", - "name": "loading.desktop/Orange_warm" - }, - { - "duration": "61.6514582121212", - "name": "loading.desktop/Pantip" - }, - { - "duration": "26.364679875", - "name": "loading.desktop/Pantip_cold" - }, - { - "duration": "35.01573775", - "name": "loading.desktop/Pantip_warm" - }, - { - "duration": "66.6353043030303", - "name": "loading.desktop/PremierLeague" - }, - { - "duration": "46.127203249999994", - "name": "loading.desktop/PremierLeague_cold" - }, - { - "duration": "37.68718175", - "name": "loading.desktop/PremierLeague_warm" - }, - { - "duration": "73.72898824242425", - "name": "loading.desktop/QQ" - }, - { - "duration": "30.37399825", - "name": "loading.desktop/QQ_cold" - }, - { - "duration": "42.74532175", - "name": "loading.desktop/QQ_warm" - }, - { - "duration": "61.65894442424243", - "name": "loading.desktop/REI" - }, - { - "duration": "26.728480249999997", - "name": "loading.desktop/REI_cold" - }, - { - "duration": "34.693574749999996", - "name": "loading.desktop/REI_warm" - }, - { - "duration": "52.94150192424244", - "name": "loading.desktop/Ruten" - }, - { - "duration": "23.2267255", - "name": "loading.desktop/Ruten_cold" - }, - { - "duration": "29.309852750000005", - "name": "loading.desktop/Ruten_warm" - }, - { - "duration": "74.2627371060606", - "name": "loading.desktop/Sina" - }, - { - "duration": "30.070321", - "name": "loading.desktop/Sina_cold" - }, - { - "duration": "44.30499775", - "name": "loading.desktop/Sina_warm" - }, - { - "duration": "73.88751783333333", - "name": "loading.desktop/Taobao" - }, - { - "duration": "30.336665", - "name": "loading.desktop/Taobao_cold" - }, - { - "duration": "43.3539945", - "name": "loading.desktop/Taobao_warm" - }, - { - "duration": "76.80970578787878", - "name": "loading.desktop/TheOnion" - }, - { - "duration": "29.97546525", - "name": "loading.desktop/TheOnion_cold" - }, - { - "duration": "46.35599225", - "name": "loading.desktop/TheOnion_warm" - }, - { - "duration": "76.172503", - "name": "loading.desktop/TheVerge" - }, - { - "duration": "32.615061", - "name": "loading.desktop/TheVerge_cold" - }, - { - "duration": "44.19115175", - "name": "loading.desktop/TheVerge_warm" - }, - { - "duration": "81.53529103030301", - "name": "loading.desktop/TicketMaster" - }, - { - "duration": "33.9646275", - "name": "loading.desktop/TicketMaster_cold" - }, - { - "duration": "47.156547", - "name": "loading.desktop/TicketMaster_warm" - }, - { - "duration": "111.14967130303032", - "name": "loading.desktop/Vietnamnet" - }, - { - "duration": "45.4410425", - "name": "loading.desktop/Vietnamnet_cold" - }, - { - "duration": "63.988094000000004", - "name": "loading.desktop/Vietnamnet_warm" - }, - { - "duration": "80.5152116969697", - "name": "loading.desktop/Vnexpress" - }, - { - "duration": "32.267904", - "name": "loading.desktop/Vnexpress_cold" - }, - { - "duration": "46.734067", - "name": "loading.desktop/Vnexpress_warm" - }, - { - "duration": "94.50380663636363", - "name": "loading.desktop/Walgreens" - }, - { - "duration": "49.19971699999999", - "name": "loading.desktop/Walgreens_cold" - }, - { - "duration": "71.0579325", - "name": "loading.desktop/Walgreens_warm" - }, - { - "duration": "51.258354924242425", - "name": "loading.desktop/Yandex" - }, - { - "duration": "22.706599", - "name": "loading.desktop/Yandex_cold" - }, - { - "duration": "28.453973249999997", - "name": "loading.desktop/Yandex_warm" - }, - { - "duration": "75.14793977272724", - "name": "loading.desktop/amazon.co.jp" - }, - { - "duration": "30.711020125", - "name": "loading.desktop/amazon.co.jp_cold" - }, - { - "duration": "44.1330475", - "name": "loading.desktop/amazon.co.jp_warm" - }, - { - "duration": "54.25589498484847", - "name": "loading.desktop/ja.wikipedia" - }, - { - "duration": "23.789327999999998", - "name": "loading.desktop/ja.wikipedia_cold" - }, - { - "duration": "30.261936750000004", - "name": "loading.desktop/ja.wikipedia_warm" - }, - { - "duration": "89.06708133333333", - "name": "loading.desktop/money.cnn" - }, - { - "duration": "36.1251615", - "name": "loading.desktop/money.cnn_cold" - }, - { - "duration": "52.34578625", - "name": "loading.desktop/money.cnn_warm" - }, - { - "duration": "56.024452606060606", - "name": "loading.desktop/ru.wikipedia" - }, - { - "duration": "24.687198375", - "name": "loading.desktop/ru.wikipedia_cold" - }, - { - "duration": "30.928128374999996", - "name": "loading.desktop/ru.wikipedia_warm" - }, - { - "duration": "88.83295846875", - "name": "loading.desktop/uol.com.br" - }, - { - "duration": "34.67761675", - "name": "loading.desktop/uol.com.br_cold" - }, - { - "duration": "51.97967500000001", - "name": "loading.desktop/uol.com.br_warm" - }, - { - "duration": "62.0393123030303", - "name": "loading.desktop/yahoo.co.jp" - }, - { - "duration": "26.730795", - "name": "loading.desktop/yahoo.co.jp_cold" - }, - { - "duration": "35.270484249999996", - "name": "loading.desktop/yahoo.co.jp_warm" - }, - { - "duration": "13.546166472972972", - "name": "media.desktop/mse.html?media=aac_audio.mp4" - }, - { - "duration": "14.183767716216217", - "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4" - }, - { - "duration": "14.301926864864862", - "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true" - }, - { - "duration": "12.953953891891896", - "name": "media.desktop/mse.html?media=h264_video.mp4" - }, - { - "duration": "19.746698729729736", - "name": "media.desktop/video.html?src=crowd.ogg&type=audio" - }, - { - "duration": "21.365133108108115", - "name": "media.desktop/video.html?src=crowd1080.mp4" - }, - { - "duration": "21.022305810810813", - "name": "media.desktop/video.html?src=crowd1080.webm" - }, - { - "duration": "19.765176324324333", - "name": "media.desktop/video.html?src=crowd1080_vp9.webm" - }, - { - "duration": "11.540297121621618", - "name": "media.desktop/video.html?src=crowd1080_vp9.webm&seek" - }, - { - "duration": "19.562542864864866", - "name": "media.desktop/video.html?src=crowd720_vp9.webm" - }, - { - "duration": "23.094548918918928", - "name": "media.desktop/video.html?src=garden2_10s.mp4" - }, - { - "duration": "15.273023432432435", - "name": "media.desktop/video.html?src=garden2_10s.mp4&seek" - }, - { - "duration": "20.62342540540541", - "name": "media.desktop/video.html?src=garden2_10s.webm" - }, - { - "duration": "11.833947", - "name": "media.desktop/video.html?src=garden2_10s.webm&seek" - }, - { - "duration": "16.475866459459457", - "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek" - }, - { - "duration": "26.440528108108115", - "name": "media.desktop/video.html?src=tulip2.m4a&type=audio" - }, - { - "duration": "26.52880005405406", - "name": "media.desktop/video.html?src=tulip2.mp3&type=audio" - }, - { - "duration": "9.712313905405404", - "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek" - }, - { - "duration": "28.09863002702703", - "name": "media.desktop/video.html?src=tulip2.mp4" - }, - { - "duration": "29.758492648648648", - "name": "media.desktop/video.html?src=tulip2.mp4&busyjs" - }, - { - "duration": "10.879628324324326", - "name": "media.desktop/video.html?src=tulip2.mp4&seek" - }, - { - "duration": "26.480524621621623", - "name": "media.desktop/video.html?src=tulip2.ogg&type=audio" - }, - { - "duration": "9.794467418918922", - "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek" - }, - { - "duration": "28.064750162162166", - "name": "media.desktop/video.html?src=tulip2.vp9.webm" - }, - { - "duration": "21.576918972972976", - "name": "media.desktop/video.html?src=tulip2.vp9.webm&background" - }, - { - "duration": "12.959411324324323", - "name": "media.desktop/video.html?src=tulip2.vp9.webm&seek" - }, - { - "duration": "35.65793040540541", - "name": "media.desktop/video.html?src=tulip2.vp9.webm_Regular-3G" - }, - { - "duration": "26.49245267567568", - "name": "media.desktop/video.html?src=tulip2.wav&type=audio" - }, - { - "duration": "9.744404337837835", - "name": "media.desktop/video.html?src=tulip2.wav&type=audio&seek" - }, - { - "duration": "85.35552208163267", - "name": "memory.desktop/TrivialAnimationPageSharedPageState" - }, - { - "duration": "83.79490310810812", - "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState" - }, - { - "duration": "87.21124710810813", - "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState" - }, - { - "duration": "85.19446705405404", - "name": "memory.desktop/TrivialCanvasPageSharedPageState" - }, - { - "duration": "89.21607539130436", - "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState" - }, - { - "duration": "85.69868876086957", - "name": "memory.desktop/TrivialGifPageSharedPageState" - }, - { - "duration": "85.31447586486483", - "name": "memory.desktop/TrivialScrollingPageSharedPageState" - }, - { - "duration": "85.78875140540542", - "name": "memory.desktop/TrivialWebGLPageSharedPageState" - }, - { - "duration": "152.99464102040815", - "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "150.3075844897959", - "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "41.32123940816328", - "name": "octane/http://chromium.github.io/octane/index.html?auto=1" - }, - { - "duration": "67.11337526530612", - "name": "oortonline_tbmv2/http://oortonline.gl/#run" - }, - { - "duration": "40.67453718367347", - "name": "power.desktop/TrivialAnimationPageSharedPageState" - }, - { - "duration": "39.543144285714284", - "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState" - }, - { - "duration": "41.19162124489796", - "name": "power.desktop/TrivialBlurAnimationPageSharedPageState" - }, - { - "duration": "40.61044863265307", - "name": "power.desktop/TrivialCanvasPageSharedPageState" - }, - { - "duration": "41.58202597959183", - "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState" - }, - { - "duration": "40.03804755102042", - "name": "power.desktop/TrivialGifPageSharedPageState" - }, - { - "duration": "40.326125979591836", - "name": "power.desktop/TrivialScrollingPageSharedPageState" - }, - { - "duration": "40.971883122448986", - "name": "power.desktop/TrivialWebGLPageSharedPageState" - }, - { - "duration": "142.33957918367346", - "name": "power.desktop/abcnews" - }, - { - "duration": "40.396150428571424", - "name": "power.desktop/indiatimes" - }, - { - "duration": "41.36044655102042", - "name": "power.desktop/instagram" - }, - { - "duration": "40.57478689795918", - "name": "power.desktop/microsoft" - }, - { - "duration": "42.91606008163266", - "name": "power.desktop/sina" - }, - { - "duration": "41.51667036734694", - "name": "power.desktop/slideshare" - }, - { - "duration": "52.5630066122449", - "name": "power.desktop/uol" - }, - { - "duration": "4.700836240816327", - "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html" - }, - { - "duration": "8.82076123469388", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html" - }, - { - "duration": "5.7083416183673465", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html" - }, - { - "duration": "7.067381697959185", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html" - }, - { - "duration": "7.4579207918367345", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html" - }, - { - "duration": "5.654540218367345", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html" - }, - { - "duration": "13.741128979591842", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html" - }, - { - "duration": "5.134179567346939", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html" - }, - { - "duration": "6.5971306428571435", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html" - }, - { - "duration": "6.092594157142856", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html" - }, - { - "duration": "5.007687726530612", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html" - }, - { - "duration": "5.138417430612243", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html" - }, - { - "duration": "6.494704285714285", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html" - }, - { - "duration": "12.812809806122447", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html" - }, - { - "duration": "5.240346769387756", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html" - }, - { - "duration": "4.473294459183673", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html" - }, - { - "duration": "23.622838224489794", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html" - }, - { - "duration": "10.055859244897961", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html" - }, - { - "duration": "10.720062530612246", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html" - }, - { - "duration": "6.39367384897959", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html" - }, - { - "duration": "5.320809336734695", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html" - }, - { - "duration": "16.8936732244898", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html" - }, - { - "duration": "94.3183928163265", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html" - }, - { - "duration": "74.39839906122451", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html" - }, - { - "duration": "18.355625551020406", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html" - }, - { - "duration": "17.975276524999998", - "name": "rendering.desktop/amazon_pinch" - }, - { - "duration": "23.16154230612245", - "name": "rendering.desktop/analog_clock_svg" - }, - { - "duration": "28.55314848780488", - "name": "rendering.desktop/animometer_webgl" - }, - { - "duration": "45.86813112195121", - "name": "rendering.desktop/aquarium" - }, - { - "duration": "33.50111680487805", - "name": "rendering.desktop/aquarium_20k" - }, - { - "duration": "28.384601078947366", - "name": "rendering.desktop/background_color_animation" - }, - { - "duration": "26.37733989473684", - "name": "rendering.desktop/background_color_animation_with_gradient" - }, - { - "duration": "25.83044245454545", - "name": "rendering.desktop/balls_css_key_frame_animations" - }, - { - "duration": "51.87206268181817", - "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform" - }, - { - "duration": "30.191500159090914", - "name": "rendering.desktop/balls_css_transition_2_properties" - }, - { - "duration": "29.80668152272727", - "name": "rendering.desktop/balls_css_transition_40_properties" - }, - { - "duration": "30.21040629545454", - "name": "rendering.desktop/balls_css_transition_all_properties" - }, - { - "duration": "32.58562829545454", - "name": "rendering.desktop/balls_javascript_canvas" - }, - { - "duration": "24.356124568181816", - "name": "rendering.desktop/balls_javascript_css" - }, - { - "duration": "30.21438495454545", - "name": "rendering.desktop/balls_svg_animations" - }, - { - "duration": "18.556416536585363", - "name": "rendering.desktop/blob" - }, - { - "duration": "29.91819418181819", - "name": "rendering.desktop/blogspot" - }, - { - "duration": "25.455359475", - "name": "rendering.desktop/blogspot_pinch" - }, - { - "duration": "15.42708115909091", - "name": "rendering.desktop/booking.com" - }, - { - "duration": "20.23266395", - "name": "rendering.desktop/booking_pinch" - }, - { - "duration": "14.491325204545454", - "name": "rendering.desktop/bouncing_balls_15" - }, - { - "duration": "17.267492977272727", - "name": "rendering.desktop/bouncing_balls_shadow" - }, - { - "duration": "18.629296431818172", - "name": "rendering.desktop/bouncing_clipped_rectangles" - }, - { - "duration": "22.571514750000002", - "name": "rendering.desktop/bouncing_gradient_circles" - }, - { - "duration": "13.320596090909088", - "name": "rendering.desktop/bouncing_png_images" - }, - { - "duration": "29.647513204545454", - "name": "rendering.desktop/bouncing_svg_images" - }, - { - "duration": "17.50269685", - "name": "rendering.desktop/canvas_05000_pixels_per_second" - }, - { - "duration": "16.737423299999996", - "name": "rendering.desktop/canvas_10000_pixels_per_second" - }, - { - "duration": "14.196069999999997", - "name": "rendering.desktop/canvas_15000_pixels_per_second" - }, - { - "duration": "12.733653712499999", - "name": "rendering.desktop/canvas_20000_pixels_per_second" - }, - { - "duration": "11.553110737500003", - "name": "rendering.desktop/canvas_30000_pixels_per_second" - }, - { - "duration": "10.989627787500002", - "name": "rendering.desktop/canvas_40000_pixels_per_second" - }, - { - "duration": "10.707004475", - "name": "rendering.desktop/canvas_50000_pixels_per_second" - }, - { - "duration": "10.192577199999999", - "name": "rendering.desktop/canvas_60000_pixels_per_second" - }, - { - "duration": "10.013242075000003", - "name": "rendering.desktop/canvas_75000_pixels_per_second" - }, - { - "duration": "9.76069045", - "name": "rendering.desktop/canvas_90000_pixels_per_second" - }, - { - "duration": "33.676027113636366", - "name": "rendering.desktop/canvas_animation_no_clear" - }, - { - "duration": "19.659105636363634", - "name": "rendering.desktop/canvas_arcs" - }, - { - "duration": "16.899869272727276", - "name": "rendering.desktop/canvas_font_cycler" - }, - { - "duration": "16.32997363636364", - "name": "rendering.desktop/canvas_lines" - }, - { - "duration": "15.497935784090906", - "name": "rendering.desktop/canvas_to_blob" - }, - { - "duration": "9.812634675", - "name": "rendering.desktop/cats_unscaled" - }, - { - "duration": "8.350419927500003", - "name": "rendering.desktop/cats_viewport_width" - }, - { - "duration": "19.49465725", - "name": "rendering.desktop/chip_tune" - }, - { - "duration": "24.713657474999998", - "name": "rendering.desktop/cnn_pinch" - }, - { - "duration": "42.67318575", - "name": "rendering.desktop/compositor_heavy_animation" - }, - { - "duration": "19.239708136363635", - "name": "rendering.desktop/crafty_mind" - }, - { - "duration": "24.462988704545452", - "name": "rendering.desktop/css_animations_many_keyframes" - }, - { - "duration": "22.688228954545455", - "name": "rendering.desktop/css_animations_simultaneous_inline_style" - }, - { - "duration": "23.392070000000004", - "name": "rendering.desktop/css_animations_simultaneous_new_element" - }, - { - "duration": "22.70420456818182", - "name": "rendering.desktop/css_animations_simultaneous_style_element" - }, - { - "duration": "22.71296654545455", - "name": "rendering.desktop/css_animations_simultaneous_updating_class" - }, - { - "duration": "21.381449636363637", - "name": "rendering.desktop/css_animations_staggered_infinite_iterations" - }, - { - "duration": "25.666006295454544", - "name": "rendering.desktop/css_animations_staggered_inline_style" - }, - { - "duration": "28.086869977272727", - "name": "rendering.desktop/css_animations_staggered_new_element" - }, - { - "duration": "29.2179701590909", - "name": "rendering.desktop/css_animations_staggered_style_element" - }, - { - "duration": "26.479824113636372", - "name": "rendering.desktop/css_animations_staggered_updating_class" - }, - { - "duration": "27.74009861363637", - "name": "rendering.desktop/css_animations_triggered_inline_style" - }, - { - "duration": "32.03057061363636", - "name": "rendering.desktop/css_animations_triggered_new_element" - }, - { - "duration": "30.527839250000003", - "name": "rendering.desktop/css_animations_triggered_style_element" - }, - { - "duration": "28.172829931818182", - "name": "rendering.desktop/css_animations_triggered_updating_class" - }, - { - "duration": "23.4162694090909", - "name": "rendering.desktop/css_transitions_inline_style" - }, - { - "duration": "23.61112190909091", - "name": "rendering.desktop/css_transitions_new_element" - }, - { - "duration": "23.80110736363636", - "name": "rendering.desktop/css_transitions_staggered_inline_style" - }, - { - "duration": "25.087118613636367", - "name": "rendering.desktop/css_transitions_staggered_new_element" - }, - { - "duration": "24.55790922727273", - "name": "rendering.desktop/css_transitions_staggered_style_element" - }, - { - "duration": "23.733410863636358", - "name": "rendering.desktop/css_transitions_staggered_updating_class" - }, - { - "duration": "23.060220500000007", - "name": "rendering.desktop/css_transitions_style_element" - }, - { - "duration": "29.719599022727277", - "name": "rendering.desktop/css_transitions_triggered_inline_style" - }, - { - "duration": "30.24195122727273", - "name": "rendering.desktop/css_transitions_triggered_new_element" - }, - { - "duration": "30.16023202272727", - "name": "rendering.desktop/css_transitions_triggered_style_element" - }, - { - "duration": "30.21957836363637", - "name": "rendering.desktop/css_transitions_triggered_updating_class" - }, - { - "duration": "23.528340545454544", - "name": "rendering.desktop/css_transitions_updating_class" - }, - { - "duration": "20.18097959090909", - "name": "rendering.desktop/css_value_type_color" - }, - { - "duration": "107.44096934090908", - "name": "rendering.desktop/css_value_type_filter" - }, - { - "duration": "23.192229818181808", - "name": "rendering.desktop/css_value_type_length" - }, - { - "duration": "22.596551409090907", - "name": "rendering.desktop/css_value_type_length_complex" - }, - { - "duration": "21.092287840909094", - "name": "rendering.desktop/css_value_type_length_simple" - }, - { - "duration": "22.507868954545447", - "name": "rendering.desktop/css_value_type_path" - }, - { - "duration": "33.795705659090906", - "name": "rendering.desktop/css_value_type_shadow" - }, - { - "duration": "23.155522613636354", - "name": "rendering.desktop/css_value_type_transform_complex" - }, - { - "duration": "21.80320681818182", - "name": "rendering.desktop/css_value_type_transform_simple" - }, - { - "duration": "21.368829853658536", - "name": "rendering.desktop/dynamic_cube_map" - }, - { - "duration": "18.618831", - "name": "rendering.desktop/earth" - }, - { - "duration": "14.263912011363631", - "name": "rendering.desktop/ebay" - }, - { - "duration": "23.567609074999993", - "name": "rendering.desktop/ebay_pinch" - }, - { - "duration": "19.495413613636362", - "name": "rendering.desktop/effect_games" - }, - { - "duration": "16.219358386363634", - "name": "rendering.desktop/espn" - }, - { - "duration": "23.39462425", - "name": "rendering.desktop/espn_pinch" - }, - { - "duration": "26.128715263157897", - "name": "rendering.desktop/extra_large_texture_uploads" - }, - { - "duration": "13.625264045454545", - "name": "rendering.desktop/facebook" - }, - { - "duration": "20.279158024999994", - "name": "rendering.desktop/facebook_pinch" - }, - { - "duration": "20.337158136363634", - "name": "rendering.desktop/fill_shapes" - }, - { - "duration": "28.911240477272724", - "name": "rendering.desktop/filter_terrain_svg" - }, - { - "duration": "15.55878127272727", - "name": "rendering.desktop/geo_apis" - }, - { - "duration": "27.149211931818186", - "name": "rendering.desktop/gmail" - }, - { - "duration": "23.062730825", - "name": "rendering.desktop/gmail_pinch" - }, - { - "duration": "16.510170090909085", - "name": "rendering.desktop/google_calendar" - }, - { - "duration": "21.415300275", - "name": "rendering.desktop/google_calendar_pinch" - }, - { - "duration": "33.14746022727273", - "name": "rendering.desktop/google_docs" - }, - { - "duration": "20.973684924999997", - "name": "rendering.desktop/google_image_pinch" - }, - { - "duration": "20.382343272727272", - "name": "rendering.desktop/google_image_search" - }, - { - "duration": "22.85558420454545", - "name": "rendering.desktop/google_plus" - }, - { - "duration": "18.870574075", - "name": "rendering.desktop/google_search_pinch" - }, - { - "duration": "13.13561473863637", - "name": "rendering.desktop/google_web_search" - }, - { - "duration": "23.699090409090903", - "name": "rendering.desktop/guimark_vector_chart" - }, - { - "duration": "18.30450644318182", - "name": "rendering.desktop/hakim" - }, - { - "duration": "34.69866395454546", - "name": "rendering.desktop/ie_chalkboard" - }, - { - "duration": "25.411876590909085", - "name": "rendering.desktop/ie_pirate_mark" - }, - { - "duration": "17.686832409090908", - "name": "rendering.desktop/jarro_doverson" - }, - { - "duration": "18.917812681818177", - "name": "rendering.desktop/kevs_3d" - }, - { - "duration": "19.94233218181819", - "name": "rendering.desktop/keyframed_animations" - }, - { - "duration": "32.07735463157895", - "name": "rendering.desktop/large_texture_uploads" - }, - { - "duration": "15.77929897727273", - "name": "rendering.desktop/linkedin" - }, - { - "duration": "18.333869975", - "name": "rendering.desktop/linkedin_pinch" - }, - { - "duration": "21.55913781818182", - "name": "rendering.desktop/man_in_blue" - }, - { - "duration": "25.414801249999996", - "name": "rendering.desktop/many_images" - }, - { - "duration": "20.102914926829268", - "name": "rendering.desktop/many_planets_deep" - }, - { - "duration": "19.18478509090909", - "name": "rendering.desktop/maps_move" - }, - { - "duration": "36.27142370731709", - "name": "rendering.desktop/maps_perf_test" - }, - { - "duration": "21.26951636842105", - "name": "rendering.desktop/medium_texture_uploads" - }, - { - "duration": "17.670881818181822", - "name": "rendering.desktop/megi_dish" - }, - { - "duration": "15.888128147727276", - "name": "rendering.desktop/microsoft_asteroid_belt" - }, - { - "duration": "28.890502022727272", - "name": "rendering.desktop/microsoft_fireflies" - }, - { - "duration": "17.080909875000003", - "name": "rendering.desktop/microsoft_fish_ie_tank" - }, - { - "duration": "17.13153517045454", - "name": "rendering.desktop/microsoft_snow" - }, - { - "duration": "15.384685397727276", - "name": "rendering.desktop/microsoft_speed_reading" - }, - { - "duration": "16.281234363636365", - "name": "rendering.desktop/microsoft_tweet_map" - }, - { - "duration": "24.475988386363632", - "name": "rendering.desktop/microsoft_video_city" - }, - { - "duration": "17.798353977272733", - "name": "rendering.desktop/microsoft_worker_fountains" - }, - { - "duration": "14.724933818181814", - "name": "rendering.desktop/mix_10k" - }, - { - "duration": "20.848906272727277", - "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "39.05138043181818", - "name": "rendering.desktop/mix_blend_mode_animation_screen" - }, - { - "duration": "28.074515363636365", - "name": "rendering.desktop/motion_mark_canvas_fill_shapes" - }, - { - "duration": "28.53713720454546", - "name": "rendering.desktop/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "43.960642022727285", - "name": "rendering.desktop/motion_mark_focus" - }, - { - "duration": "20.43763641463415", - "name": "rendering.desktop/nvidia_vertex_buffer_object" - }, - { - "duration": "40.19748549999999", - "name": "rendering.desktop/overlay_background_color_css_transitions_page" - }, - { - "duration": "18.67915304878048", - "name": "rendering.desktop/particles" - }, - { - "duration": "23.309169090909087", - "name": "rendering.desktop/pinterest" - }, - { - "duration": "17.083246181818183", - "name": "rendering.desktop/put_get_image_data" - }, - { - "duration": "18.17217413157895", - "name": "rendering.desktop/raf" - }, - { - "duration": "18.12919905263158", - "name": "rendering.desktop/raf_animation" - }, - { - "duration": "17.567541736842102", - "name": "rendering.desktop/raf_canvas" - }, - { - "duration": "18.137776684210525", - "name": "rendering.desktop/raf_touch_animation" - }, - { - "duration": "17.149388045454547", - "name": "rendering.desktop/runway" - }, - { - "duration": "18.394276097560976", - "name": "rendering.desktop/san_angeles" - }, - { - "duration": "10.748847513157893", - "name": "rendering.desktop/second_batch_js_heavy" - }, - { - "duration": "10.58654378947368", - "name": "rendering.desktop/second_batch_js_light" - }, - { - "duration": "10.599852789473685", - "name": "rendering.desktop/second_batch_js_medium" - }, - { - "duration": "16.361425421052633", - "name": "rendering.desktop/simple_text_page" - }, - { - "duration": "6.711962110526314", - "name": "rendering.desktop/simple_touch_drag" - }, - { - "duration": "20.297875789473686", - "name": "rendering.desktop/small_texture_uploads" - }, - { - "duration": "21.04771027272727", - "name": "rendering.desktop/smash_cat" - }, - { - "duration": "14.658682909090906", - "name": "rendering.desktop/spielzeugz" - }, - { - "duration": "20.765856227272728", - "name": "rendering.desktop/stroke_shapes" - }, - { - "duration": "6.739604878947369", - "name": "rendering.desktop/sync_scroll_offset" - }, - { - "duration": "44.837428295454544", - "name": "rendering.desktop/techcrunch" - }, - { - "duration": "16.612831925000002", - "name": "rendering.desktop/text_05000_pixels_per_second" - }, - { - "duration": "15.867804875", - "name": "rendering.desktop/text_10000_pixels_per_second" - }, - { - "duration": "13.546451137499997", - "name": "rendering.desktop/text_15000_pixels_per_second" - }, - { - "duration": "12.079830374999998", - "name": "rendering.desktop/text_20000_pixels_per_second" - }, - { - "duration": "11.117253837499998", - "name": "rendering.desktop/text_30000_pixels_per_second" - }, - { - "duration": "10.4964272", - "name": "rendering.desktop/text_40000_pixels_per_second" - }, - { - "duration": "9.950531787500001", - "name": "rendering.desktop/text_50000_pixels_per_second" - }, - { - "duration": "9.68502065", - "name": "rendering.desktop/text_60000_pixels_per_second" - }, - { - "duration": "9.480277412499998", - "name": "rendering.desktop/text_75000_pixels_per_second" - }, - { - "duration": "9.127394212500004", - "name": "rendering.desktop/text_90000_pixels_per_second" - }, - { - "duration": "22.154407049999996", - "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "19.937044899999997", - "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "17.314989325", - "name": "rendering.desktop/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "15.812206399999999", - "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "14.186408425000002", - "name": "rendering.desktop/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "13.425205737499999", - "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "12.892269787500002", - "name": "rendering.desktop/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "12.6956619875", - "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "12.246665475000002", - "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "12.074181687499998", - "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "16.5712942", - "name": "rendering.desktop/text_hover_05000_pixels_per_second" - }, - { - "duration": "15.882120987499999", - "name": "rendering.desktop/text_hover_10000_pixels_per_second" - }, - { - "duration": "13.464127874999999", - "name": "rendering.desktop/text_hover_15000_pixels_per_second" - }, - { - "duration": "12.119675050000001", - "name": "rendering.desktop/text_hover_20000_pixels_per_second" - }, - { - "duration": "10.9610501875", - "name": "rendering.desktop/text_hover_30000_pixels_per_second" - }, - { - "duration": "10.552219574999999", - "name": "rendering.desktop/text_hover_40000_pixels_per_second" - }, - { - "duration": "9.86212855", - "name": "rendering.desktop/text_hover_50000_pixels_per_second" - }, - { - "duration": "9.557468075", - "name": "rendering.desktop/text_hover_60000_pixels_per_second" - }, - { - "duration": "9.443716175000002", - "name": "rendering.desktop/text_hover_75000_pixels_per_second" - }, - { - "duration": "9.245249712499998", - "name": "rendering.desktop/text_hover_90000_pixels_per_second" - }, - { - "duration": "16.328694828947366", - "name": "rendering.desktop/touch_handler_scrolling" - }, - { - "duration": "24.306497977272727", - "name": "rendering.desktop/transform_transitions" - }, - { - "duration": "19.604135340909092", - "name": "rendering.desktop/transform_transitions_js_block" - }, - { - "duration": "15.01410418181818", - "name": "rendering.desktop/twitter" - }, - { - "duration": "21.306142300000005", - "name": "rendering.desktop/twitter_pinch" - }, - { - "duration": "25.5328601590909", - "name": "rendering.desktop/weather.com" - }, - { - "duration": "28.367302850000005", - "name": "rendering.desktop/weather_pinch" - }, - { - "duration": "20.343411022727274", - "name": "rendering.desktop/web_animation_value_type_color" - }, - { - "duration": "22.1745455", - "name": "rendering.desktop/web_animation_value_type_length_3d" - }, - { - "duration": "20.997750568181818", - "name": "rendering.desktop/web_animation_value_type_length_complex" - }, - { - "duration": "20.947234659090906", - "name": "rendering.desktop/web_animation_value_type_length_simple" - }, - { - "duration": "22.13650793181818", - "name": "rendering.desktop/web_animation_value_type_path" - }, - { - "duration": "34.1138800909091", - "name": "rendering.desktop/web_animation_value_type_shadow" - }, - { - "duration": "23.025500181818185", - "name": "rendering.desktop/web_animation_value_type_transform_complex" - }, - { - "duration": "21.671349863636358", - "name": "rendering.desktop/web_animation_value_type_transform_simple" - }, - { - "duration": "24.41164193181819", - "name": "rendering.desktop/web_animations_many_keyframes" - }, - { - "duration": "21.483587045454552", - "name": "rendering.desktop/web_animations_set_current_time" - }, - { - "duration": "22.834917704545454", - "name": "rendering.desktop/web_animations_simultaneous" - }, - { - "duration": "25.788626522727274", - "name": "rendering.desktop/web_animations_staggered_chaining" - }, - { - "duration": "21.55999365909091", - "name": "rendering.desktop/web_animations_staggered_infinite_iterations" - }, - { - "duration": "27.47893629545455", - "name": "rendering.desktop/web_animations_staggered_triggering_page" - }, - { - "duration": "20.07464113636364", - "name": "rendering.desktop/wikipedia" - }, - { - "duration": "22.583704136363636", - "name": "rendering.desktop/wordpress" - }, - { - "duration": "13.392119636363635", - "name": "rendering.desktop/yahoo_answers" - }, - { - "duration": "32.208872386363645", - "name": "rendering.desktop/yahoo_games" - }, - { - "duration": "29.454614625000012", - "name": "rendering.desktop/yahoo_games_pinch" - }, - { - "duration": "22.113008204545455", - "name": "rendering.desktop/yahoo_news" - }, - { - "duration": "22.068308475000006", - "name": "rendering.desktop/yahoo_news_pinch" - }, - { - "duration": "27.298139181818183", - "name": "rendering.desktop/yahoo_sports" - }, - { - "duration": "52.51995430000001", - "name": "rendering.desktop/yahoo_sports_pinch" - }, - { - "duration": "21.1889081", - "name": "rendering.desktop/youtube_pinch" - }, - { - "duration": "20.959620918918915", - "name": "rendering.desktop/yuv_decoding" - }, - { - "duration": "13.725767051020407", - "name": "scheduler.tough_scheduling_cases/raf" - }, - { - "duration": "13.6046156122449", - "name": "scheduler.tough_scheduling_cases/raf_animation" - }, - { - "duration": "13.37749837755102", - "name": "scheduler.tough_scheduling_cases/raf_canvas" - }, - { - "duration": "13.657908602040811", - "name": "scheduler.tough_scheduling_cases/raf_touch_animation" - }, - { - "duration": "7.858744538775511", - "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy" - }, - { - "duration": "7.634183167346937", - "name": "scheduler.tough_scheduling_cases/second_batch_js_light" - }, - { - "duration": "7.808732579591837", - "name": "scheduler.tough_scheduling_cases/second_batch_js_medium" - }, - { - "duration": "13.319662153061227", - "name": "scheduler.tough_scheduling_cases/simple_text_page" - }, - { - "duration": "5.788666848979592", - "name": "scheduler.tough_scheduling_cases/simple_touch_drag" - }, - { - "duration": "5.83027375102041", - "name": "scheduler.tough_scheduling_cases/sync_scroll_offset" - }, - { - "duration": "12.90784189795918", - "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling" - }, - { - "duration": "12.14913952040816", - "name": "smoothness.desktop_tough_pinch_zoom_cases/amazon_pinch" - }, - { - "duration": "12.958189051020408", - "name": "smoothness.desktop_tough_pinch_zoom_cases/blogspot_pinch" - }, - { - "duration": "12.626157572916666", - "name": "smoothness.desktop_tough_pinch_zoom_cases/booking_pinch" - }, - { - "duration": "14.454517122448982", - "name": "smoothness.desktop_tough_pinch_zoom_cases/cnn_pinch" - }, - { - "duration": "14.582173947916665", - "name": "smoothness.desktop_tough_pinch_zoom_cases/ebay_pinch" - }, - { - "duration": "13.649322775510209", - "name": "smoothness.desktop_tough_pinch_zoom_cases/espn_pinch" - }, - { - "duration": "12.74660647959184", - "name": "smoothness.desktop_tough_pinch_zoom_cases/facebook_pinch" - }, - { - "duration": "14.353254836734695", - "name": "smoothness.desktop_tough_pinch_zoom_cases/gmail_pinch" - }, - { - "duration": "14.409491173469384", - "name": "smoothness.desktop_tough_pinch_zoom_cases/google_calendar_pinch" - }, - { - "duration": "12.748126", - "name": "smoothness.desktop_tough_pinch_zoom_cases/google_image_pinch" - }, - { - "duration": "14.27968643877551", - "name": "smoothness.desktop_tough_pinch_zoom_cases/google_search_pinch" - }, - { - "duration": "12.067373469387759", - "name": "smoothness.desktop_tough_pinch_zoom_cases/linkedin_pinch" - }, - { - "duration": "14.734091132653067", - "name": "smoothness.desktop_tough_pinch_zoom_cases/twitter_pinch" - }, - { - "duration": "14.773638604166665", - "name": "smoothness.desktop_tough_pinch_zoom_cases/weather_pinch" - }, - { - "duration": "20.646489", - "name": "smoothness.desktop_tough_pinch_zoom_cases/yahoo_games_pinch" - }, - { - "duration": "13.243030836734695", - "name": "smoothness.desktop_tough_pinch_zoom_cases/yahoo_news_pinch" - }, - { - "duration": "16.85023027083334", - "name": "smoothness.desktop_tough_pinch_zoom_cases/yahoo_sports_pinch" - }, - { - "duration": "14.586596561224484", - "name": "smoothness.desktop_tough_pinch_zoom_cases/youtube_pinch" - }, - { - "duration": "17.63306802083333", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "27.267977687500007", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "19.111942395833335", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "18.902955520833334", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "13.485305489583332", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "12.6918358125", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "10.606566010416666", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "9.6104318125", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "8.545360583333332", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "8.03142350416667", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "7.688266616666667", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "7.487526147916667", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "7.240349477083331", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "7.17187985", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "13.751623208333333", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "12.584565687500003", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "10.39528305208333", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "9.287609739583335", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "8.266716545833335", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "7.749227760416666", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "7.481623281250001", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "7.2256595812499995", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "7.0160588937499995", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "6.911995316666668", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "14.678565166666665", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "13.632711072916665", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "11.732065104166663", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "10.620173666666664", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "9.699554166666665", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "9.1493038125", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "8.974380270833334", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "8.809100333333335", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "8.657745556249997", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "8.577958131250002", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "13.18405933333333", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "12.480019270833337", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "10.35889138541667", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "9.343336552083334", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "8.306020604166667", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "7.74278853125", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "7.393074254166666", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "7.187891008333334", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "6.996555006250002", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "6.897036006249999", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "15.304925104166673", - "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding" - }, - { - "duration": "15.369533260416661", - "name": "smoothness.image_decoding_cases/yuv_decoding" - }, - { - "duration": "15.408027260416661", - "name": "smoothness.key_desktop_move_cases/maps_move" - }, - { - "duration": "26.784526708333342", - "name": "smoothness.maps/maps_perf_test" - }, - { - "duration": "17.624169531914895", - "name": "smoothness.top_25_smooth/blogspot" - }, - { - "duration": "10.816864478723407", - "name": "smoothness.top_25_smooth/booking.com" - }, - { - "duration": "8.989432191489362", - "name": "smoothness.top_25_smooth/ebay" - }, - { - "duration": "12.077062148936168", - "name": "smoothness.top_25_smooth/espn" - }, - { - "duration": "9.660616936170214", - "name": "smoothness.top_25_smooth/facebook" - }, - { - "duration": "17.31775421276595", - "name": "smoothness.top_25_smooth/gmail" - }, - { - "duration": "12.728602617021277", - "name": "smoothness.top_25_smooth/google_calendar" - }, - { - "duration": "20.929682382978726", - "name": "smoothness.top_25_smooth/google_docs" - }, - { - "duration": "14.266613425531915", - "name": "smoothness.top_25_smooth/google_image_search" - }, - { - "duration": "16.35835423404255", - "name": "smoothness.top_25_smooth/google_plus" - }, - { - "duration": "8.512855340425535", - "name": "smoothness.top_25_smooth/google_web_search" - }, - { - "duration": "12.167891914893616", - "name": "smoothness.top_25_smooth/linkedin" - }, - { - "duration": "14.524151521276593", - "name": "smoothness.top_25_smooth/pinterest" - }, - { - "duration": "18.60801623404255", - "name": "smoothness.top_25_smooth/techcrunch" - }, - { - "duration": "13.709902074468086", - "name": "smoothness.top_25_smooth/twitter" - }, - { - "duration": "12.224926414893618", - "name": "smoothness.top_25_smooth/weather.com" - }, - { - "duration": "15.812661404255316", - "name": "smoothness.top_25_smooth/wikipedia" - }, - { - "duration": "14.91922618085106", - "name": "smoothness.top_25_smooth/wordpress" - }, - { - "duration": "9.425947531914893", - "name": "smoothness.top_25_smooth/yahoo_answers" - }, - { - "duration": "25.152091702127656", - "name": "smoothness.top_25_smooth/yahoo_games" - }, - { - "duration": "18.69400227659574", - "name": "smoothness.top_25_smooth/yahoo_news" - }, - { - "duration": "19.9036894893617", - "name": "smoothness.top_25_smooth/yahoo_sports" - }, - { - "duration": "18.1405718125", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html" - }, - { - "duration": "17.797234729166668", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html" - }, - { - "duration": "17.811230229166664", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html" - }, - { - "duration": "17.802353583333336", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html" - }, - { - "duration": "17.830852479166666", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html" - }, - { - "duration": "17.81490133333333", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html" - }, - { - "duration": "17.784903937499998", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html" - }, - { - "duration": "17.787983770833335", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html" - }, - { - "duration": "17.82200029166666", - "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html" - }, - { - "duration": "17.827061625000002", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html" - }, - { - "duration": "17.828471291666656", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html" - }, - { - "duration": "18.991106812500004", - "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations" - }, - { - "duration": "23.033800729166668", - "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations_composited_transform" - }, - { - "duration": "20.94027066666667", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties" - }, - { - "duration": "21.181908500000002", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties" - }, - { - "duration": "21.194172187499998", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties" - }, - { - "duration": "19.492463145833337", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas" - }, - { - "duration": "18.1169740625", - "name": "smoothness.tough_animation_cases/balls_javascript_css" - }, - { - "duration": "19.452065500000003", - "name": "smoothness.tough_animation_cases/balls_svg_animations" - }, - { - "duration": "17.3157516875", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes" - }, - { - "duration": "17.43817714583333", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style" - }, - { - "duration": "17.9144483125", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element" - }, - { - "duration": "17.441848979166668", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element" - }, - { - "duration": "17.419066395833326", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class" - }, - { - "duration": "16.838231625000002", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations" - }, - { - "duration": "19.16134370833333", - "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style" - }, - { - "duration": "20.026408229166663", - "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element" - }, - { - "duration": "19.883101291666662", - "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element" - }, - { - "duration": "19.141838291666662", - "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class" - }, - { - "duration": "19.682784458333337", - "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style" - }, - { - "duration": "21.926103770833336", - "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element" - }, - { - "duration": "20.758656958333336", - "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element" - }, - { - "duration": "19.692756375000002", - "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class" - }, - { - "duration": "17.68110233333333", - "name": "smoothness.tough_animation_cases/css_transitions_inline_style" - }, - { - "duration": "18.25030516666666", - "name": "smoothness.tough_animation_cases/css_transitions_new_element" - }, - { - "duration": "17.8737100625", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style" - }, - { - "duration": "18.394751833333327", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element" - }, - { - "duration": "18.10253383333334", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element" - }, - { - "duration": "18.01226958333333", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class" - }, - { - "duration": "17.731259187500005", - "name": "smoothness.tough_animation_cases/css_transitions_style_element" - }, - { - "duration": "20.225090291666664", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style" - }, - { - "duration": "20.235031312500002", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element" - }, - { - "duration": "20.074348500000003", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element" - }, - { - "duration": "20.250556145833333", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class" - }, - { - "duration": "17.5982153125", - "name": "smoothness.tough_animation_cases/css_transitions_updating_class" - }, - { - "duration": "16.530927541666667", - "name": "smoothness.tough_animation_cases/css_value_type_color" - }, - { - "duration": "21.890715062500004", - "name": "smoothness.tough_animation_cases/css_value_type_filter" - }, - { - "duration": "17.179101625", - "name": "smoothness.tough_animation_cases/css_value_type_length" - }, - { - "duration": "16.939784604166668", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex" - }, - { - "duration": "16.957349125", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple" - }, - { - "duration": "17.257774979166665", - "name": "smoothness.tough_animation_cases/css_value_type_path" - }, - { - "duration": "22.543531770833336", - "name": "smoothness.tough_animation_cases/css_value_type_shadow" - }, - { - "duration": "17.08302327083333", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex" - }, - { - "duration": "16.830978645833333", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple" - }, - { - "duration": "16.53343327083333", - "name": "smoothness.tough_animation_cases/keyframed_animations" - }, - { - "duration": "16.80270660416667", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "19.474189916666663", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen" - }, - { - "duration": "27.736247208333335", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page" - }, - { - "duration": "16.969167687499997", - "name": "smoothness.tough_animation_cases/transform_transitions" - }, - { - "duration": "16.39944164583333", - "name": "smoothness.tough_animation_cases/transform_transitions_js_block" - }, - { - "duration": "16.519355770833332", - "name": "smoothness.tough_animation_cases/web_animation_value_type_color" - }, - { - "duration": "16.945139895833332", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d" - }, - { - "duration": "16.939485812500003", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex" - }, - { - "duration": "16.936776875", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple" - }, - { - "duration": "17.216332520833333", - "name": "smoothness.tough_animation_cases/web_animation_value_type_path" - }, - { - "duration": "22.66975674999999", - "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow" - }, - { - "duration": "17.002637395833336", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex" - }, - { - "duration": "16.806618395833336", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple" - }, - { - "duration": "18.0529130625", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes" - }, - { - "duration": "16.92103008333333", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time" - }, - { - "duration": "17.422617666666657", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous" - }, - { - "duration": "19.032787979166667", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining" - }, - { - "duration": "16.791719833333335", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations" - }, - { - "duration": "19.269816499999997", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page" - }, - { - "duration": "11.94893264583333", - "name": "smoothness.tough_canvas_cases/bouncing_balls_15" - }, - { - "duration": "14.280646145833337", - "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow" - }, - { - "duration": "13.731636968750008", - "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles" - }, - { - "duration": "14.368612864583328", - "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles" - }, - { - "duration": "11.412356510416663", - "name": "smoothness.tough_canvas_cases/bouncing_png_images" - }, - { - "duration": "21.4558235625", - "name": "smoothness.tough_canvas_cases/bouncing_svg_images" - }, - { - "duration": "22.905657187500008", - "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear" - }, - { - "duration": "13.790709718750001", - "name": "smoothness.tough_canvas_cases/canvas_arcs" - }, - { - "duration": "12.444936052083333", - "name": "smoothness.tough_canvas_cases/canvas_font_cycler" - }, - { - "duration": "12.26954741666667", - "name": "smoothness.tough_canvas_cases/canvas_lines" - }, - { - "duration": "11.93115234375", - "name": "smoothness.tough_canvas_cases/canvas_to_blob" - }, - { - "duration": "12.201230812499999", - "name": "smoothness.tough_canvas_cases/chip_tune" - }, - { - "duration": "12.125455520833334", - "name": "smoothness.tough_canvas_cases/crafty_mind" - }, - { - "duration": "12.100914291666669", - "name": "smoothness.tough_canvas_cases/effect_games" - }, - { - "duration": "13.866079093750002", - "name": "smoothness.tough_canvas_cases/fill_shapes" - }, - { - "duration": "13.943776885416668", - "name": "smoothness.tough_canvas_cases/geo_apis" - }, - { - "duration": "11.87006808333333", - "name": "smoothness.tough_canvas_cases/hakim" - }, - { - "duration": "12.896891989583333", - "name": "smoothness.tough_canvas_cases/jarro_doverson" - }, - { - "duration": "11.644616083333332", - "name": "smoothness.tough_canvas_cases/kevs_3d" - }, - { - "duration": "12.877454458333332", - "name": "smoothness.tough_canvas_cases/man_in_blue" - }, - { - "duration": "15.71874534375", - "name": "smoothness.tough_canvas_cases/many_images" - }, - { - "duration": "11.882275114583335", - "name": "smoothness.tough_canvas_cases/megi_dish" - }, - { - "duration": "12.30170944791667", - "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt" - }, - { - "duration": "12.386295729166667", - "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank" - }, - { - "duration": "12.285534020833333", - "name": "smoothness.tough_canvas_cases/microsoft_snow" - }, - { - "duration": "12.007386656249999", - "name": "smoothness.tough_canvas_cases/microsoft_speed_reading" - }, - { - "duration": "12.076300875", - "name": "smoothness.tough_canvas_cases/microsoft_tweet_map" - }, - { - "duration": "13.322996677083326", - "name": "smoothness.tough_canvas_cases/microsoft_video_city" - }, - { - "duration": "11.882614083333337", - "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains" - }, - { - "duration": "11.634863833333332", - "name": "smoothness.tough_canvas_cases/mix_10k" - }, - { - "duration": "13.071094500000001", - "name": "smoothness.tough_canvas_cases/put_get_image_data" - }, - { - "duration": "11.295558822916668", - "name": "smoothness.tough_canvas_cases/runway" - }, - { - "duration": "12.95353134375", - "name": "smoothness.tough_canvas_cases/smash_cat" - }, - { - "duration": "11.642395343750001", - "name": "smoothness.tough_canvas_cases/spielzeugz" - }, - { - "duration": "13.886192343749999", - "name": "smoothness.tough_canvas_cases/stroke_shapes" - }, - { - "duration": "18.319941520833336", - "name": "smoothness.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "20.019048874999992", - "name": "smoothness.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "19.57218495833334", - "name": "smoothness.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "22.84653025", - "name": "smoothness.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "7.826360927272725", - "name": "smoothness.tough_image_decode_cases/cats_unscaled" - }, - { - "duration": "6.263716018181818", - "name": "smoothness.tough_image_decode_cases/cats_viewport_width" - }, - { - "duration": "7.849364250000001", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html" - }, - { - "duration": "6.265710324999999", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html" - }, - { - "duration": "17.774061749999998", - "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "27.281641625000002", - "name": "smoothness.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "19.252666", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "18.94495710416667", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "13.479096499999999", - "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "12.768980989583333", - "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "10.6199711875", - "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "9.653199322916665", - "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "8.581660197916667", - "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "8.003215904166664", - "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "7.680736029166668", - "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "7.4616434270833345", - "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "7.273391618750002", - "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "7.204429256249999", - "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "13.381110312499997", - "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "12.40196025", - "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "10.281329291666667", - "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "9.255615666666666", - "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "8.185797718749997", - "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "7.7100792875", - "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "7.455367139583333", - "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "7.175537222916668", - "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "6.989181814583336", - "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "6.8872320291666655", - "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "14.780872552083332", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "13.773624354166671", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "11.871274239583336", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "10.689090156250002", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "9.888426708333336", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "9.346284156249997", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "9.163754270833332", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "9.08754909375", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "8.809208360416669", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "8.804140916666668", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "13.174456000000005", - "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "12.436915749999999", - "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "10.251570354166667", - "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "9.253714145833333", - "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "8.240424041666667", - "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "7.686312585416669", - "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "7.39521278541667", - "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "7.185376945833334", - "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "6.99311766458333", - "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "6.8875278812500005", - "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "19.16040542553191", - "name": "smoothness.tough_texture_upload_cases/background_color_animation" - }, - { - "duration": "18.907352", - "name": "smoothness.tough_texture_upload_cases/background_color_animation.html" - }, - { - "duration": "18.31478017021277", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient" - }, - { - "duration": "18.590584", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient.html" - }, - { - "duration": "20.665585489361707", - "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads" - }, - { - "duration": "20.101875", - "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads.html" - }, - { - "duration": "21.873398021276593", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads" - }, - { - "duration": "21.49238", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads.html" - }, - { - "duration": "16.823551574468087", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads" - }, - { - "duration": "16.870625", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads.html" - }, - { - "duration": "16.41611044680851", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads" - }, - { - "duration": "16.329224", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads.html" - }, - { - "duration": "18.2857485625", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html" - }, - { - "duration": "17.824480291666667", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html" - }, - { - "duration": "17.81820527083334", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html" - }, - { - "duration": "17.785672208333335", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html" - }, - { - "duration": "17.813270500000005", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html" - }, - { - "duration": "17.77213685416666", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html" - }, - { - "duration": "17.787055729166664", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html" - }, - { - "duration": "17.808878125000007", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html" - }, - { - "duration": "17.813497875", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html" - }, - { - "duration": "17.784920520833335", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html" - }, - { - "duration": "17.829168812499997", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html" - }, - { - "duration": "17.803057937499997", - "name": "smoothness.tough_webgl_cases/animometer_webgl" - }, - { - "duration": "28.0481899375", - "name": "smoothness.tough_webgl_cases/aquarium" - }, - { - "duration": "21.099554708333336", - "name": "smoothness.tough_webgl_cases/aquarium_20k" - }, - { - "duration": "14.953398593750002", - "name": "smoothness.tough_webgl_cases/blob" - }, - { - "duration": "15.739190020833334", - "name": "smoothness.tough_webgl_cases/dynamic_cube_map" - }, - { - "duration": "13.948126749999995", - "name": "smoothness.tough_webgl_cases/earth" - }, - { - "duration": "14.09098721875", - "name": "smoothness.tough_webgl_cases/many_planets_deep" - }, - { - "duration": "15.227119072916667", - "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object" - }, - { - "duration": "13.773484270833334", - "name": "smoothness.tough_webgl_cases/particles" - }, - { - "duration": "13.754705208333334", - "name": "smoothness.tough_webgl_cases/san_angeles" - }, - { - "duration": "40.224208", - "name": "speedometer-future/http://browserbench.org/Speedometer/" - }, - { - "duration": "40.448018229166664", - "name": "speedometer/http://browserbench.org/Speedometer/" - }, - { - "duration": "80.64946781249999", - "name": "speedometer2-future/Speedometer2" - }, - { - "duration": "79.62665643749999", - "name": "speedometer2/Speedometer2" - }, - { - "duration": "68.70720387499999", - "name": "system_health.common_desktop/browse:media:flickr_infinite_scroll" - }, - { - "duration": "96.23197733333332", - "name": "system_health.common_desktop/browse:media:imgur" - }, - { - "duration": "69.53731740425532", - "name": "system_health.common_desktop/browse:media:pinterest" - }, - { - "duration": "72.74783623404257", - "name": "system_health.common_desktop/browse:media:youtube" - }, - { - "duration": "54.05908985416665", - "name": "system_health.common_desktop/browse:news:flipboard" - }, - { - "duration": "76.00373768085106", - "name": "system_health.common_desktop/browse:news:nytimes" - }, - { - "duration": "62.46284725531913", - "name": "system_health.common_desktop/browse:news:reddit" - }, - { - "duration": "50.53067641666667", - "name": "system_health.common_desktop/browse:search:google" - }, - { - "duration": "37.118942499999996", - "name": "system_health.common_desktop/browse:search:google_india" - }, - { - "duration": "68.10654435416664", - "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll" - }, - { - "duration": "75.64069125531913", - "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "48.59782551063828", - "name": "system_health.common_desktop/browse:social:twitter" - }, - { - "duration": "74.75477689361703", - "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll" - }, - { - "duration": "69.84943064583332", - "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "64.69654210416668", - "name": "system_health.common_desktop/browse:tools:earth" - }, - { - "duration": "21.815617041666673", - "name": "system_health.common_desktop/browse_accessibility:tech:codesearch" - }, - { - "duration": "17.71174522916667", - "name": "system_health.common_desktop/load:chrome:blank" - }, - { - "duration": "19.344874895833332", - "name": "system_health.common_desktop/load:games:alphabetty" - }, - { - "duration": "20.800760291666673", - "name": "system_health.common_desktop/load:games:bubbles" - }, - { - "duration": "18.25898306382979", - "name": "system_health.common_desktop/load:games:lazors" - }, - { - "duration": "22.401427212765956", - "name": "system_health.common_desktop/load:games:miniclip" - }, - { - "duration": "29.019855297872336", - "name": "system_health.common_desktop/load:games:spychase" - }, - { - "duration": "35.66374379166667", - "name": "system_health.common_desktop/load:media:9gag" - }, - { - "duration": "20.72684916666667", - "name": "system_health.common_desktop/load:media:dailymotion" - }, - { - "duration": "20.016327191489356", - "name": "system_health.common_desktop/load:media:google_images" - }, - { - "duration": "25.020429148936167", - "name": "system_health.common_desktop/load:media:imgur" - }, - { - "duration": "24.438367234042556", - "name": "system_health.common_desktop/load:media:soundcloud" - }, - { - "duration": "23.096587425531915", - "name": "system_health.common_desktop/load:media:youtube" - }, - { - "duration": "19.99262479166667", - "name": "system_health.common_desktop/load:news:bbc" - }, - { - "duration": "25.55444560416667", - "name": "system_health.common_desktop/load:news:cnn" - }, - { - "duration": "19.9452279787234", - "name": "system_health.common_desktop/load:news:flipboard" - }, - { - "duration": "18.17057017021277", - "name": "system_health.common_desktop/load:news:hackernews" - }, - { - "duration": "22.531739425531914", - "name": "system_health.common_desktop/load:news:nytimes" - }, - { - "duration": "25.45115774468085", - "name": "system_health.common_desktop/load:news:qq" - }, - { - "duration": "19.445543170212765", - "name": "system_health.common_desktop/load:news:reddit" - }, - { - "duration": "20.126454382978725", - "name": "system_health.common_desktop/load:news:wikipedia" - }, - { - "duration": "20.508251", - "name": "system_health.common_desktop/load:search:amazon" - }, - { - "duration": "18.7538531875", - "name": "system_health.common_desktop/load:search:baidu" - }, - { - "duration": "21.079703382978725", - "name": "system_health.common_desktop/load:search:ebay" - }, - { - "duration": "18.74869231914893", - "name": "system_health.common_desktop/load:search:google" - }, - { - "duration": "20.283273702127662", - "name": "system_health.common_desktop/load:search:taobao" - }, - { - "duration": "18.935629446808505", - "name": "system_health.common_desktop/load:search:yahoo" - }, - { - "duration": "18.495116893617023", - "name": "system_health.common_desktop/load:search:yandex" - }, - { - "duration": "20.51777840425532", - "name": "system_health.common_desktop/load:social:instagram" - }, - { - "duration": "21.690613276595744", - "name": "system_health.common_desktop/load:social:pinterest" - }, - { - "duration": "20.093339829787237", - "name": "system_health.common_desktop/load:social:vk" - }, - { - "duration": "36.2614315625", - "name": "system_health.common_desktop/load:tools:docs" - }, - { - "duration": "28.280743042553198", - "name": "system_health.common_desktop/load:tools:drive" - }, - { - "duration": "21.389366361702127", - "name": "system_health.common_desktop/load:tools:dropbox" - }, - { - "duration": "25.26429861702127", - "name": "system_health.common_desktop/load:tools:gmail" - }, - { - "duration": "19.903631978723404", - "name": "system_health.common_desktop/load:tools:stackoverflow" - }, - { - "duration": "24.027517617021275", - "name": "system_health.common_desktop/load:tools:weather" - }, - { - "duration": "19.58908264583334", - "name": "system_health.common_desktop/load_accessibility:media:wikipedia" - }, - { - "duration": "21.080599229166662", - "name": "system_health.common_desktop/load_accessibility:shopping:amazon" - }, - { - "duration": "132.95697510638297", - "name": "system_health.common_desktop/long_running:tools:gmail-background" - }, - { - "duration": "134.2075229787234", - "name": "system_health.common_desktop/long_running:tools:gmail-foreground" - }, - { - "duration": "49.57117765957446", - "name": "system_health.common_desktop/play:media:soundcloud" - }, - { - "duration": "183.77485439583333", - "name": "system_health.memory_desktop/browse:media:flickr_infinite_scroll" - }, - { - "duration": "215.28298031250003", - "name": "system_health.memory_desktop/browse:media:imgur" - }, - { - "duration": "190.90299799999997", - "name": "system_health.memory_desktop/browse:media:pinterest" - }, - { - "duration": "180.3900352954545", - "name": "system_health.memory_desktop/browse:media:tumblr" - }, - { - "duration": "185.48554655319148", - "name": "system_health.memory_desktop/browse:media:youtube" - }, - { - "duration": "140.40771377083334", - "name": "system_health.memory_desktop/browse:news:flipboard" - }, - { - "duration": "159.89058268085108", - "name": "system_health.memory_desktop/browse:news:nytimes" - }, - { - "duration": "162.56790312765955", - "name": "system_health.memory_desktop/browse:news:reddit" - }, - { - "duration": "141.5539950625", - "name": "system_health.memory_desktop/browse:search:google" - }, - { - "duration": "104.19273791666667", - "name": "system_health.memory_desktop/browse:search:google_india" - }, - { - "duration": "182.58016435416664", - "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll" - }, - { - "duration": "187.7433878913043", - "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "134.64441536170213", - "name": "system_health.memory_desktop/browse:social:twitter" - }, - { - "duration": "182.55528033333334", - "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "163.55594918749998", - "name": "system_health.memory_desktop/browse:tools:earth" - }, - { - "duration": "58.87908991666666", - "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch" - }, - { - "duration": "49.48664949999999", - "name": "system_health.memory_desktop/load:chrome:blank" - }, - { - "duration": "52.676513166666666", - "name": "system_health.memory_desktop/load:games:alphabetty" - }, - { - "duration": "53.10001489583333", - "name": "system_health.memory_desktop/load:games:bubbles" - }, - { - "duration": "51.092430659574475", - "name": "system_health.memory_desktop/load:games:lazors" - }, - { - "duration": "78.40706668085103", - "name": "system_health.memory_desktop/load:games:spychase" - }, - { - "duration": "83.91644004166666", - "name": "system_health.memory_desktop/load:media:9gag" - }, - { - "duration": "55.17557897916668", - "name": "system_health.memory_desktop/load:media:dailymotion" - }, - { - "duration": "54.73471391489361", - "name": "system_health.memory_desktop/load:media:google_images" - }, - { - "duration": "65.0938119574468", - "name": "system_health.memory_desktop/load:media:imgur" - }, - { - "duration": "62.09184938297874", - "name": "system_health.memory_desktop/load:media:soundcloud" - }, - { - "duration": "60.78126440425533", - "name": "system_health.memory_desktop/load:media:youtube" - }, - { - "duration": "53.96769543750002", - "name": "system_health.memory_desktop/load:news:bbc" - }, - { - "duration": "64.9279684375", - "name": "system_health.memory_desktop/load:news:cnn" - }, - { - "duration": "54.20426276595745", - "name": "system_health.memory_desktop/load:news:flipboard" - }, - { - "duration": "50.881539021276595", - "name": "system_health.memory_desktop/load:news:hackernews" - }, - { - "duration": "57.712185765957436", - "name": "system_health.memory_desktop/load:news:nytimes" - }, - { - "duration": "64.73828895744683", - "name": "system_health.memory_desktop/load:news:qq" - }, - { - "duration": "52.98582025531915", - "name": "system_health.memory_desktop/load:news:reddit" - }, - { - "duration": "55.72404412765956", - "name": "system_health.memory_desktop/load:news:wikipedia" - }, - { - "duration": "54.49089804166665", - "name": "system_health.memory_desktop/load:search:amazon" - }, - { - "duration": "51.053998166666666", - "name": "system_health.memory_desktop/load:search:baidu" - }, - { - "duration": "55.76076557446808", - "name": "system_health.memory_desktop/load:search:ebay" - }, - { - "duration": "51.54659727659574", - "name": "system_health.memory_desktop/load:search:google" - }, - { - "duration": "55.1989684893617", - "name": "system_health.memory_desktop/load:search:taobao" - }, - { - "duration": "52.81387495744681", - "name": "system_health.memory_desktop/load:search:yahoo" - }, - { - "duration": "51.1775470638298", - "name": "system_health.memory_desktop/load:search:yandex" - }, - { - "duration": "55.847999510638324", - "name": "system_health.memory_desktop/load:social:instagram" - }, - { - "duration": "59.35563495744681", - "name": "system_health.memory_desktop/load:social:pinterest" - }, - { - "duration": "55.300469127659575", - "name": "system_health.memory_desktop/load:social:vk" - }, - { - "duration": "70.01042052083334", - "name": "system_health.memory_desktop/load:tools:docs" - }, - { - "duration": "60.749431489361704", - "name": "system_health.memory_desktop/load:tools:drive" - }, - { - "duration": "56.059733170212766", - "name": "system_health.memory_desktop/load:tools:dropbox" - }, - { - "duration": "64.69713421276595", - "name": "system_health.memory_desktop/load:tools:gmail" - }, - { - "duration": "54.81979540425532", - "name": "system_health.memory_desktop/load:tools:stackoverflow" - }, - { - "duration": "60.65424587234041", - "name": "system_health.memory_desktop/load:tools:weather" - }, - { - "duration": "52.980916520833354", - "name": "system_health.memory_desktop/load_accessibility:media:wikipedia" - }, - { - "duration": "55.729371520833325", - "name": "system_health.memory_desktop/load_accessibility:shopping:amazon" - }, - { - "duration": "487.99304042553194", - "name": "system_health.memory_desktop/long_running:tools:gmail-background" - }, - { - "duration": "476.55073936170214", - "name": "system_health.memory_desktop/long_running:tools:gmail-foreground" - }, - { - "duration": "131.8114124042553", - "name": "system_health.memory_desktop/play:media:soundcloud" - }, - { - "duration": "23.878051812499994", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION" - }, - { - "duration": "32.754019291666665", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS" - }, - { - "duration": "21.679805416666664", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE" - }, - { - "duration": "21.892348145833328", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE" - }, - { - "duration": "19.54230533333333", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID" - }, - { - "duration": "15.10354675", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY" - }, - { - "duration": "19.480637166666668", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY" - }, - { - "duration": "19.635887729166665", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID" - }, - { - "duration": "15.178815239583336", - "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "14.520273260416666", - "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "11.808818281249998", - "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "10.568694510416664", - "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "9.225882010416667", - "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "8.648632989583332", - "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "8.30560684375", - "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "7.996971185416665", - "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "7.768643589583338", - "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "7.55812395625", - "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "14.709306427083328", - "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "13.682898854166666", - "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "11.184300635416667", - "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "9.979827677083332", - "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "8.730697406249998", - "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "8.16466546875", - "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "7.796566160416666", - "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "7.566853449999997", - "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "7.303779191666666", - "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "7.141669420833335", - "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "17.25842310416667", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "16.191214177083328", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "13.357647781250002", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "12.11809334375", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "10.426576333333331", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "9.718023927083332", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "9.262084406249999", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "8.980367708333333", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "8.660767479166665", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "8.55473748958333", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "14.4723413125", - "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "13.679610020833337", - "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "11.248790645833333", - "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "10.003890447916667", - "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "8.817321416666667", - "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "8.199081885416668", - "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "7.779566027083333", - "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "7.560642972916668", - "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "7.317289231250001", - "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "7.15616475625", - "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "8.63066296875", - "name": "tracing.tracing_with_background_memory_infra/Facebook" - }, - { - "duration": "9.174537218750002", - "name": "tracing.tracing_with_background_memory_infra/Wikipedia" - }, - { - "duration": "7.499615389583333", - "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com" - }, - { - "duration": "7.7694264125", - "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/" - }, - { - "duration": "7.566907964583334", - "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/" - }, - { - "duration": "7.800263462500002", - "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/" - }, - { - "duration": "9.736474135416664", - "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com" - }, - { - "duration": "8.525120354166667", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "9.771211124999999", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/" - }, - { - "duration": "79.5818356734694", - "name": "v8.browsing_desktop-future/browse:media:flickr_infinite_scroll" - }, - { - "duration": "216.64217122448972", - "name": "v8.browsing_desktop-future/browse:media:imgur" - }, - { - "duration": "79.51715263265308", - "name": "v8.browsing_desktop-future/browse:media:pinterest" - }, - { - "duration": "87.46729753061227", - "name": "v8.browsing_desktop-future/browse:media:tumblr" - }, - { - "duration": "90.00364848979589", - "name": "v8.browsing_desktop-future/browse:media:youtube" - }, - { - "duration": "102.760812877551", - "name": "v8.browsing_desktop-future/browse:news:nytimes" - }, - { - "duration": "67.60670940816327", - "name": "v8.browsing_desktop-future/browse:news:reddit" - }, - { - "duration": "54.34892416326529", - "name": "v8.browsing_desktop-future/browse:search:google" - }, - { - "duration": "39.61906481632653", - "name": "v8.browsing_desktop-future/browse:search:google_india" - }, - { - "duration": "84.76559163265307", - "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll" - }, - { - "duration": "89.10839742857144", - "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "54.35969671428572", - "name": "v8.browsing_desktop-future/browse:social:twitter" - }, - { - "duration": "91.03835308163262", - "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll" - }, - { - "duration": "80.02736802040816", - "name": "v8.browsing_desktop-future/browse:tools:earth" - }, - { - "duration": "80.04460602083336", - "name": "v8.browsing_desktop/browse:media:flickr_infinite_scroll" - }, - { - "duration": "203.13966958333333", - "name": "v8.browsing_desktop/browse:media:imgur" - }, - { - "duration": "79.39863712765957", - "name": "v8.browsing_desktop/browse:media:pinterest" - }, - { - "duration": "87.91625089361702", - "name": "v8.browsing_desktop/browse:media:tumblr" - }, - { - "duration": "89.56385866666665", - "name": "v8.browsing_desktop/browse:media:youtube" - }, - { - "duration": "103.68791027083334", - "name": "v8.browsing_desktop/browse:news:nytimes" - }, - { - "duration": "67.63039980851065", - "name": "v8.browsing_desktop/browse:news:reddit" - }, - { - "duration": "54.44260460416667", - "name": "v8.browsing_desktop/browse:search:google" - }, - { - "duration": "39.74619089583333", - "name": "v8.browsing_desktop/browse:search:google_india" - }, - { - "duration": "85.31877243750002", - "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll" - }, - { - "duration": "89.43720446808508", - "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "54.41831144680851", - "name": "v8.browsing_desktop/browse:social:twitter" - }, - { - "duration": "92.0575536875", - "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll" - }, - { - "duration": "80.51424258333334", - "name": "v8.browsing_desktop/browse:tools:earth" - }, - { - "duration": "97.14442145945945", - "name": "v8.runtime_stats.top_25/AdsAMPAds" - }, - { - "duration": "29.729230166666664", - "name": "v8.runtime_stats.top_25/AdsAMPAds_cold" - }, - { - "duration": "34.9926115", - "name": "v8.runtime_stats.top_25/AdsAMPAds_hot" - }, - { - "duration": "32.39964375", - "name": "v8.runtime_stats.top_25/AdsAMPAds_warm" - }, - { - "duration": "96.42089545945947", - "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds" - }, - { - "duration": "29.414083916666666", - "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_cold" - }, - { - "duration": "34.80956675", - "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_hot" - }, - { - "duration": "32.14541033333334", - "name": "v8.runtime_stats.top_25/AdsAdSenseAsyncAds_warm" - }, - { - "duration": "92.17025148648649", - "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage" - }, - { - "duration": "28.346466999999993", - "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_cold" - }, - { - "duration": "33.075604000000006", - "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_hot" - }, - { - "duration": "30.69868266666666", - "name": "v8.runtime_stats.top_25/AdsAsyncAdSenseImage_warm" - }, - { - "duration": "96.06170851351352", - "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds" - }, - { - "duration": "29.37112508333333", - "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_cold" - }, - { - "duration": "34.54637533333334", - "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_hot" - }, - { - "duration": "32.05573441666667", - "name": "v8.runtime_stats.top_25/AdsDoubleClickAsyncAds_warm" - }, - { - "duration": "94.00267735135134", - "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots" - }, - { - "duration": "28.880959083333337", - "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_cold" - }, - { - "duration": "33.73918333333334", - "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_hot" - }, - { - "duration": "31.344064916666667", - "name": "v8.runtime_stats.top_25/AdsMultipleAdSlots_warm" - }, - { - "duration": "92.93597578378377", - "name": "v8.runtime_stats.top_25/AdsOnScreenDetection" - }, - { - "duration": "28.546094166666673", - "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_cold" - }, - { - "duration": "33.50051224999999", - "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_hot" - }, - { - "duration": "31.022034333333334", - "name": "v8.runtime_stats.top_25/AdsOnScreenDetection_warm" - }, - { - "duration": "95.10616805405405", - "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage" - }, - { - "duration": "29.261946583333337", - "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_cold" - }, - { - "duration": "34.23020808333334", - "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_hot" - }, - { - "duration": "31.54063533333333", - "name": "v8.runtime_stats.top_25/AdsSyncAdSenseImage_warm" - }, - { - "duration": "93.33202454054053", - "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage" - }, - { - "duration": "28.650283", - "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_cold" - }, - { - "duration": "33.506005333333334", - "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_hot" - }, - { - "duration": "31.095669250000004", - "name": "v8.runtime_stats.top_25/AdsSyncLoadAsyncRenderAdSenseImage_warm" - }, - { - "duration": "155.63492613513515", - "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering" - }, - { - "duration": "39.865687666666666", - "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_cold" - }, - { - "duration": "64.03284491666666", - "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_hot" - }, - { - "duration": "51.8574805", - "name": "v8.runtime_stats.top_25/AdsViewOptimizedRendering_warm" - }, - { - "duration": "114.03603259459456", - "name": "v8.runtime_stats.top_25/http://edition.cnn.com" - }, - { - "duration": "33.18535966666667", - "name": "v8.runtime_stats.top_25/http://edition.cnn.com_cold" - }, - { - "duration": "42.32551608333333", - "name": "v8.runtime_stats.top_25/http://edition.cnn.com_hot" - }, - { - "duration": "38.07854458333335", - "name": "v8.runtime_stats.top_25/http://edition.cnn.com_warm" - }, - { - "duration": "96.81748883783786", - "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0" - }, - { - "duration": "29.264677083333336", - "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_cold" - }, - { - "duration": "34.99812791666667", - "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_hot" - }, - { - "duration": "32.36807408333333", - "name": "v8.runtime_stats.top_25/http://hi.wikipedia.org/wiki/%E0%A4%AE%E0%A5%81%E0%A4%96%E0%A4%AA%E0%A5%83%E0%A4%B7%E0%A5%8D%E0%A4%A0_warm" - }, - { - "duration": "99.97180462162163", - "name": "v8.runtime_stats.top_25/http://inbox.google.com" - }, - { - "duration": "30.33580808333333", - "name": "v8.runtime_stats.top_25/http://inbox.google.com_cold" - }, - { - "duration": "36.22618824999999", - "name": "v8.runtime_stats.top_25/http://inbox.google.com_hot" - }, - { - "duration": "33.349916416666666", - "name": "v8.runtime_stats.top_25/http://inbox.google.com_warm" - }, - { - "duration": "99.80595805405406", - "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo" - }, - { - "duration": "30.027694499999996", - "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_cold" - }, - { - "duration": "36.240547666666664", - "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_hot" - }, - { - "duration": "33.37330683333334", - "name": "v8.runtime_stats.top_25/http://maps.google.co.jp/maps/search/restaurant+tokyo_warm" - }, - { - "duration": "99.73722910810812", - "name": "v8.runtime_stats.top_25/http://meta.discourse.org" - }, - { - "duration": "30.05347858333333", - "name": "v8.runtime_stats.top_25/http://meta.discourse.org_cold" - }, - { - "duration": "36.06603175", - "name": "v8.runtime_stats.top_25/http://meta.discourse.org_hot" - }, - { - "duration": "33.46276591666667", - "name": "v8.runtime_stats.top_25/http://meta.discourse.org_warm" - }, - { - "duration": "93.38376099999999", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular" - }, - { - "duration": "28.571734083333336", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_cold" - }, - { - "duration": "33.60504158333333", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_hot" - }, - { - "duration": "31.220284333333336", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?angular_warm" - }, - { - "duration": "92.38412478378378", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone" - }, - { - "duration": "28.249208166666666", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_cold" - }, - { - "duration": "33.194025249999996", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_hot" - }, - { - "duration": "30.753574083333334", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?backbone_warm" - }, - { - "duration": "93.51561732432434", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember" - }, - { - "duration": "28.658664416666664", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_cold" - }, - { - "duration": "33.6754805", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_hot" - }, - { - "duration": "31.067731916666663", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?ember_warm" - }, - { - "duration": "92.66144502702704", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery" - }, - { - "duration": "28.302838749999996", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_cold" - }, - { - "duration": "33.339811499999996", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_hot" - }, - { - "duration": "30.992167416666664", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?jquery_warm" - }, - { - "duration": "92.06579132432432", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla" - }, - { - "duration": "28.204714", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_cold" - }, - { - "duration": "33.097395", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_hot" - }, - { - "duration": "30.73535383333334", - "name": "v8.runtime_stats.top_25/http://pollouer.muc/Speedometer/CustomRunner.html?vanilla_warm" - }, - { - "duration": "100.02539016216217", - "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io" - }, - { - "duration": "30.516179083333338", - "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_cold" - }, - { - "duration": "36.08806791666667", - "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_hot" - }, - { - "duration": "33.51132666666667", - "name": "v8.runtime_stats.top_25/http://reddit.musicplayer.io_warm" - }, - { - "duration": "101.03594343243242", - "name": "v8.runtime_stats.top_25/http://weibo.com" - }, - { - "duration": "30.590286833333337", - "name": "v8.runtime_stats.top_25/http://weibo.com_cold" - }, - { - "duration": "36.40851008333333", - "name": "v8.runtime_stats.top_25/http://weibo.com_hot" - }, - { - "duration": "33.953025749999995", - "name": "v8.runtime_stats.top_25/http://weibo.com_warm" - }, - { - "duration": "98.4698321081081", - "name": "v8.runtime_stats.top_25/http://world.taobao.com" - }, - { - "duration": "29.82549391666667", - "name": "v8.runtime_stats.top_25/http://world.taobao.com_cold" - }, - { - "duration": "35.55721225", - "name": "v8.runtime_stats.top_25/http://world.taobao.com_hot" - }, - { - "duration": "32.89413749999999", - "name": "v8.runtime_stats.top_25/http://world.taobao.com_warm" - }, - { - "duration": "95.28652145945946", - "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8" - }, - { - "duration": "29.03061083333333", - "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_cold" - }, - { - "duration": "34.421959333333334", - "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_hot" - }, - { - "duration": "31.7086845", - "name": "v8.runtime_stats.top_25/http://www.amazon.com/s/?field-keywords=v8_warm" - }, - { - "duration": "95.40279559459456", - "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8" - }, - { - "duration": "28.96401933333333", - "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_cold" - }, - { - "duration": "34.48381808333333", - "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_hot" - }, - { - "duration": "31.824438416666666", - "name": "v8.runtime_stats.top_25/http://www.baidu.com/s?wd=v8_warm" - }, - { - "duration": "93.04050781081082", - "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine" - }, - { - "duration": "28.466535333333336", - "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_cold" - }, - { - "duration": "33.459131000000006", - "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_hot" - }, - { - "duration": "30.996298", - "name": "v8.runtime_stats.top_25/http://www.bing.com/search?q=v8+engine_warm" - }, - { - "duration": "109.93758048648648", - "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8" - }, - { - "duration": "32.617603", - "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_cold" - }, - { - "duration": "40.61102758333333", - "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_hot" - }, - { - "duration": "36.71621008333333", - "name": "v8.runtime_stats.top_25/http://www.ebay.fr/sch/i.html?_nkw=v8_warm" - }, - { - "duration": "96.93371078378377", - "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest" - }, - { - "duration": "29.584513666666663", - "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_cold" - }, - { - "duration": "34.86897208333334", - "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_hot" - }, - { - "duration": "32.33233433333333", - "name": "v8.runtime_stats.top_25/http://www.instagram.com/archdigest_warm" - }, - { - "duration": "105.6353258918919", - "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae" - }, - { - "duration": "31.704007999999998", - "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_cold" - }, - { - "duration": "38.44192133333333", - "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_hot" - }, - { - "duration": "35.266108666666675", - "name": "v8.runtime_stats.top_25/http://www.msn.com/ar-ae_warm" - }, - { - "duration": "100.80386881081078", - "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular" - }, - { - "duration": "29.98101083333334", - "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_cold" - }, - { - "duration": "36.88019533333333", - "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_hot" - }, - { - "duration": "33.678251749999994", - "name": "v8.runtime_stats.top_25/http://www.pinterest.com/categories/popular_warm" - }, - { - "duration": "200.40316264864867", - "name": "v8.runtime_stats.top_25/http://www.qq.com" - }, - { - "duration": "59.918794166666665", - "name": "v8.runtime_stats.top_25/http://www.qq.com_cold" - }, - { - "duration": "71.86164641666667", - "name": "v8.runtime_stats.top_25/http://www.qq.com_hot" - }, - { - "duration": "66.33229741666666", - "name": "v8.runtime_stats.top_25/http://www.qq.com_warm" - }, - { - "duration": "97.67206075675672", - "name": "v8.runtime_stats.top_25/http://www.reddit.com" - }, - { - "duration": "29.609107249999997", - "name": "v8.runtime_stats.top_25/http://www.reddit.com_cold" - }, - { - "duration": "35.44513908333334", - "name": "v8.runtime_stats.top_25/http://www.reddit.com_hot" - }, - { - "duration": "32.586310833333336", - "name": "v8.runtime_stats.top_25/http://www.reddit.com_warm" - }, - { - "duration": "100.50913637837837", - "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13" - }, - { - "duration": "30.053586583333338", - "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_cold" - }, - { - "duration": "36.88432958333334", - "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_hot" - }, - { - "duration": "33.484170416666664", - "name": "v8.runtime_stats.top_25/http://www.twitter.com/taylorswift13_warm" - }, - { - "duration": "98.73035354054052", - "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill" - }, - { - "duration": "29.815212833333334", - "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_cold" - }, - { - "duration": "35.93708175", - "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_hot" - }, - { - "duration": "32.922468583333334", - "name": "v8.runtime_stats.top_25/http://www.wikiwand.com/en/hill_warm" - }, - { - "duration": "95.90420835135136", - "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp" - }, - { - "duration": "29.225590166666667", - "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_cold" - }, - { - "duration": "34.610729750000004", - "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_hot" - }, - { - "duration": "32.097509166666676", - "name": "v8.runtime_stats.top_25/http://www.yahoo.co.jp_warm" - }, - { - "duration": "95.26409272972974", - "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8" - }, - { - "duration": "29.04770075", - "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_cold" - }, - { - "duration": "34.34823366666666", - "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_hot" - }, - { - "duration": "31.74964683333333", - "name": "v8.runtime_stats.top_25/http://yandex.ru/search/?text=v8_warm" - }, - { - "duration": "137.48639548648646", - "name": "v8.runtime_stats.top_25/https://adwords.google.com" - }, - { - "duration": "38.430442", - "name": "v8.runtime_stats.top_25/https://adwords.google.com_cold" - }, - { - "duration": "49.790647416666665", - "name": "v8.runtime_stats.top_25/https://adwords.google.com_hot" - }, - { - "duration": "47.17048416666668", - "name": "v8.runtime_stats.top_25/https://adwords.google.com_warm" - }, - { - "duration": "91.78008037837836", - "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3" - }, - { - "duration": "28.183452833333334", - "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_cold" - }, - { - "duration": "32.95587441666667", - "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_hot" - }, - { - "duration": "30.56099966666667", - "name": "v8.runtime_stats.top_25/https://cdn.ampproject.org/c/www.bbc.co.uk/news/amp/37344292#log=3_warm" - }, - { - "duration": "117.0475531081081", - "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit" - }, - { - "duration": "33.136618250000005", - "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_cold" - }, - { - "duration": "45.009847916666665", - "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_hot" - }, - { - "duration": "39.443937999999996", - "name": "v8.runtime_stats.top_25/https://en.wikipedia.org/w/index.php?title=Barack_Obama&veaction=edit_warm" - }, - { - "duration": "98.97496070270269", - "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira" - }, - { - "duration": "29.721123833333333", - "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_cold" - }, - { - "duration": "36.00557833333334", - "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_hot" - }, - { - "duration": "33.2247205", - "name": "v8.runtime_stats.top_25/https://www.facebook.com/shakira_warm" - }, - { - "duration": "98.38347883783787", - "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8" - }, - { - "duration": "33.11177825000001", - "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_cold" - }, - { - "duration": "34.0202655", - "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_hot" - }, - { - "duration": "31.313557333333332", - "name": "v8.runtime_stats.top_25/https://www.google.de/search?q=v8_warm" - }, - { - "duration": "98.42558037837837", - "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/" - }, - { - "duration": "29.832574499999996", - "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_cold" - }, - { - "duration": "35.43170141666666", - "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_hot" - }, - { - "duration": "33.052616", - "name": "v8.runtime_stats.top_25/https://www.linkedin.com/m/_warm" - }, - { - "duration": "107.81936718918917", - "name": "v8.runtime_stats.top_25/https://www.youtube.com" - }, - { - "duration": "112.82846540540541", - "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg" - }, - { - "duration": "34.544785749999996", - "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_cold" - }, - { - "duration": "41.18494391666667", - "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_hot" - }, - { - "duration": "38.32313566666667", - "name": "v8.runtime_stats.top_25/https://www.youtube.com/watch?v=_kZsOISarzg_warm" - }, - { - "duration": "32.282142416666666", - "name": "v8.runtime_stats.top_25/https://www.youtube.com_cold" - }, - { - "duration": "39.43684891666667", - "name": "v8.runtime_stats.top_25/https://www.youtube.com_hot" - }, - { - "duration": "36.179239", - "name": "v8.runtime_stats.top_25/https://www.youtube.com_warm" - }, - { - "duration": "46.53080114285716", - "name": "wasm/WasmSpaceBuggy" - }, - { - "duration": "193.2716814081633", - "name": "wasm/WasmStylizedRenderer" - }, - { - "duration": "163.7476094897959", - "name": "wasm/WasmSunTemple" - }, - { - "duration": "63.74297829591837", - "name": "wasm/WasmTanks" - }, - { - "duration": "168.84810285714286", - "name": "wasm/WasmZenGarden" - }, - { - "duration": "63.809078653061206", - "name": "webrtc/10s_datachannel_transfer" - }, - { - "duration": "20.1357622244898", - "name": "webrtc/canvas_capture_peer_connection" - }, - { - "duration": "29.863458000000005", - "name": "webrtc/codec_constraints_h264" - }, - { - "duration": "29.897266938775516", - "name": "webrtc/codec_constraints_vp8" - }, - { - "duration": "29.8573076122449", - "name": "webrtc/codec_constraints_vp9" - }, - { - "duration": "18.758063346938776", - "name": "webrtc/hd_local_stream_10s" - }, - { - "duration": "47.2713806734694", - "name": "webrtc/multiple_peerconnections" - }, - { - "duration": "50.00918455102041", - "name": "webrtc/pause_play_peerconnections" - } -] \ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/pixel2_story_timing.json b/tools/perf/core/shard_maps/timing_data/pixel2_story_timing.json deleted file mode 100644 index 78c4d02..0000000 --- a/tools/perf/core/shard_maps/timing_data/pixel2_story_timing.json +++ /dev/null
@@ -1,7178 +0,0 @@ -[ - { - "duration": "13.587834459595967", - "name": "blink_perf.bindings/append-child.html" - }, - { - "duration": "11.239760772727273", - "name": "blink_perf.bindings/create-element.html" - }, - { - "duration": "10.513632752525254", - "name": "blink_perf.bindings/document-implementation.html" - }, - { - "duration": "10.551911207070708", - "name": "blink_perf.bindings/dom-attribute-on-prototoype.html" - }, - { - "duration": "10.931322707070706", - "name": "blink_perf.bindings/first-child.html" - }, - { - "duration": "9.23210519191919", - "name": "blink_perf.bindings/gc-forest.html" - }, - { - "duration": "11.045180338383839", - "name": "blink_perf.bindings/gc-mini-tree.html" - }, - { - "duration": "23.378834999999995", - "name": "blink_perf.bindings/gc-tree.html" - }, - { - "duration": "10.512732318181815", - "name": "blink_perf.bindings/get-attribute-rare.html" - }, - { - "duration": "10.587690656565657", - "name": "blink_perf.bindings/get-attribute.html" - }, - { - "duration": "10.47878205050505", - "name": "blink_perf.bindings/get-element-by-id.html" - }, - { - "duration": "10.406168404040406", - "name": "blink_perf.bindings/get-elements-by-tag-name.html" - }, - { - "duration": "10.74813076767677", - "name": "blink_perf.bindings/id-getter.html" - }, - { - "duration": "10.317548954545456", - "name": "blink_perf.bindings/id-setter.html" - }, - { - "duration": "11.335273121212122", - "name": "blink_perf.bindings/indexed-getter.html" - }, - { - "duration": "10.637710944444445", - "name": "blink_perf.bindings/insert-before.html" - }, - { - "duration": "11.303045530303036", - "name": "blink_perf.bindings/named-property-enumerator.html" - }, - { - "duration": "24.28999279797978", - "name": "blink_perf.bindings/node-list-access.html" - }, - { - "duration": "10.139387459595964", - "name": "blink_perf.bindings/node-type.html" - }, - { - "duration": "5.555044205050507", - "name": "blink_perf.bindings/post-message.html" - }, - { - "duration": "11.060310050505048", - "name": "blink_perf.bindings/sequence-conversion-array.html" - }, - { - "duration": "10.545383222222227", - "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html" - }, - { - "duration": "5.280190547474746", - "name": "blink_perf.bindings/serialize-array.html" - }, - { - "duration": "4.688366777777778", - "name": "blink_perf.bindings/serialize-long-string.html" - }, - { - "duration": "7.858090982828284", - "name": "blink_perf.bindings/serialize-map.html" - }, - { - "duration": "4.677039381818182", - "name": "blink_perf.bindings/serialize-nested-array.html" - }, - { - "duration": "10.418247141414142", - "name": "blink_perf.bindings/set-attribute-rare.html" - }, - { - "duration": "10.441846237373738", - "name": "blink_perf.bindings/set-attribute.html" - }, - { - "duration": "16.636086989899", - "name": "blink_perf.bindings/structured-clone-json-deserialize.html" - }, - { - "duration": "19.868374999999993", - "name": "blink_perf.bindings/structured-clone-json-serialize.html" - }, - { - "duration": "7.604728265656568", - "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html" - }, - { - "duration": "7.652917726262627", - "name": "blink_perf.bindings/structured-clone-long-string-serialize.html" - }, - { - "duration": "11.006937772727271", - "name": "blink_perf.bindings/typed-array-construct-from-array.html" - }, - { - "duration": "10.509213696969693", - "name": "blink_perf.bindings/typed-array-construct-from-same-type.html" - }, - { - "duration": "10.426587333333336", - "name": "blink_perf.bindings/typed-array-construct-from-typed.html" - }, - { - "duration": "10.290047454545457", - "name": "blink_perf.bindings/typed-array-set-from-typed.html" - }, - { - "duration": "10.85639308080808", - "name": "blink_perf.bindings/undefined-first-child.html" - }, - { - "duration": "10.454334262626265", - "name": "blink_perf.bindings/undefined-get-element-by-id.html" - }, - { - "duration": "10.928417515151517", - "name": "blink_perf.bindings/undefined-id-getter.html" - }, - { - "duration": "14.261299287878785", - "name": "blink_perf.canvas/createImageBitmapFromImageData.html" - }, - { - "duration": "6.163865483838386", - "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "11.50101952020202", - "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "7.985047120202021", - "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html" - }, - { - "duration": "5.540703202020201", - "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "5.5437108626262654", - "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "6.375386761616162", - "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "11.201917313131316", - "name": "blink_perf.canvas/drawimage-not-pixelaligned.html" - }, - { - "duration": "10.790304272727276", - "name": "blink_perf.canvas/drawimage.html" - }, - { - "duration": "10.964088464646464", - "name": "blink_perf.canvas/getImageData.html" - }, - { - "duration": "11.512311712121218", - "name": "blink_perf.canvas/getImageDataColorManaged.html" - }, - { - "duration": "10.6518346969697", - "name": "blink_perf.canvas/putImageData.html" - }, - { - "duration": "9.449902575757578", - "name": "blink_perf.canvas/toBlob_duration.html" - }, - { - "duration": "7.626968607070708", - "name": "blink_perf.canvas/toBlob_duration_jpeg.html" - }, - { - "duration": "4.919188773737375", - "name": "blink_perf.canvas/transferFromImageBitmap.html" - }, - { - "duration": "7.665410551515155", - "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html" - }, - { - "duration": "11.812558378787879", - "name": "blink_perf.canvas/upload-video-to-sub-texture.html" - }, - { - "duration": "5.227142781818179", - "name": "blink_perf.canvas/upload-video-to-texture.html" - }, - { - "duration": "5.794870611111111", - "name": "blink_perf.canvas/upload-webgl-to-texture.html" - }, - { - "duration": "18.521025863636353", - "name": "blink_perf.css/AttributeDescendantSelector.html" - }, - { - "duration": "11.221627323232319", - "name": "blink_perf.css/CSSPropertySetterGetter.html" - }, - { - "duration": "11.396442313131308", - "name": "blink_perf.css/CSSPropertySetterGetterMethods.html" - }, - { - "duration": "10.91281670707071", - "name": "blink_perf.css/CSSPropertyUpdateValue.html" - }, - { - "duration": "8.941856525252529", - "name": "blink_perf.css/ChangeStyleChildClassSelector.html" - }, - { - "duration": "8.949699303030306", - "name": "blink_perf.css/ChangeStyleChildElementSelectors.html" - }, - { - "duration": "8.935473520202024", - "name": "blink_perf.css/ChangeStyleElementSelector.html" - }, - { - "duration": "8.974114702020204", - "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html" - }, - { - "duration": "9.015964196969696", - "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html" - }, - { - "duration": "8.985837772727272", - "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html" - }, - { - "duration": "9.00448770707071", - "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html" - }, - { - "duration": "8.92012490909091", - "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html" - }, - { - "duration": "8.954875803030305", - "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html" - }, - { - "duration": "8.964201434343432", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html" - }, - { - "duration": "9.059024328282831", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "12.217594186868688", - "name": "blink_perf.css/ChangeStyleShallowTree.html" - }, - { - "duration": "8.97889354040404", - "name": "blink_perf.css/ChangeStyleSingleClassSelector.html" - }, - { - "duration": "9.011338863636357", - "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html" - }, - { - "duration": "8.98512898989899", - "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html" - }, - { - "duration": "8.994865939393941", - "name": "blink_perf.css/ChangeStyleUniversalSelector.html" - }, - { - "duration": "9.002904818181822", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html" - }, - { - "duration": "9.058298247474747", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "14.897091777777783", - "name": "blink_perf.css/ClassDescendantSelector.html" - }, - { - "duration": "17.425745151515148", - "name": "blink_perf.css/ClassInvalidation.html" - }, - { - "duration": "14.821260959595966", - "name": "blink_perf.css/FocusUpdate.html" - }, - { - "duration": "9.408519186868688", - "name": "blink_perf.css/LoadBootstrapBlog.html" - }, - { - "duration": "9.493451419191919", - "name": "blink_perf.css/LoadMaterializeStarterPage.html" - }, - { - "duration": "10.104893717171716", - "name": "blink_perf.css/LoadSemanticPageExample.html" - }, - { - "duration": "11.404276474747473", - "name": "blink_perf.css/PseudoClassSelectors.html" - }, - { - "duration": "11.191480434343436", - "name": "blink_perf.css/SelectorCountScaling.html" - }, - { - "duration": "15.021564171717177", - "name": "blink_perf.dom/addRange.html" - }, - { - "duration": "5.192004298989899", - "name": "blink_perf.dom/delete-in-password-field.html" - }, - { - "duration": "12.986810651515146", - "name": "blink_perf.dom/div-editable.html" - }, - { - "duration": "4.725931592929295", - "name": "blink_perf.dom/inner_html_with_selection.html" - }, - { - "duration": "18.564719050505037", - "name": "blink_perf.dom/long-sibling-list.html" - }, - { - "duration": "7.644268638383838", - "name": "blink_perf.dom/modify-element-classname.html" - }, - { - "duration": "6.274162549494948", - "name": "blink_perf.dom/modify-element-id.html" - }, - { - "duration": "6.19380707070707", - "name": "blink_perf.dom/modify-element-title.html" - }, - { - "duration": "5.033993405050505", - "name": "blink_perf.dom/move-down-with-hidden-elements.html" - }, - { - "duration": "5.012133815151517", - "name": "blink_perf.dom/move-up-with-hidden-elements.html" - }, - { - "duration": "4.748340553535356", - "name": "blink_perf.dom/remove_child_with_selection.html" - }, - { - "duration": "11.165564272727275", - "name": "blink_perf.dom/select-multiple-add.html" - }, - { - "duration": "10.74407486363636", - "name": "blink_perf.dom/select-single-add.html" - }, - { - "duration": "10.823724530303025", - "name": "blink_perf.dom/select-single-remove.html" - }, - { - "duration": "10.757548297979797", - "name": "blink_perf.dom/textarea-dom.html" - }, - { - "duration": "9.943094131313135", - "name": "blink_perf.dom/textarea-edit.html" - }, - { - "duration": "24.11383234343434", - "name": "blink_perf.events/EventsDispatching.html" - }, - { - "duration": "11.818728691919198", - "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html" - }, - { - "duration": "25.892323040404037", - "name": "blink_perf.events/EventsDispatchingInShadowTrees.html" - }, - { - "duration": "23.09532269696969", - "name": "blink_perf.events/hit-test-lots-of-layers.html" - }, - { - "duration": "55.58050931818183", - "name": "blink_perf.image_decoder/decode-gif.html" - }, - { - "duration": "19.149345666666665", - "name": "blink_perf.image_decoder/decode-jpeg.html" - }, - { - "duration": "54.18863983333335", - "name": "blink_perf.image_decoder/decode-lossless-webp.html" - }, - { - "duration": "11.636440454545449", - "name": "blink_perf.image_decoder/decode-lossy-webp.html" - }, - { - "duration": "34.48308398484848", - "name": "blink_perf.image_decoder/decode-png-palette-opaque.html" - }, - { - "duration": "18.372660090909093", - "name": "blink_perf.image_decoder/decode-png-palette.html" - }, - { - "duration": "58.33097940909092", - "name": "blink_perf.image_decoder/decode-png.html" - }, - { - "duration": "19.64777596212121", - "name": "blink_perf.layout/ArabicLineLayout.html" - }, - { - "duration": "4.963213977272727", - "name": "blink_perf.layout/Shapes/MultipleShapes.html" - }, - { - "duration": "10.629994174242427", - "name": "blink_perf.layout/SimpleTextPathLineLayout.html" - }, - { - "duration": "10.580794931818179", - "name": "blink_perf.layout/add-remove-inline-floats.html" - }, - { - "duration": "10.86555746969697", - "name": "blink_perf.layout/attach-inlines-2.html" - }, - { - "duration": "10.70388356818182", - "name": "blink_perf.layout/attach-inlines.html" - }, - { - "duration": "11.384574628787883", - "name": "blink_perf.layout/auto-grid-lots-of-data.html" - }, - { - "duration": "9.985921151515152", - "name": "blink_perf.layout/chapter-reflow-once-random.html" - }, - { - "duration": "13.104293401515154", - "name": "blink_perf.layout/chapter-reflow-once.html" - }, - { - "duration": "10.895307537878786", - "name": "blink_perf.layout/chapter-reflow-thrice.html" - }, - { - "duration": "11.537742757575751", - "name": "blink_perf.layout/chapter-reflow-twice.html" - }, - { - "duration": "10.986350462121209", - "name": "blink_perf.layout/chapter-reflow.html" - }, - { - "duration": "6.242879622727272", - "name": "blink_perf.layout/character_fallback.html" - }, - { - "duration": "5.1468045818181825", - "name": "blink_perf.layout/character_fallback_aat.html" - }, - { - "duration": "11.507334712121212", - "name": "blink_perf.layout/fixed-grid-lots-of-data.html" - }, - { - "duration": "11.540611484848487", - "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html" - }, - { - "duration": "10.91110896969697", - "name": "blink_perf.layout/flexbox-column-nowrap.html" - }, - { - "duration": "10.928411007575756", - "name": "blink_perf.layout/flexbox-column-wrap.html" - }, - { - "duration": "11.296202196969697", - "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html" - }, - { - "duration": "10.989775083333337", - "name": "blink_perf.layout/flexbox-lots-of-data.html" - }, - { - "duration": "10.897983439393943", - "name": "blink_perf.layout/flexbox-row-nowrap.html" - }, - { - "duration": "10.888513310606058", - "name": "blink_perf.layout/flexbox-row-wrap.html" - }, - { - "duration": "10.582628280303027", - "name": "blink_perf.layout/flexbox-with-stretch-layout.html" - }, - { - "duration": "19.5401828939394", - "name": "blink_perf.layout/floats_100_100.html" - }, - { - "duration": "19.716073242424248", - "name": "blink_perf.layout/floats_100_100_nested.html" - }, - { - "duration": "12.971180174242427", - "name": "blink_perf.layout/floats_10_1000.html" - }, - { - "duration": "8.408518916666665", - "name": "blink_perf.layout/floats_20_100.html" - }, - { - "duration": "9.570559174242424", - "name": "blink_perf.layout/floats_20_100_nested.html" - }, - { - "duration": "6.523278657575755", - "name": "blink_perf.layout/floats_2_100.html" - }, - { - "duration": "6.705957857575757", - "name": "blink_perf.layout/floats_2_100_nested.html" - }, - { - "duration": "10.033174446969694", - "name": "blink_perf.layout/floats_50_100.html" - }, - { - "duration": "10.537865871212121", - "name": "blink_perf.layout/floats_50_100_nested.html" - }, - { - "duration": "10.527109765151517", - "name": "blink_perf.layout/hindi-line-layout.html" - }, - { - "duration": "16.95332476515152", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html" - }, - { - "duration": "15.619114992424244", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html" - }, - { - "duration": "15.528479863636365", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html" - }, - { - "duration": "4.95043504090909", - "name": "blink_perf.layout/latin-complex-text.html" - }, - { - "duration": "6.4742363939393925", - "name": "blink_perf.layout/layers_overlap_2d.html" - }, - { - "duration": "6.280976427272727", - "name": "blink_perf.layout/layers_overlap_3d.html" - }, - { - "duration": "16.543198378787878", - "name": "blink_perf.layout/line-layout-line-height.html" - }, - { - "duration": "10.257071500000004", - "name": "blink_perf.layout/line-layout-repeat-append.html" - }, - { - "duration": "10.273773606060605", - "name": "blink_perf.layout/line-layout.html" - }, - { - "duration": "5.165620595454546", - "name": "blink_perf.layout/long-line-nowrap-collapse.html" - }, - { - "duration": "5.157440471212122", - "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html" - }, - { - "duration": "8.964580810606058", - "name": "blink_perf.layout/long-line-nowrap.html" - }, - { - "duration": "11.047249181818179", - "name": "blink_perf.layout/multicol/deeply-nested-tables.html" - }, - { - "duration": "10.702090075757575", - "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html" - }, - { - "duration": "10.124141803030303", - "name": "blink_perf.layout/multicol/lots-of-text-autofill.html" - }, - { - "duration": "10.580219833333327", - "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html" - }, - { - "duration": "10.573649484848485", - "name": "blink_perf.layout/multicol/lots-of-text-balanced.html" - }, - { - "duration": "10.959451446969696", - "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html" - }, - { - "duration": "10.973848098484845", - "name": "blink_perf.layout/multicol/tall-content-short-columns.html" - }, - { - "duration": "10.867170484848486", - "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html" - }, - { - "duration": "11.053059439393936", - "name": "blink_perf.layout/nested-grid.html" - }, - { - "duration": "10.52026517424242", - "name": "blink_perf.layout/nested-percent-height-tables.html" - }, - { - "duration": "89.81718410606062", - "name": "blink_perf.layout/subtree-detaching.html" - }, - { - "duration": "6.711940390909089", - "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html" - }, - { - "duration": "8.342441642424241", - "name": "blink_perf.layout/word-break-break-all.html" - }, - { - "duration": "8.331014356060606", - "name": "blink_perf.layout/word-break-break-word.html" - }, - { - "duration": "8.352563537878785", - "name": "blink_perf.layout/word-wrap-break-word.html" - }, - { - "duration": "16.583152613636365", - "name": "blink_perf.owp_storage/blob-perf-files.html" - }, - { - "duration": "13.628787333333333", - "name": "blink_perf.owp_storage/blob-perf-ipc.html" - }, - { - "duration": "12.571781136363635", - "name": "blink_perf.owp_storage/blob-perf-shm.html" - }, - { - "duration": "13.711734340909091", - "name": "blink_perf.owp_storage/blob-perf-tiny.html" - }, - { - "duration": "13.842072219696966", - "name": "blink_perf.owp_storage/idb-load-docs.html" - }, - { - "duration": "18.452908878787873", - "name": "blink_perf.paint/appending-text.html" - }, - { - "duration": "20.14564872727273", - "name": "blink_perf.paint/color-changes.html" - }, - { - "duration": "17.033366530303027", - "name": "blink_perf.paint/complex-content-slow-scroll.html" - }, - { - "duration": "18.775548151515153", - "name": "blink_perf.paint/containment-resize.html" - }, - { - "duration": "17.199244500000002", - "name": "blink_perf.paint/fixed-and-many-layers-scroll.html" - }, - { - "duration": "20.08668865151515", - "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html" - }, - { - "duration": "16.149292757575758", - "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html" - }, - { - "duration": "21.706926530303026", - "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html" - }, - { - "duration": "16.502104393939394", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html" - }, - { - "duration": "19.82705331818182", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html" - }, - { - "duration": "14.36117256060606", - "name": "blink_perf.paint/large-table-collapsed-border-change.html" - }, - { - "duration": "19.598705924242427", - "name": "blink_perf.paint/large-table-repaint.html" - }, - { - "duration": "13.82645940151515", - "name": "blink_perf.paint/move-text-with-mask.html" - }, - { - "duration": "17.178388666666667", - "name": "blink_perf.paint/paint-offset-changes.html" - }, - { - "duration": "20.38152256060606", - "name": "blink_perf.paint/transform-changes.html" - }, - { - "duration": "16.07976775", - "name": "blink_perf.parser/css-parser-yui.html" - }, - { - "duration": "17.386472863636357", - "name": "blink_perf.parser/html-parser-threaded.html" - }, - { - "duration": "21.853963757575755", - "name": "blink_perf.parser/html-parser.html" - }, - { - "duration": "69.56353942424242", - "name": "blink_perf.parser/html5-full-render.html" - }, - { - "duration": "10.662754901515152", - "name": "blink_perf.parser/iframe-append-remove.html" - }, - { - "duration": "10.90224443181818", - "name": "blink_perf.parser/innerHTML-setter-siblings.html" - }, - { - "duration": "10.681960166666665", - "name": "blink_perf.parser/innerHTML-setter.html" - }, - { - "duration": "10.807314674242424", - "name": "blink_perf.parser/query-selector-all-attribute-complex.html" - }, - { - "duration": "10.831925674242424", - "name": "blink_perf.parser/query-selector-all-attribute.html" - }, - { - "duration": "11.105091795454543", - "name": "blink_perf.parser/query-selector-all-class-deep.html" - }, - { - "duration": "11.797537386363635", - "name": "blink_perf.parser/query-selector-all-class-first.html" - }, - { - "duration": "13.218019272727274", - "name": "blink_perf.parser/query-selector-all-class-last.html" - }, - { - "duration": "10.716051863636366", - "name": "blink_perf.parser/query-selector-all-class.html" - }, - { - "duration": "11.206347242424238", - "name": "blink_perf.parser/query-selector-all-deep.html" - }, - { - "duration": "11.634603977272725", - "name": "blink_perf.parser/query-selector-all-first.html" - }, - { - "duration": "12.293061818181819", - "name": "blink_perf.parser/query-selector-all-id-deep.html" - }, - { - "duration": "11.763428234848478", - "name": "blink_perf.parser/query-selector-all-id-first.html" - }, - { - "duration": "12.396185719696971", - "name": "blink_perf.parser/query-selector-all-id-last.html" - }, - { - "duration": "11.12444765909091", - "name": "blink_perf.parser/query-selector-all-last.html" - }, - { - "duration": "11.03489540909091", - "name": "blink_perf.parser/query-selector-deep.html" - }, - { - "duration": "11.344192545454547", - "name": "blink_perf.parser/query-selector-first.html" - }, - { - "duration": "10.857783719696972", - "name": "blink_perf.parser/query-selector-id-deep.html" - }, - { - "duration": "11.300387401515152", - "name": "blink_perf.parser/query-selector-id-last.html" - }, - { - "duration": "11.262282765151513", - "name": "blink_perf.parser/query-selector-last.html" - }, - { - "duration": "9.764694454545452", - "name": "blink_perf.parser/simple-url.html" - }, - { - "duration": "11.125969931818183", - "name": "blink_perf.parser/textarea-parsing.html" - }, - { - "duration": "9.993226863636364", - "name": "blink_perf.parser/tiny-innerHTML.html" - }, - { - "duration": "12.57480140151515", - "name": "blink_perf.parser/url-parser.html" - }, - { - "duration": "10.966182545454545", - "name": "blink_perf.parser/xml-parser.html" - }, - { - "duration": "11.11586863939394", - "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html" - }, - { - "duration": "5.6611273136363645", - "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html" - }, - { - "duration": "5.653598109090908", - "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html" - }, - { - "duration": "4.90269429848485", - "name": "blink_perf.shadow_dom/shadow-style-share.html" - }, - { - "duration": "5.130607460606059", - "name": "blink_perf.shadow_dom/style-sheet-insert.html" - }, - { - "duration": "5.361778798484848", - "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html" - }, - { - "duration": "6.855338153030303", - "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html" - }, - { - "duration": "10.22941062121212", - "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html" - }, - { - "duration": "12.30337158333333", - "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html" - }, - { - "duration": "5.288898934848485", - "name": "blink_perf.shadow_dom/v0-content-reprojection.html" - }, - { - "duration": "5.001495753030303", - "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html" - }, - { - "duration": "4.958998028787877", - "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html" - }, - { - "duration": "5.261190475757573", - "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html" - }, - { - "duration": "5.059986127272727", - "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html" - }, - { - "duration": "23.265520636363636", - "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html" - }, - { - "duration": "4.782141246969698", - "name": "blink_perf.shadow_dom/v1-distribution.html" - }, - { - "duration": "5.256581668181816", - "name": "blink_perf.shadow_dom/v1-host-child-append.html" - }, - { - "duration": "23.354278651515155", - "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html" - }, - { - "duration": "54.05395863636365", - "name": "blink_perf.shadow_dom/v1-large-deep-layout.html" - }, - { - "duration": "4.712703980303029", - "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html" - }, - { - "duration": "4.862228392424241", - "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html" - }, - { - "duration": "5.543714574242425", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html" - }, - { - "duration": "4.813201033333331", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "4.849370819696972", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html" - }, - { - "duration": "5.04153889393939", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html" - }, - { - "duration": "4.808243568181816", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "4.877508533333333", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html" - }, - { - "duration": "4.734194792424241", - "name": "blink_perf.shadow_dom/v1-slot-append.html" - }, - { - "duration": "6.771816106060607", - "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html" - }, - { - "duration": "6.786325333333333", - "name": "blink_perf.shadow_dom/v1-small-deep-layout.html" - }, - { - "duration": "4.745192875757579", - "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html" - }, - { - "duration": "4.73679453787879", - "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html" - }, - { - "duration": "10.15372015454545", - "name": "blink_perf.svg/AzLizardBenjiPark.html" - }, - { - "duration": "7.90432928030303", - "name": "blink_perf.svg/Bamboo.html" - }, - { - "duration": "5.4649278712121205", - "name": "blink_perf.svg/Cactus.html" - }, - { - "duration": "5.489333209090909", - "name": "blink_perf.svg/Cowboy.html" - }, - { - "duration": "6.030909733333334", - "name": "blink_perf.svg/Cowboy_transform.html" - }, - { - "duration": "5.087424456060604", - "name": "blink_perf.svg/CrawFishGanson.html" - }, - { - "duration": "5.210256219696969", - "name": "blink_perf.svg/Debian.html" - }, - { - "duration": "4.973094025757578", - "name": "blink_perf.svg/DropsOnABlade.html" - }, - { - "duration": "5.004054616666668", - "name": "blink_perf.svg/FlowerFromMyGarden.html" - }, - { - "duration": "5.298171553030302", - "name": "blink_perf.svg/FoodLeifLodahl.html" - }, - { - "duration": "5.208752695454547", - "name": "blink_perf.svg/France.html" - }, - { - "duration": "5.050560446969697", - "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html" - }, - { - "duration": "5.50171499242424", - "name": "blink_perf.svg/GearFlowers.html" - }, - { - "duration": "5.1581381318181805", - "name": "blink_perf.svg/HarveyRayner.html" - }, - { - "duration": "5.019907843939395", - "name": "blink_perf.svg/HereGear.html" - }, - { - "duration": "8.52206115151515", - "name": "blink_perf.svg/MtSaintHelens.html" - }, - { - "duration": "4.89660365757576", - "name": "blink_perf.svg/Samurai.html" - }, - { - "duration": "66.42898866666665", - "name": "blink_perf.svg/SierpinskiCarpet.html" - }, - { - "duration": "5.87822677878788", - "name": "blink_perf.svg/SvgCubics.html" - }, - { - "duration": "6.239055715151516", - "name": "blink_perf.svg/SvgHitTesting.html" - }, - { - "duration": "12.367562378787877", - "name": "blink_perf.svg/SvgNestedUse.html" - }, - { - "duration": "5.184255339393942", - "name": "blink_perf.svg/UnderTheSee.html" - }, - { - "duration": "6.130055104545458", - "name": "blink_perf.svg/WorldIso.html" - }, - { - "duration": "7.972588556060606", - "name": "blink_perf.svg/Worldcup.html" - }, - { - "duration": "39.69682522727274", - "name": "dromaeo/http://dromaeo.com?dom-attr" - }, - { - "duration": "35.98756934848485", - "name": "dromaeo/http://dromaeo.com?dom-modify" - }, - { - "duration": "50.600674757575746", - "name": "dromaeo/http://dromaeo.com?dom-query" - }, - { - "duration": "30.81567275757576", - "name": "dromaeo/http://dromaeo.com?dom-traverse" - }, - { - "duration": "17.253589454545455", - "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html" - }, - { - "duration": "9.67037065909091", - "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html" - }, - { - "duration": "9.073332128787877", - "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html" - }, - { - "duration": "278.7251378461538", - "name": "jetstream/http://browserbench.org/JetStream/" - }, - { - "duration": "56.53709648484848", - "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html" - }, - { - "duration": "107.52323303846157", - "name": "loading.mobile/58Pic" - }, - { - "duration": "100.05581913333332", - "name": "loading.mobile/58Pic_3g" - }, - { - "duration": "167.60022638461533", - "name": "loading.mobile/Amazon" - }, - { - "duration": "167.85247126666667", - "name": "loading.mobile/Amazon_3g" - }, - { - "duration": "163.1113446461538", - "name": "loading.mobile/BOLNoticias" - }, - { - "duration": "155.50695833333333", - "name": "loading.mobile/BOLNoticias_3g" - }, - { - "duration": "122.19372130769231", - "name": "loading.mobile/Baidu" - }, - { - "duration": "112.25818993333334", - "name": "loading.mobile/Baidu_3g" - }, - { - "duration": "213.45433889230767", - "name": "loading.mobile/Bradesco" - }, - { - "duration": "223.47369220000002", - "name": "loading.mobile/Bradesco_3g" - }, - { - "duration": "146.79930493846152", - "name": "loading.mobile/Dailymotion" - }, - { - "duration": "137.0027515333333", - "name": "loading.mobile/Dailymotion_3g" - }, - { - "duration": "177.88518243076928", - "name": "loading.mobile/Dawn" - }, - { - "duration": "165.98744533333334", - "name": "loading.mobile/Dawn_3g" - }, - { - "duration": "313.36554194999997", - "name": "loading.mobile/DevOpera" - }, - { - "duration": "30.505520733333324", - "name": "loading.mobile/DevOpera_cold" - }, - { - "duration": "100.40028113333334", - "name": "loading.mobile/DevOpera_cold_3g" - }, - { - "duration": "44.41601073333333", - "name": "loading.mobile/DevOpera_hot" - }, - { - "duration": "52.763043333333336", - "name": "loading.mobile/DevOpera_hot_3g" - }, - { - "duration": "37.16069986666666", - "name": "loading.mobile/DevOpera_warm" - }, - { - "duration": "44.68267719999999", - "name": "loading.mobile/DevOpera_warm_3g" - }, - { - "duration": "205.1364055538461", - "name": "loading.mobile/Dramaq" - }, - { - "duration": "209.21178546666667", - "name": "loading.mobile/Dramaq_3g" - }, - { - "duration": "116.40636109230768", - "name": "loading.mobile/EnquiryIndianRail" - }, - { - "duration": "107.71191486666666", - "name": "loading.mobile/EnquiryIndianRail_3g" - }, - { - "duration": "135.2013001384615", - "name": "loading.mobile/Facebook" - }, - { - "duration": "121.79421633333332", - "name": "loading.mobile/Facebook_3g" - }, - { - "duration": "396.71720212", - "name": "loading.mobile/FlipBoard" - }, - { - "duration": "32.7583266", - "name": "loading.mobile/FlipBoard_cold" - }, - { - "duration": "134.86177593333332", - "name": "loading.mobile/FlipBoard_cold_3g" - }, - { - "duration": "52.17803086666666", - "name": "loading.mobile/FlipBoard_hot" - }, - { - "duration": "65.38209073333333", - "name": "loading.mobile/FlipBoard_hot_3g" - }, - { - "duration": "41.94588233333332", - "name": "loading.mobile/FlipBoard_warm" - }, - { - "duration": "66.95657353333333", - "name": "loading.mobile/FlipBoard_warm_3g" - }, - { - "duration": "410.6971056800001", - "name": "loading.mobile/FlipKart" - }, - { - "duration": "39.56136826666666", - "name": "loading.mobile/FlipKart_cold" - }, - { - "duration": "129.94245399999997", - "name": "loading.mobile/FlipKart_cold_3g" - }, - { - "duration": "61.97186093333333", - "name": "loading.mobile/FlipKart_hot" - }, - { - "duration": "68.49379706666667", - "name": "loading.mobile/FlipKart_hot_3g" - }, - { - "duration": "49.4746306", - "name": "loading.mobile/FlipKart_warm" - }, - { - "duration": "56.40376766666666", - "name": "loading.mobile/FlipKart_warm_3g" - }, - { - "duration": "135.95217075384616", - "name": "loading.mobile/FranceTVInfo" - }, - { - "duration": "127.35940079999997", - "name": "loading.mobile/FranceTVInfo_3g" - }, - { - "duration": "172.8278667333333", - "name": "loading.mobile/G1_3g" - }, - { - "duration": "324.2226966", - "name": "loading.mobile/GSShop" - }, - { - "duration": "354.436104", - "name": "loading.mobile/GSShop_3g" - }, - { - "duration": "116.25108245384618", - "name": "loading.mobile/GoogleBrazil" - }, - { - "duration": "109.3250758", - "name": "loading.mobile/GoogleBrazil_3g" - }, - { - "duration": "111.73103581538464", - "name": "loading.mobile/GoogleIndia" - }, - { - "duration": "96.936955", - "name": "loading.mobile/GoogleIndia_3g" - }, - { - "duration": "106.83934045384613", - "name": "loading.mobile/GoogleIndonesia" - }, - { - "duration": "97.90354180000001", - "name": "loading.mobile/GoogleIndonesia_3g" - }, - { - "duration": "142.3462195076923", - "name": "loading.mobile/GoogleRedirectToGoogleJapan" - }, - { - "duration": "138.24982219999998", - "name": "loading.mobile/GoogleRedirectToGoogleJapan_3g" - }, - { - "duration": "165.1557994153846", - "name": "loading.mobile/Hongkiat" - }, - { - "duration": "167.02218606666665", - "name": "loading.mobile/Hongkiat_3g" - }, - { - "duration": "187.4672539230769", - "name": "loading.mobile/KapanLagi" - }, - { - "duration": "184.01562186666663", - "name": "loading.mobile/KapanLagi_3g" - }, - { - "duration": "234.05339158461538", - "name": "loading.mobile/Kaskus" - }, - { - "duration": "226.97062653333333", - "name": "loading.mobile/Kaskus_3g" - }, - { - "duration": "165.51583686153845", - "name": "loading.mobile/LocalMoxie" - }, - { - "duration": "167.51700340000005", - "name": "loading.mobile/LocalMoxie_3g" - }, - { - "duration": "91.88295398461538", - "name": "loading.mobile/Locanto" - }, - { - "duration": "80.34943026666669", - "name": "loading.mobile/Locanto_3g" - }, - { - "duration": "176.03035696923075", - "name": "loading.mobile/OLX" - }, - { - "duration": "175.40800073333332", - "name": "loading.mobile/OLX_3g" - }, - { - "duration": "120.53497514062502", - "name": "loading.mobile/QQNews" - }, - { - "duration": "111.25076513333333", - "name": "loading.mobile/QQNews_3g" - }, - { - "duration": "164.9188812769232", - "name": "loading.mobile/SlideShare" - }, - { - "duration": "166.61505866666664", - "name": "loading.mobile/SlideShare_3g" - }, - { - "duration": "259.37265744000007", - "name": "loading.mobile/Suumo" - }, - { - "duration": "28.880256933333335", - "name": "loading.mobile/Suumo_cold" - }, - { - "duration": "56.68194999999999", - "name": "loading.mobile/Suumo_cold_3g" - }, - { - "duration": "39.46534646666667", - "name": "loading.mobile/Suumo_hot" - }, - { - "duration": "51.51235079999999", - "name": "loading.mobile/Suumo_hot_3g" - }, - { - "duration": "34.15940153333333", - "name": "loading.mobile/Suumo_warm" - }, - { - "duration": "45.89467766666667", - "name": "loading.mobile/Suumo_warm_3g" - }, - { - "duration": "228.9731369846154", - "name": "loading.mobile/Thairath" - }, - { - "duration": "242.46081586666665", - "name": "loading.mobile/Thairath_3g" - }, - { - "duration": "206.2408761230769", - "name": "loading.mobile/TheStar" - }, - { - "duration": "197.96474146666665", - "name": "loading.mobile/TheStar_3g" - }, - { - "duration": "181.3499239846154", - "name": "loading.mobile/TribunNews" - }, - { - "duration": "171.7631786666667", - "name": "loading.mobile/TribunNews_3g" - }, - { - "duration": "134.26954559230768", - "name": "loading.mobile/Twitter" - }, - { - "duration": "127.48345793333334", - "name": "loading.mobile/Twitter_3g" - }, - { - "duration": "325.2927588299999", - "name": "loading.mobile/VoiceMemos" - }, - { - "duration": "30.396680333333332", - "name": "loading.mobile/VoiceMemos_cold" - }, - { - "duration": "105.01340840000003", - "name": "loading.mobile/VoiceMemos_cold_3g" - }, - { - "duration": "44.113669066666674", - "name": "loading.mobile/VoiceMemos_hot" - }, - { - "duration": "55.35937126666668", - "name": "loading.mobile/VoiceMemos_hot_3g" - }, - { - "duration": "36.93952906666666", - "name": "loading.mobile/VoiceMemos_warm" - }, - { - "duration": "47.824252200000004", - "name": "loading.mobile/VoiceMemos_warm_3g" - }, - { - "duration": "124.7222270923077", - "name": "loading.mobile/Wikipedia" - }, - { - "duration": "120.58657446666666", - "name": "loading.mobile/Wikipedia_3g" - }, - { - "duration": "160.604162765625", - "name": "loading.mobile/YahooNews" - }, - { - "duration": "148.68260180000001", - "name": "loading.mobile/YahooNews_3g" - }, - { - "duration": "135.5393666153846", - "name": "loading.mobile/Youtube" - }, - { - "duration": "132.32437006666666", - "name": "loading.mobile/Youtube_3g" - }, - { - "duration": "21.24939717171718", - "name": "media.mobile/mse.html?media=aac_audio.mp4" - }, - { - "duration": "26.03683221212121", - "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4" - }, - { - "duration": "26.213318828282823", - "name": "media.mobile/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true" - }, - { - "duration": "25.25627998989899", - "name": "media.mobile/mse.html?media=h264_video.mp4" - }, - { - "duration": "34.82783053535353", - "name": "media.mobile/video.html?src=crowd.ogg&type=audio" - }, - { - "duration": "32.279935878787875", - "name": "media.mobile/video.html?src=crowd1080_vp9.webm" - }, - { - "duration": "19.281950464646467", - "name": "media.mobile/video.html?src=crowd1080_vp9.webm&seek" - }, - { - "duration": "31.10666787878789", - "name": "media.mobile/video.html?src=crowd720_vp9.webm" - }, - { - "duration": "33.848842010101016", - "name": "media.mobile/video.html?src=tulip2.m4a&type=audio" - }, - { - "duration": "33.78299957575758", - "name": "media.mobile/video.html?src=tulip2.mp3&type=audio" - }, - { - "duration": "14.087182712121217", - "name": "media.mobile/video.html?src=tulip2.mp3&type=audio&seek" - }, - { - "duration": "43.87389878787881", - "name": "media.mobile/video.html?src=tulip2.mp4" - }, - { - "duration": "43.81735842424245", - "name": "media.mobile/video.html?src=tulip2.mp4&busyjs" - }, - { - "duration": "16.790740762626264", - "name": "media.mobile/video.html?src=tulip2.mp4&seek" - }, - { - "duration": "34.09435347474748", - "name": "media.mobile/video.html?src=tulip2.ogg&type=audio" - }, - { - "duration": "14.2713458989899", - "name": "media.mobile/video.html?src=tulip2.ogg&type=audio&seek" - }, - { - "duration": "44.32619838383837", - "name": "media.mobile/video.html?src=tulip2.vp9.webm" - }, - { - "duration": "27.980532454545454", - "name": "media.mobile/video.html?src=tulip2.vp9.webm&background" - }, - { - "duration": "18.740082393939396", - "name": "media.mobile/video.html?src=tulip2.vp9.webm&seek" - }, - { - "duration": "69.04647203030301", - "name": "media.mobile/video.html?src=tulip2.vp9.webm_Regular-3G" - }, - { - "duration": "35.64098121212122", - "name": "media.mobile/video.html?src=tulip2.wav&type=audio" - }, - { - "duration": "15.105394449494952", - "name": "media.mobile/video.html?src=tulip2.wav&type=audio&seek" - }, - { - "duration": "313.13759565656574", - "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "263.0782863636363", - "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "95.39291023232323", - "name": "memory.top_10_mobile/after_http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "92.56024308080808", - "name": "memory.top_10_mobile/after_http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "94.59132239393936", - "name": "memory.top_10_mobile/after_http_m_youtube_com_results_q_science" - }, - { - "duration": "94.0484232121212", - "name": "memory.top_10_mobile/after_http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "94.66216905050506", - "name": "memory.top_10_mobile/after_http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "93.96992194949492", - "name": "memory.top_10_mobile/after_http_www_baidu_com_s_word_google" - }, - { - "duration": "93.44764560606058", - "name": "memory.top_10_mobile/after_http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "94.74681208080806", - "name": "memory.top_10_mobile/after_https_m_facebook_com_rihanna" - }, - { - "duration": "93.63647751487876", - "name": "memory.top_10_mobile/after_https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "95.51037868686869", - "name": "memory.top_10_mobile/after_https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "106.27090719191922", - "name": "memory.top_10_mobile/http_en_m_wikipedia_org_wiki_Science" - }, - { - "duration": "103.0880054545455", - "name": "memory.top_10_mobile/http_m_intl_taobao_com_group_purchase_html" - }, - { - "duration": "105.25786681818181", - "name": "memory.top_10_mobile/http_m_youtube_com_results_q_science" - }, - { - "duration": "103.25233905050504", - "name": "memory.top_10_mobile/http_search_yahoo_com_search__ylt_p_google" - }, - { - "duration": "103.99477319191917", - "name": "memory.top_10_mobile/http_www_amazon_com_gp_aw_s_k_nexus" - }, - { - "duration": "105.59880055555556", - "name": "memory.top_10_mobile/http_www_baidu_com_s_word_google" - }, - { - "duration": "103.90586176767677", - "name": "memory.top_10_mobile/http_yandex_ru_touchsearch_text_science" - }, - { - "duration": "104.51037772727273", - "name": "memory.top_10_mobile/https_m_facebook_com_rihanna" - }, - { - "duration": "103.8921435555555", - "name": "memory.top_10_mobile/https_mobile_twitter_com_justinbieber_skip_interstitial_true" - }, - { - "duration": "110.4933926161616", - "name": "memory.top_10_mobile/https_www_google_co_uk_hl_en_q_science" - }, - { - "duration": "57.676217898989904", - "name": "octane/http://chromium.github.io/octane/index.html?auto=1" - }, - { - "duration": "17.790955383333333", - "name": "oortonline_tbmv2/http://oortonline.gl/#run" - }, - { - "duration": "62.6399386", - "name": "power.typical_10_mobile/http://de.m.wikipedia.org/wiki/K%C3%B6lner_Dom" - }, - { - "duration": "64.39047839999999", - "name": "power.typical_10_mobile/http://m.chiebukuro.yahoo.co.jp/detail/q10136829180" - }, - { - "duration": "57.245820466666686", - "name": "power.typical_10_mobile/http://m.ebay.com/itm/351157205404" - }, - { - "duration": "65.23663941666668", - "name": "power.typical_10_mobile/http://m.facebook.com/barackobama" - }, - { - "duration": "62.4100658", - "name": "power.typical_10_mobile/http://m.huffpost.com/us/entry/6004486" - }, - { - "duration": "62.212606083333334", - "name": "power.typical_10_mobile/http://m.ynet.co.il" - }, - { - "duration": "62.68811421666666", - "name": "power.typical_10_mobile/http://siriuslymeg.tumblr.com/" - }, - { - "duration": "57.50153171666667", - "name": "power.typical_10_mobile/http://wapbaike.baidu.com/" - }, - { - "duration": "58.97407369999999", - "name": "power.typical_10_mobile/http://www.cnn.com/2014/03/31/showbiz/tv/himym-finale/index.html" - }, - { - "duration": "63.66980021666666", - "name": "power.typical_10_mobile/http://www.rg.ru/2014/10/21/cska-site.html" - }, - { - "duration": "62.37853528333333", - "name": "power.typical_10_mobile/https://en.wikipedia.org/wiki/File:Rotating_earth_(large).gif" - }, - { - "duration": "13.255696093220335", - "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html" - }, - { - "duration": "19.50659640000001", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html" - }, - { - "duration": "11.106294258333337", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html" - }, - { - "duration": "14.895659566666668", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html" - }, - { - "duration": "14.157721599999995", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html" - }, - { - "duration": "9.645622133333337", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html" - }, - { - "duration": "24.03670534999999", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html" - }, - { - "duration": "12.601975141666667", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html" - }, - { - "duration": "21.210229733333325", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html" - }, - { - "duration": "17.8354892", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html" - }, - { - "duration": "15.042138266666672", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html" - }, - { - "duration": "19.209764999999997", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html" - }, - { - "duration": "16.098406208333333", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html" - }, - { - "duration": "21.713479950000004", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html" - }, - { - "duration": "11.98567595833333", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html" - }, - { - "duration": "9.01860170833333", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html" - }, - { - "duration": "29.298682099999997", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html" - }, - { - "duration": "20.98417083333333", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html" - }, - { - "duration": "14.852985850000001", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html" - }, - { - "duration": "11.922956708333329", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html" - }, - { - "duration": "11.525540524999998", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html" - }, - { - "duration": "28.58345276666667", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html" - }, - { - "duration": "112.9260113833333", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html" - }, - { - "duration": "85.72044521666668", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html" - }, - { - "duration": "29.213187016666655", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html" - }, - { - "duration": "29.341133315789467", - "name": "rendering.mobile/amazon_pinch" - }, - { - "duration": "26.054161105263162", - "name": "rendering.mobile/amazon_pinch_desktop_gpu_raster" - }, - { - "duration": "25.99429996491227", - "name": "rendering.mobile/analog_clock_svg" - }, - { - "duration": "29.347947263157884", - "name": "rendering.mobile/androidpolice_mobile" - }, - { - "duration": "26.784817175438604", - "name": "rendering.mobile/androidpolice_mobile_sync_scroll" - }, - { - "duration": "5.789607577083334", - "name": "rendering.mobile/animometer_webgl" - }, - { - "duration": "5.263783063265305", - "name": "rendering.mobile/aquarium" - }, - { - "duration": "38.12127053061224", - "name": "rendering.mobile/background_color_animation" - }, - { - "duration": "27.543808551020412", - "name": "rendering.mobile/background_color_animation_with_gradient" - }, - { - "duration": "19.11436661538461", - "name": "rendering.mobile/baidu_mobile" - }, - { - "duration": "17.533078961538468", - "name": "rendering.mobile/baidu_mobile_sync_scroll" - }, - { - "duration": "26.33392405769231", - "name": "rendering.mobile/balls_css_key_frame_animations" - }, - { - "duration": "29.511901923076927", - "name": "rendering.mobile/balls_css_transition_2_properties" - }, - { - "duration": "29.662963538461536", - "name": "rendering.mobile/balls_css_transition_40_properties" - }, - { - "duration": "29.595483499999997", - "name": "rendering.mobile/balls_css_transition_all_properties" - }, - { - "duration": "29.36249467307693", - "name": "rendering.mobile/balls_javascript_canvas" - }, - { - "duration": "29.094791038461537", - "name": "rendering.mobile/balls_javascript_css" - }, - { - "duration": "35.82739665384614", - "name": "rendering.mobile/balls_svg_animations" - }, - { - "duration": "36.06161625", - "name": "rendering.mobile/basic_stream" - }, - { - "duration": "22.92474157692307", - "name": "rendering.mobile/bing_mobile" - }, - { - "duration": "19.364980663461544", - "name": "rendering.mobile/bing_mobile_sync_scroll" - }, - { - "duration": "9.050939483673469", - "name": "rendering.mobile/blob" - }, - { - "duration": "38.10789823076924", - "name": "rendering.mobile/blogspot" - }, - { - "duration": "36.52867684615384", - "name": "rendering.mobile/blogspot_desktop_gpu_raster" - }, - { - "duration": "18.339349346153845", - "name": "rendering.mobile/blogspot_mobile" - }, - { - "duration": "16.875009788461533", - "name": "rendering.mobile/blogspot_mobile_sync_scroll" - }, - { - "duration": "39.9163040576923", - "name": "rendering.mobile/boingboing_mobile" - }, - { - "duration": "27.020806153846145", - "name": "rendering.mobile/booking.com" - }, - { - "duration": "25.03820176923076", - "name": "rendering.mobile/booking.com_desktop_gpu_raster" - }, - { - "duration": "18.99673567307693", - "name": "rendering.mobile/booking.com_mobile" - }, - { - "duration": "20.16257765384615", - "name": "rendering.mobile/booking.com_mobile_sync_scroll" - }, - { - "duration": "32.48449505263157", - "name": "rendering.mobile/booking_pinch" - }, - { - "duration": "29.438815052631586", - "name": "rendering.mobile/booking_pinch_desktop_gpu_raster" - }, - { - "duration": "21.655240461538476", - "name": "rendering.mobile/bouncing_balls_15" - }, - { - "duration": "20.108891999999994", - "name": "rendering.mobile/bouncing_balls_shadow" - }, - { - "duration": "20.029719096153844", - "name": "rendering.mobile/bouncing_clipped_rectangles" - }, - { - "duration": "21.08235580769231", - "name": "rendering.mobile/bouncing_gradient_circles" - }, - { - "duration": "17.23781751923077", - "name": "rendering.mobile/bouncing_png_images" - }, - { - "duration": "28.91448932692308", - "name": "rendering.mobile/bouncing_svg_images" - }, - { - "duration": "27.072729212765957", - "name": "rendering.mobile/canvas_05000_pixels_per_second" - }, - { - "duration": "27.006038404255314", - "name": "rendering.mobile/canvas_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.397579787234037", - "name": "rendering.mobile/canvas_10000_pixels_per_second" - }, - { - "duration": "26.821318085106377", - "name": "rendering.mobile/canvas_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.60649959574468", - "name": "rendering.mobile/canvas_15000_pixels_per_second" - }, - { - "duration": "27.081017680851065", - "name": "rendering.mobile/canvas_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.917157702127653", - "name": "rendering.mobile/canvas_20000_pixels_per_second" - }, - { - "duration": "27.19769036170213", - "name": "rendering.mobile/canvas_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.000487382978733", - "name": "rendering.mobile/canvas_30000_pixels_per_second" - }, - { - "duration": "27.39826714893617", - "name": "rendering.mobile/canvas_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "26.040289723404253", - "name": "rendering.mobile/canvas_40000_pixels_per_second" - }, - { - "duration": "25.127854063829787", - "name": "rendering.mobile/canvas_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "23.769509148936173", - "name": "rendering.mobile/canvas_50000_pixels_per_second" - }, - { - "duration": "23.037095063829785", - "name": "rendering.mobile/canvas_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "22.36634774468086", - "name": "rendering.mobile/canvas_60000_pixels_per_second" - }, - { - "duration": "21.282437765957447", - "name": "rendering.mobile/canvas_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "21.102009574468084", - "name": "rendering.mobile/canvas_75000_pixels_per_second" - }, - { - "duration": "19.991859702127655", - "name": "rendering.mobile/canvas_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "19.59968059574468", - "name": "rendering.mobile/canvas_90000_pixels_per_second" - }, - { - "duration": "18.724215148936167", - "name": "rendering.mobile/canvas_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "22.665043211538457", - "name": "rendering.mobile/canvas_animation_no_clear" - }, - { - "duration": "20.004008923076924", - "name": "rendering.mobile/canvas_arcs" - }, - { - "duration": "19.293225596153846", - "name": "rendering.mobile/canvas_font_cycler" - }, - { - "duration": "19.717842923076926", - "name": "rendering.mobile/canvas_lines" - }, - { - "duration": "21.068836134615385", - "name": "rendering.mobile/canvas_to_blob" - }, - { - "duration": "28.634411230769235", - "name": "rendering.mobile/capitolvolkswagen_mobile" - }, - { - "duration": "27.89577171153847", - "name": "rendering.mobile/capitolvolkswagen_mobile_sync_scroll" - }, - { - "duration": "22.20602420454546", - "name": "rendering.mobile/card_expansion" - }, - { - "duration": "24.270744568181826", - "name": "rendering.mobile/card_expansion_animated" - }, - { - "duration": "23.783354977272733", - "name": "rendering.mobile/card_expansion_images_text" - }, - { - "duration": "21.67107145454546", - "name": "rendering.mobile/card_flying" - }, - { - "duration": "14.112007053191492", - "name": "rendering.mobile/cats_unscaled" - }, - { - "duration": "13.057023691489356", - "name": "rendering.mobile/cats_viewport_width" - }, - { - "duration": "24.80217840384616", - "name": "rendering.mobile/chip_tune" - }, - { - "duration": "45.16864417307693", - "name": "rendering.mobile/cnn_article_mobile" - }, - { - "duration": "44.43502398076925", - "name": "rendering.mobile/cnn_article_mobile_sync_scroll" - }, - { - "duration": "21.052123038461538", - "name": "rendering.mobile/cnn_mobile" - }, - { - "duration": "21.35466438461539", - "name": "rendering.mobile/cnn_mobile_sync_scroll" - }, - { - "duration": "39.44312235555555", - "name": "rendering.mobile/cnn_pathological" - }, - { - "duration": "38.93837584210526", - "name": "rendering.mobile/cnn_pinch" - }, - { - "duration": "37.80607400000001", - "name": "rendering.mobile/cnn_pinch_desktop_gpu_raster" - }, - { - "duration": "29.57825884615384", - "name": "rendering.mobile/compositor_heavy_animation" - }, - { - "duration": "22.743929886363638", - "name": "rendering.mobile/coordinated_animation" - }, - { - "duration": "26.348093365384617", - "name": "rendering.mobile/crafty_mind" - }, - { - "duration": "28.8859227254902", - "name": "rendering.mobile/css_animations_many_keyframes" - }, - { - "duration": "27.852970647058818", - "name": "rendering.mobile/css_animations_simultaneous_inline_style" - }, - { - "duration": "28.577126196078428", - "name": "rendering.mobile/css_animations_simultaneous_new_element" - }, - { - "duration": "27.70570245098039", - "name": "rendering.mobile/css_animations_simultaneous_style_element" - }, - { - "duration": "34.880054", - "name": "rendering.mobile/css_animations_simultaneous_updating_class" - }, - { - "duration": "26.37174911764706", - "name": "rendering.mobile/css_animations_staggered_infinite_iterations" - }, - { - "duration": "30.593213352941184", - "name": "rendering.mobile/css_animations_staggered_inline_style" - }, - { - "duration": "31.59856996078432", - "name": "rendering.mobile/css_animations_staggered_new_element" - }, - { - "duration": "62.4097879215686", - "name": "rendering.mobile/css_animations_staggered_style_element" - }, - { - "duration": "48.35077492156863", - "name": "rendering.mobile/css_animations_staggered_updating_class" - }, - { - "duration": "58.57746405882355", - "name": "rendering.mobile/css_animations_triggered_inline_style" - }, - { - "duration": "49.00698280392157", - "name": "rendering.mobile/css_animations_triggered_new_element" - }, - { - "duration": "89.23013015686276", - "name": "rendering.mobile/css_animations_triggered_style_element" - }, - { - "duration": "62.35913450980394", - "name": "rendering.mobile/css_animations_triggered_updating_class" - }, - { - "duration": "56.83898917647059", - "name": "rendering.mobile/css_transitions_inline_style" - }, - { - "duration": "46.702051647058816", - "name": "rendering.mobile/css_transitions_new_element" - }, - { - "duration": "39.39574711764706", - "name": "rendering.mobile/css_transitions_staggered_inline_style" - }, - { - "duration": "28.938629745098048", - "name": "rendering.mobile/css_transitions_staggered_new_element" - }, - { - "duration": "39.834643431372555", - "name": "rendering.mobile/css_transitions_staggered_style_element" - }, - { - "duration": "46.25937050980392", - "name": "rendering.mobile/css_transitions_staggered_updating_class" - }, - { - "duration": "39.04988656862745", - "name": "rendering.mobile/css_transitions_style_element" - }, - { - "duration": "29.638031901960787", - "name": "rendering.mobile/css_transitions_triggered_inline_style" - }, - { - "duration": "32.94149964705881", - "name": "rendering.mobile/css_transitions_triggered_new_element" - }, - { - "duration": "50.93289684313722", - "name": "rendering.mobile/css_transitions_triggered_style_element" - }, - { - "duration": "86.36406637254902", - "name": "rendering.mobile/css_transitions_triggered_updating_class" - }, - { - "duration": "74.41728568627452", - "name": "rendering.mobile/css_transitions_updating_class" - }, - { - "duration": "65.3003653137255", - "name": "rendering.mobile/css_value_type_color" - }, - { - "duration": "95.2882173137255", - "name": "rendering.mobile/css_value_type_filter" - }, - { - "duration": "42.54464109803922", - "name": "rendering.mobile/css_value_type_length" - }, - { - "duration": "312.9624935882353", - "name": "rendering.mobile/css_value_type_length_complex" - }, - { - "duration": "29.799692980392155", - "name": "rendering.mobile/css_value_type_length_simple" - }, - { - "duration": "41.55756037254903", - "name": "rendering.mobile/css_value_type_path" - }, - { - "duration": "56.018719411764714", - "name": "rendering.mobile/css_value_type_shadow" - }, - { - "duration": "49.159544627450984", - "name": "rendering.mobile/css_value_type_transform_complex" - }, - { - "duration": "91.97470168627453", - "name": "rendering.mobile/css_value_type_transform_simple" - }, - { - "duration": "103.99900092156862", - "name": "rendering.mobile/cuteoverload_mobile" - }, - { - "duration": "69.52930352941175", - "name": "rendering.mobile/deviantart_mobile" - }, - { - "duration": "34.253059529411765", - "name": "rendering.mobile/deviantart_mobile_sync_scroll" - }, - { - "duration": "5.727505841666669", - "name": "rendering.mobile/dynamic_cube_map" - }, - { - "duration": "5.756727175000001", - "name": "rendering.mobile/earth" - }, - { - "duration": "19.097833647058824", - "name": "rendering.mobile/ebay" - }, - { - "duration": "17.46403050980392", - "name": "rendering.mobile/ebay_desktop_gpu_raster" - }, - { - "duration": "24.7893034117647", - "name": "rendering.mobile/ebay_mobile" - }, - { - "duration": "23.730393901960788", - "name": "rendering.mobile/ebay_mobile_sync_scroll" - }, - { - "duration": "32.782306421052624", - "name": "rendering.mobile/ebay_pinch" - }, - { - "duration": "31.169536789473682", - "name": "rendering.mobile/ebay_pinch_desktop_gpu_raster" - }, - { - "duration": "39.7939034", - "name": "rendering.mobile/ebay_scroll" - }, - { - "duration": "25.995283450980388", - "name": "rendering.mobile/effect_games" - }, - { - "duration": "16.48990105882353", - "name": "rendering.mobile/espn" - }, - { - "duration": "14.723379882352944", - "name": "rendering.mobile/espn_desktop_gpu_raster" - }, - { - "duration": "31.37457115909092", - "name": "rendering.mobile/espn_pathological" - }, - { - "duration": "37.27421952631579", - "name": "rendering.mobile/espn_pinch" - }, - { - "duration": "36.618955578947364", - "name": "rendering.mobile/espn_pinch_desktop_gpu_raster" - }, - { - "duration": "26.20366414583334", - "name": "rendering.mobile/extra_large_texture_uploads" - }, - { - "duration": "28.336947372549016", - "name": "rendering.mobile/facebook" - }, - { - "duration": "28.340273764705884", - "name": "rendering.mobile/facebook_desktop_gpu_raster" - }, - { - "duration": "23.06542843137255", - "name": "rendering.mobile/facebook_mobile" - }, - { - "duration": "23.437752019607842", - "name": "rendering.mobile/facebook_mobile_sync_scroll" - }, - { - "duration": "29.869838368421053", - "name": "rendering.mobile/facebook_pinch" - }, - { - "duration": "26.997607421052642", - "name": "rendering.mobile/facebook_pinch_desktop_gpu_raster" - }, - { - "duration": "20.636915647058824", - "name": "rendering.mobile/fill_shapes" - }, - { - "duration": "26.264729235294116", - "name": "rendering.mobile/filter_terrain_svg" - }, - { - "duration": "36.097841", - "name": "rendering.mobile/flickr_scroll" - }, - { - "duration": "22.28931472727273", - "name": "rendering.mobile/font_wipe" - }, - { - "duration": "20.006805529411757", - "name": "rendering.mobile/geo_apis" - }, - { - "duration": "35.30246139215687", - "name": "rendering.mobile/gmail" - }, - { - "duration": "35.01093390196079", - "name": "rendering.mobile/gmail_desktop_gpu_raster" - }, - { - "duration": "39.7940074736842", - "name": "rendering.mobile/gmail_pinch" - }, - { - "duration": "36.09664731578946", - "name": "rendering.mobile/gmail_pinch_desktop_gpu_raster" - }, - { - "duration": "28.382879215686273", - "name": "rendering.mobile/google_calendar" - }, - { - "duration": "27.911785274509803", - "name": "rendering.mobile/google_calendar_desktop_gpu_raster" - }, - { - "duration": "33.246936842105264", - "name": "rendering.mobile/google_calendar_pinch" - }, - { - "duration": "30.351618315789473", - "name": "rendering.mobile/google_calendar_pinch_desktop_gpu_raster" - }, - { - "duration": "49.629602019607844", - "name": "rendering.mobile/google_docs" - }, - { - "duration": "50.03094049019606", - "name": "rendering.mobile/google_docs_desktop_gpu_raster" - }, - { - "duration": "33.84461336842106", - "name": "rendering.mobile/google_image_pinch" - }, - { - "duration": "30.827028157894734", - "name": "rendering.mobile/google_image_pinch_desktop_gpu_raster" - }, - { - "duration": "36.53977588235295", - "name": "rendering.mobile/google_image_search" - }, - { - "duration": "35.945629705882354", - "name": "rendering.mobile/google_image_search_desktop_gpu_raster" - }, - { - "duration": "26.36629375", - "name": "rendering.mobile/google_news_ios" - }, - { - "duration": "32.51577392156864", - "name": "rendering.mobile/google_news_mobile" - }, - { - "duration": "31.875256058823524", - "name": "rendering.mobile/google_news_mobile_sync_scroll" - }, - { - "duration": "42.13466994117646", - "name": "rendering.mobile/google_plus" - }, - { - "duration": "42.25526937254901", - "name": "rendering.mobile/google_plus_desktop_gpu_raster" - }, - { - "duration": "27.080830686274503", - "name": "rendering.mobile/google_plus_mobile" - }, - { - "duration": "26.284100647058825", - "name": "rendering.mobile/google_plus_mobile_sync_scroll" - }, - { - "duration": "28.81550836842105", - "name": "rendering.mobile/google_search_pinch" - }, - { - "duration": "26.24149342105264", - "name": "rendering.mobile/google_search_pinch_desktop_gpu_raster" - }, - { - "duration": "19.073119392156865", - "name": "rendering.mobile/google_web_search" - }, - { - "duration": "17.341037480392156", - "name": "rendering.mobile/google_web_search_desktop_gpu_raster" - }, - { - "duration": "19.949745431372552", - "name": "rendering.mobile/google_web_search_mobile" - }, - { - "duration": "18.878674196078432", - "name": "rendering.mobile/google_web_search_mobile_sync_scroll" - }, - { - "duration": "22.140670901960792", - "name": "rendering.mobile/gsp.ro_mobile" - }, - { - "duration": "20.770584627450976", - "name": "rendering.mobile/gsp.ro_mobile_sync_scroll" - }, - { - "duration": "25.15886615909091", - "name": "rendering.mobile/guardian_pathological" - }, - { - "duration": "33.64647917647059", - "name": "rendering.mobile/guimark_vector_chart" - }, - { - "duration": "22.404259", - "name": "rendering.mobile/gws_boogie_expansion" - }, - { - "duration": "22.82478286363636", - "name": "rendering.mobile/gws_google_expansion" - }, - { - "duration": "23.573140039215684", - "name": "rendering.mobile/hakim" - }, - { - "duration": "23.67961047727272", - "name": "rendering.mobile/horizontal_vertical_expansion" - }, - { - "duration": "40.20451971153846", - "name": "rendering.mobile/ie_chalkboard" - }, - { - "duration": "37.40646729411764", - "name": "rendering.mobile/ie_pirate_mark" - }, - { - "duration": "34.56065447727272", - "name": "rendering.mobile/infinite_scrolling" - }, - { - "duration": "25.087927882352936", - "name": "rendering.mobile/jarro_doverson" - }, - { - "duration": "25.72107784313726", - "name": "rendering.mobile/kevs_3d" - }, - { - "duration": "27.672757176470583", - "name": "rendering.mobile/keyframed_animations" - }, - { - "duration": "27.27932883333334", - "name": "rendering.mobile/large_texture_uploads" - }, - { - "duration": "38.64680811363636", - "name": "rendering.mobile/latimes_pathological" - }, - { - "duration": "21.519666823529416", - "name": "rendering.mobile/linkedin" - }, - { - "duration": "19.588728901960785", - "name": "rendering.mobile/linkedin_desktop_gpu_raster" - }, - { - "duration": "23.789640333333338", - "name": "rendering.mobile/linkedin_mobile" - }, - { - "duration": "24.039456725490197", - "name": "rendering.mobile/linkedin_mobile_sync_scroll" - }, - { - "duration": "31.232848886363623", - "name": "rendering.mobile/linkedin_pathological" - }, - { - "duration": "29.03943236842105", - "name": "rendering.mobile/linkedin_pinch" - }, - { - "duration": "26.51477815789474", - "name": "rendering.mobile/linkedin_pinch_desktop_gpu_raster" - }, - { - "duration": "19.159037045454546", - "name": "rendering.mobile/list_animation_simple" - }, - { - "duration": "33.570327704545456", - "name": "rendering.mobile/list_recycle_transform" - }, - { - "duration": "24.95482347058823", - "name": "rendering.mobile/man_in_blue" - }, - { - "duration": "34.02968207843137", - "name": "rendering.mobile/many_images" - }, - { - "duration": "5.782965824999999", - "name": "rendering.mobile/many_planets_deep" - }, - { - "duration": "45.03647960416666", - "name": "rendering.mobile/maps_perf_test" - }, - { - "duration": "23.74194879545455", - "name": "rendering.mobile/mask_transition_animation" - }, - { - "duration": "22.41856390909091", - "name": "rendering.mobile/masonry" - }, - { - "duration": "30.51278116666667", - "name": "rendering.mobile/medium_texture_uploads" - }, - { - "duration": "22.695113607843144", - "name": "rendering.mobile/megi_dish" - }, - { - "duration": "25.943913156862738", - "name": "rendering.mobile/microsoft_asteroid_belt" - }, - { - "duration": "22.455089882352937", - "name": "rendering.mobile/microsoft_fireflies" - }, - { - "duration": "23.54788215686274", - "name": "rendering.mobile/microsoft_fish_ie_tank" - }, - { - "duration": "23.493530450980394", - "name": "rendering.mobile/microsoft_snow" - }, - { - "duration": "23.219627117647057", - "name": "rendering.mobile/microsoft_speed_reading" - }, - { - "duration": "23.499787274509803", - "name": "rendering.mobile/microsoft_tweet_map" - }, - { - "duration": "31.540959156862744", - "name": "rendering.mobile/microsoft_video_city" - }, - { - "duration": "22.5547732745098", - "name": "rendering.mobile/microsoft_worker_fountains" - }, - { - "duration": "21.640479843137257", - "name": "rendering.mobile/mix_10k" - }, - { - "duration": "30.384050117647053", - "name": "rendering.mobile/mix_blend_mode_animation_difference" - }, - { - "duration": "26.928567196078436", - "name": "rendering.mobile/mix_blend_mode_animation_hue" - }, - { - "duration": "35.021297156862744", - "name": "rendering.mobile/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "30.09406009803922", - "name": "rendering.mobile/mix_blend_mode_animation_screen" - }, - { - "duration": "16.961271019607846", - "name": "rendering.mobile/mlb_mobile" - }, - { - "duration": "16.818421470588234", - "name": "rendering.mobile/mlb_mobile_sync_scroll" - }, - { - "duration": "19.65778802272727", - "name": "rendering.mobile/mobile_news_sandbox" - }, - { - "duration": "32.061840843137254", - "name": "rendering.mobile/motion_mark_canvas_fill_shapes" - }, - { - "duration": "33.59855758823529", - "name": "rendering.mobile/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "90.84168896078432", - "name": "rendering.mobile/motion_mark_focus" - }, - { - "duration": "5.838184987500001", - "name": "rendering.mobile/nvidia_vertex_buffer_object" - }, - { - "duration": "39.17759592", - "name": "rendering.mobile/nyc_gov_scroll" - }, - { - "duration": "90.55883611764708", - "name": "rendering.mobile/nytimes_mobile" - }, - { - "duration": "36.87142461999999", - "name": "rendering.mobile/nytimes_scroll" - }, - { - "duration": "43.029484215686274", - "name": "rendering.mobile/overlay_background_color_css_transitions_page" - }, - { - "duration": "24.978122318181818", - "name": "rendering.mobile/parallax_effect" - }, - { - "duration": "5.729800233333333", - "name": "rendering.mobile/particles" - }, - { - "duration": "35.96384186363637", - "name": "rendering.mobile/pbs_pathological" - }, - { - "duration": "18.698105659090917", - "name": "rendering.mobile/physical_simulation" - }, - { - "duration": "34.868267882352946", - "name": "rendering.mobile/pinterest" - }, - { - "duration": "35.50329182352941", - "name": "rendering.mobile/pinterest_mobile" - }, - { - "duration": "35.755550529411764", - "name": "rendering.mobile/pinterest_mobile_sync_scroll" - }, - { - "duration": "19.942987352941177", - "name": "rendering.mobile/put_get_image_data" - }, - { - "duration": "27.471840680851074", - "name": "rendering.mobile/raf" - }, - { - "duration": "27.10564119148935", - "name": "rendering.mobile/raf_animation" - }, - { - "duration": "26.623981", - "name": "rendering.mobile/raf_canvas" - }, - { - "duration": "27.818764765957443", - "name": "rendering.mobile/raf_touch_animation" - }, - { - "duration": "37.62733470454546", - "name": "rendering.mobile/recode_pathological" - }, - { - "duration": "31.272377620000007", - "name": "rendering.mobile/reddit_mobile" - }, - { - "duration": "23.60933108", - "name": "rendering.mobile/runway" - }, - { - "duration": "5.779116644680851", - "name": "rendering.mobile/san_angeles" - }, - { - "duration": "23.33717570212767", - "name": "rendering.mobile/second_batch_js_heavy" - }, - { - "duration": "19.00569394680851", - "name": "rendering.mobile/second_batch_js_light" - }, - { - "duration": "19.227557914893612", - "name": "rendering.mobile/second_batch_js_medium" - }, - { - "duration": "25.762527740000007", - "name": "rendering.mobile/sfgate_mobile" - }, - { - "duration": "24.90392328", - "name": "rendering.mobile/sfgate_mobile_sync_scroll" - }, - { - "duration": "33.32818961363636", - "name": "rendering.mobile/silk_finance" - }, - { - "duration": "27.714919085106377", - "name": "rendering.mobile/simple_text_page" - }, - { - "duration": "20.273325297872343", - "name": "rendering.mobile/simple_touch_drag" - }, - { - "duration": "30.410717419999997", - "name": "rendering.mobile/slashdot_mobile" - }, - { - "duration": "19.92312593181818", - "name": "rendering.mobile/slide_drawer" - }, - { - "duration": "31.247145595744673", - "name": "rendering.mobile/small_texture_uploads" - }, - { - "duration": "27.84613124", - "name": "rendering.mobile/smash_cat" - }, - { - "duration": "21.271625399999998", - "name": "rendering.mobile/spielzeugz" - }, - { - "duration": "21.500537977272725", - "name": "rendering.mobile/sticky_using_webkit" - }, - { - "duration": "37.67723186363636", - "name": "rendering.mobile/stress_hidey_bars" - }, - { - "duration": "21.773221379999995", - "name": "rendering.mobile/stroke_shapes" - }, - { - "duration": "35.17739097727272", - "name": "rendering.mobile/svg_icon_raster" - }, - { - "duration": "15.973672056818184", - "name": "rendering.mobile/swipe_action" - }, - { - "duration": "22.639817386363635", - "name": "rendering.mobile/swipe_to_dismiss" - }, - { - "duration": "28.249280021276597", - "name": "rendering.mobile/sync_scroll_offset" - }, - { - "duration": "52.06401728571429", - "name": "rendering.mobile/techcrunch" - }, - { - "duration": "50.450015729166644", - "name": "rendering.mobile/techcrunch_desktop_gpu_raster" - }, - { - "duration": "22.023380520000003", - "name": "rendering.mobile/techcrunch_mobile" - }, - { - "duration": "20.880047679999997", - "name": "rendering.mobile/techcrunch_mobile_sync_scroll" - }, - { - "duration": "28.75954887234042", - "name": "rendering.mobile/text_05000_pixels_per_second" - }, - { - "duration": "27.917519063829786", - "name": "rendering.mobile/text_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "29.96455504255319", - "name": "rendering.mobile/text_10000_pixels_per_second" - }, - { - "duration": "28.7507625106383", - "name": "rendering.mobile/text_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "30.368394659574463", - "name": "rendering.mobile/text_15000_pixels_per_second" - }, - { - "duration": "29.043803765957442", - "name": "rendering.mobile/text_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "30.981438489361697", - "name": "rendering.mobile/text_20000_pixels_per_second" - }, - { - "duration": "29.57334987234043", - "name": "rendering.mobile/text_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "31.613731702127648", - "name": "rendering.mobile/text_30000_pixels_per_second" - }, - { - "duration": "30.03895289361703", - "name": "rendering.mobile/text_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.9882345319149", - "name": "rendering.mobile/text_40000_pixels_per_second" - }, - { - "duration": "27.152157127659567", - "name": "rendering.mobile/text_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "25.801533914893618", - "name": "rendering.mobile/text_50000_pixels_per_second" - }, - { - "duration": "24.43239946808511", - "name": "rendering.mobile/text_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "23.962020787234046", - "name": "rendering.mobile/text_60000_pixels_per_second" - }, - { - "duration": "22.54777455319149", - "name": "rendering.mobile/text_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "22.579263042553183", - "name": "rendering.mobile/text_75000_pixels_per_second" - }, - { - "duration": "21.360744446808507", - "name": "rendering.mobile/text_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "21.25218210638298", - "name": "rendering.mobile/text_90000_pixels_per_second" - }, - { - "duration": "19.872735212765953", - "name": "rendering.mobile/text_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.340021510638298", - "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "25.27512465957447", - "name": "rendering.mobile/text_constant_full_page_raster_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.401923127659572", - "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "25.572935531914897", - "name": "rendering.mobile/text_constant_full_page_raster_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.913665765957443", - "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "25.751572255319147", - "name": "rendering.mobile/text_constant_full_page_raster_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.251759170212765", - "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "25.982612297872336", - "name": "rendering.mobile/text_constant_full_page_raster_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "28.41671306382979", - "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "26.191134659574477", - "name": "rendering.mobile/text_constant_full_page_raster_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "27.21561491489361", - "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "25.19680744680851", - "name": "rendering.mobile/text_constant_full_page_raster_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "24.514229957446815", - "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "22.684990957446807", - "name": "rendering.mobile/text_constant_full_page_raster_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "26.40954712765958", - "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "20.9911140212766", - "name": "rendering.mobile/text_constant_full_page_raster_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.235782361702128", - "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "22.946062893617018", - "name": "rendering.mobile/text_constant_full_page_raster_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "19.06416429787234", - "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "18.120105276595744", - "name": "rendering.mobile/text_constant_full_page_raster_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.434260999999996", - "name": "rendering.mobile/text_hover_05000_pixels_per_second" - }, - { - "duration": "20.451995744680847", - "name": "rendering.mobile/text_hover_05000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.338325744680848", - "name": "rendering.mobile/text_hover_10000_pixels_per_second" - }, - { - "duration": "20.36557768085106", - "name": "rendering.mobile/text_hover_10000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.42906182978724", - "name": "rendering.mobile/text_hover_15000_pixels_per_second" - }, - { - "duration": "20.225606999999993", - "name": "rendering.mobile/text_hover_15000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.514491638297866", - "name": "rendering.mobile/text_hover_20000_pixels_per_second" - }, - { - "duration": "20.15768878723404", - "name": "rendering.mobile/text_hover_20000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "20.371316680851066", - "name": "rendering.mobile/text_hover_30000_pixels_per_second" - }, - { - "duration": "20.351732659574466", - "name": "rendering.mobile/text_hover_30000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "19.09484661702128", - "name": "rendering.mobile/text_hover_40000_pixels_per_second" - }, - { - "duration": "19.063366063829786", - "name": "rendering.mobile/text_hover_40000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "17.82487268085107", - "name": "rendering.mobile/text_hover_50000_pixels_per_second" - }, - { - "duration": "17.649837170212766", - "name": "rendering.mobile/text_hover_50000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "17.016724255319147", - "name": "rendering.mobile/text_hover_60000_pixels_per_second" - }, - { - "duration": "17.045624085106386", - "name": "rendering.mobile/text_hover_60000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "16.325106170212766", - "name": "rendering.mobile/text_hover_75000_pixels_per_second" - }, - { - "duration": "16.15029017021277", - "name": "rendering.mobile/text_hover_75000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "15.717707478723403", - "name": "rendering.mobile/text_hover_90000_pixels_per_second" - }, - { - "duration": "15.656940042553193", - "name": "rendering.mobile/text_hover_90000_pixels_per_second_desktop_gpu_raster" - }, - { - "duration": "35.984204260000006", - "name": "rendering.mobile/theverge_article_mobile" - }, - { - "duration": "35.29241742", - "name": "rendering.mobile/theverge_article_mobile_sync_scroll" - }, - { - "duration": "22.780288679999998", - "name": "rendering.mobile/theverge_mobile" - }, - { - "duration": "22.930250240000007", - "name": "rendering.mobile/theverge_mobile_sync_scroll" - }, - { - "duration": "26.544942022727277", - "name": "rendering.mobile/toggle_drawer" - }, - { - "duration": "28.50480059574467", - "name": "rendering.mobile/touch_handler_scrolling" - }, - { - "duration": "31.102286799999987", - "name": "rendering.mobile/transform_transitions" - }, - { - "duration": "30.33988155999999", - "name": "rendering.mobile/transform_transitions_js_block" - }, - { - "duration": "25.10539366", - "name": "rendering.mobile/twitter" - }, - { - "duration": "22.97974698", - "name": "rendering.mobile/twitter_desktop_gpu_raster" - }, - { - "duration": "33.890595166666664", - "name": "rendering.mobile/twitter_pinch" - }, - { - "duration": "30.604881777777777", - "name": "rendering.mobile/twitter_pinch_desktop_gpu_raster" - }, - { - "duration": "24.859755818181824", - "name": "rendering.mobile/update_history_state" - }, - { - "duration": "38.74125613999998", - "name": "rendering.mobile/usatoday_mobile" - }, - { - "duration": "36.088973460000005", - "name": "rendering.mobile/usatoday_mobile_sync_scroll" - }, - { - "duration": "24.87695840909091", - "name": "rendering.mobile/vertical_expansion" - }, - { - "duration": "30.792588680851072", - "name": "rendering.mobile/weather.com" - }, - { - "duration": "29.552285306122453", - "name": "rendering.mobile/weather.com_desktop_gpu_raster" - }, - { - "duration": "44.86782222222221", - "name": "rendering.mobile/weather_pinch" - }, - { - "duration": "41.68619666666667", - "name": "rendering.mobile/weather_pinch_desktop_gpu_raster" - }, - { - "duration": "29.660354239999993", - "name": "rendering.mobile/web_animation_value_type_color" - }, - { - "duration": "28.24523242", - "name": "rendering.mobile/web_animation_value_type_length_3d" - }, - { - "duration": "29.10765554000001", - "name": "rendering.mobile/web_animation_value_type_length_complex" - }, - { - "duration": "29.656485439999987", - "name": "rendering.mobile/web_animation_value_type_length_simple" - }, - { - "duration": "30.431331280000006", - "name": "rendering.mobile/web_animation_value_type_path" - }, - { - "duration": "27.317870739999993", - "name": "rendering.mobile/web_animation_value_type_shadow" - }, - { - "duration": "27.893964299999997", - "name": "rendering.mobile/web_animation_value_type_transform_complex" - }, - { - "duration": "28.27138308", - "name": "rendering.mobile/web_animation_value_type_transform_simple" - }, - { - "duration": "30.748335559999997", - "name": "rendering.mobile/web_animations_many_keyframes" - }, - { - "duration": "28.603182979999993", - "name": "rendering.mobile/web_animations_set_current_time" - }, - { - "duration": "29.049554059999995", - "name": "rendering.mobile/web_animations_simultaneous" - }, - { - "duration": "30.535248719999995", - "name": "rendering.mobile/web_animations_staggered_chaining" - }, - { - "duration": "27.133919939999995", - "name": "rendering.mobile/web_animations_staggered_infinite_iterations" - }, - { - "duration": "30.750542699999997", - "name": "rendering.mobile/web_animations_staggered_triggering_page" - }, - { - "duration": "33.813109419999996", - "name": "rendering.mobile/wikipedia" - }, - { - "duration": "26.058306960000003", - "name": "rendering.mobile/wikipedia_delayed_scroll_start" - }, - { - "duration": "26.299913619999998", - "name": "rendering.mobile/wikipedia_delayed_scroll_start_sync_scroll" - }, - { - "duration": "33.68655296", - "name": "rendering.mobile/wikipedia_desktop_gpu_raster" - }, - { - "duration": "25.97258190000001", - "name": "rendering.mobile/wikipedia_mobile" - }, - { - "duration": "26.32137323999999", - "name": "rendering.mobile/wikipedia_mobile_sync_scroll" - }, - { - "duration": "40.7665784", - "name": "rendering.mobile/wordpress" - }, - { - "duration": "38.93617841999999", - "name": "rendering.mobile/wordpress_desktop_gpu_raster" - }, - { - "duration": "37.86740561999999", - "name": "rendering.mobile/wordpress_mobile" - }, - { - "duration": "37.38060232000001", - "name": "rendering.mobile/wordpress_mobile_sync_scroll" - }, - { - "duration": "37.94390764", - "name": "rendering.mobile/worldjournal_mobile" - }, - { - "duration": "38.35215835999999", - "name": "rendering.mobile/worldjournal_mobile_sync_scroll" - }, - { - "duration": "37.79652136363636", - "name": "rendering.mobile/wow_wiki_pathological" - }, - { - "duration": "46.97339012244899", - "name": "rendering.mobile/wowwiki_mobile" - }, - { - "duration": "46.21493371428571", - "name": "rendering.mobile/wowwiki_mobile_sync_scroll" - }, - { - "duration": "22.069057200000003", - "name": "rendering.mobile/wsj_mobile" - }, - { - "duration": "20.5240269", - "name": "rendering.mobile/wsj_mobile_sync_scroll" - }, - { - "duration": "22.098378679999996", - "name": "rendering.mobile/yahoo_answers" - }, - { - "duration": "20.501370100000003", - "name": "rendering.mobile/yahoo_answers_desktop_gpu_raster" - }, - { - "duration": "24.801385820000004", - "name": "rendering.mobile/yahoo_answers_mobile" - }, - { - "duration": "26.4597648", - "name": "rendering.mobile/yahoo_answers_mobile_sync_scroll" - }, - { - "duration": "34.70652144", - "name": "rendering.mobile/yahoo_games" - }, - { - "duration": "34.24327786", - "name": "rendering.mobile/yahoo_games_desktop_gpu_raster" - }, - { - "duration": "39.32545022222222", - "name": "rendering.mobile/yahoo_games_pinch" - }, - { - "duration": "36.93065950000001", - "name": "rendering.mobile/yahoo_games_pinch_desktop_gpu_raster" - }, - { - "duration": "26.889744900000004", - "name": "rendering.mobile/yahoo_news" - }, - { - "duration": "25.210249879999996", - "name": "rendering.mobile/yahoo_news_desktop_gpu_raster" - }, - { - "duration": "25.62603016000001", - "name": "rendering.mobile/yahoo_news_mobile" - }, - { - "duration": "24.540794199999997", - "name": "rendering.mobile/yahoo_news_mobile_sync_scroll" - }, - { - "duration": "38.6499435", - "name": "rendering.mobile/yahoo_news_pinch" - }, - { - "duration": "35.24173011111111", - "name": "rendering.mobile/yahoo_news_pinch_desktop_gpu_raster" - }, - { - "duration": "27.506845780000003", - "name": "rendering.mobile/yahoo_sports" - }, - { - "duration": "26.549425460000002", - "name": "rendering.mobile/yahoo_sports_desktop_gpu_raster" - }, - { - "duration": "33.326363318181805", - "name": "rendering.mobile/yahoo_sports_pathological" - }, - { - "duration": "55.777929111111106", - "name": "rendering.mobile/yahoo_sports_pinch" - }, - { - "duration": "52.34752677777778", - "name": "rendering.mobile/yahoo_sports_pinch_desktop_gpu_raster" - }, - { - "duration": "30.54288938888889", - "name": "rendering.mobile/youtube" - }, - { - "duration": "30.332753904761915", - "name": "rendering.mobile/youtube_desktop_gpu_raster" - }, - { - "duration": "17.257728", - "name": "rendering.mobile/youtube_mobile" - }, - { - "duration": "15.70759307", - "name": "rendering.mobile/youtube_mobile_sync_scroll" - }, - { - "duration": "34.53229438888889", - "name": "rendering.mobile/youtube_pinch" - }, - { - "duration": "32.239342444444446", - "name": "rendering.mobile/youtube_pinch_desktop_gpu_raster" - }, - { - "duration": "28.479548808510636", - "name": "rendering.mobile/yuv_decoding" - }, - { - "duration": "29.71611604255319", - "name": "rendering.mobile/yuv_decoding_gpu_rasterization_and_decoding" - }, - { - "duration": "32.35079602272726", - "name": "rendering.mobile/zdnet_pathological" - }, - { - "duration": "22.948478863636357", - "name": "rendering.mobile/zoom_in_animation" - }, - { - "duration": "18.799325103275866", - "name": "scheduler.tough_scheduling_cases/raf" - }, - { - "duration": "19.206051087719295", - "name": "scheduler.tough_scheduling_cases/raf_animation" - }, - { - "duration": "18.377707333333333", - "name": "scheduler.tough_scheduling_cases/raf_canvas" - }, - { - "duration": "19.20640322807018", - "name": "scheduler.tough_scheduling_cases/raf_touch_animation" - }, - { - "duration": "11.874989918181816", - "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy" - }, - { - "duration": "11.683113199999998", - "name": "scheduler.tough_scheduling_cases/second_batch_js_light" - }, - { - "duration": "11.851276027272727", - "name": "scheduler.tough_scheduling_cases/second_batch_js_medium" - }, - { - "duration": "29.872416683333324", - "name": "scheduler.tough_scheduling_cases/simple_text_page" - }, - { - "duration": "14.140314789473683", - "name": "scheduler.tough_scheduling_cases/simple_touch_drag" - }, - { - "duration": "18.88684450909091", - "name": "scheduler.tough_scheduling_cases/sync_scroll_offset" - }, - { - "duration": "19.297371916666673", - "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling" - }, - { - "duration": "14.938089", - "name": "smoothness.gpu_rasterization.polymer/core_scroll_header_panel" - }, - { - "duration": "18.91615", - "name": "smoothness.gpu_rasterization.polymer/paper_button" - }, - { - "duration": "27.555199", - "name": "smoothness.gpu_rasterization.polymer/paper_calculator" - }, - { - "duration": "23.664267", - "name": "smoothness.gpu_rasterization.polymer/paper_checkbox" - }, - { - "duration": "18.841707", - "name": "smoothness.gpu_rasterization.polymer/paper_fab" - }, - { - "duration": "43.18708", - "name": "smoothness.gpu_rasterization.polymer/paper_icon_button" - }, - { - "duration": "20.55393", - "name": "smoothness.gpu_rasterization.polymer/paper_shadow" - }, - { - "duration": "56.13814", - "name": "smoothness.gpu_rasterization.polymer/paper_tabs" - }, - { - "duration": "14.650763", - "name": "smoothness.gpu_rasterization.polymer/paper_toggle_button" - }, - { - "duration": "24.81473103030303", - "name": "smoothness.gpu_rasterization.top_25_smooth/blogspot" - }, - { - "duration": "17.69833766666667", - "name": "smoothness.gpu_rasterization.top_25_smooth/booking.com" - }, - { - "duration": "13.284247050505044", - "name": "smoothness.gpu_rasterization.top_25_smooth/ebay" - }, - { - "duration": "16.260108803030313", - "name": "smoothness.gpu_rasterization.top_25_smooth/espn" - }, - { - "duration": "19.716015373737374", - "name": "smoothness.gpu_rasterization.top_25_smooth/facebook" - }, - { - "duration": "30.54843738383838", - "name": "smoothness.gpu_rasterization.top_25_smooth/gmail" - }, - { - "duration": "18.927520373737373", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_calendar" - }, - { - "duration": "28.270295404040414", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_docs" - }, - { - "duration": "21.80036748484849", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_image_search" - }, - { - "duration": "26.115059040404045", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_plus" - }, - { - "duration": "13.011311494949497", - "name": "smoothness.gpu_rasterization.top_25_smooth/google_web_search" - }, - { - "duration": "16.765825737373728", - "name": "smoothness.gpu_rasterization.top_25_smooth/linkedin" - }, - { - "duration": "24.87675916161616", - "name": "smoothness.gpu_rasterization.top_25_smooth/techcrunch" - }, - { - "duration": "19.43501411111111", - "name": "smoothness.gpu_rasterization.top_25_smooth/twitter" - }, - { - "duration": "16.953301833333327", - "name": "smoothness.gpu_rasterization.top_25_smooth/weather.com" - }, - { - "duration": "23.511424575757577", - "name": "smoothness.gpu_rasterization.top_25_smooth/wikipedia" - }, - { - "duration": "22.052779939393943", - "name": "smoothness.gpu_rasterization.top_25_smooth/wordpress" - }, - { - "duration": "15.078567", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_answers" - }, - { - "duration": "24.296289060606057", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_games" - }, - { - "duration": "18.020234747474742", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_news" - }, - { - "duration": "18.094719636363642", - "name": "smoothness.gpu_rasterization.top_25_smooth/yahoo_sports" - }, - { - "duration": "19.296133989898998", - "name": "smoothness.gpu_rasterization.top_25_smooth/youtube" - }, - { - "duration": "22.071408696969684", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG" - }, - { - "duration": "22.246296454545455", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG" - }, - { - "duration": "24.591974010101023", - "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark" - }, - { - "duration": "26.023366161616153", - "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus" - }, - { - "duration": "21.864080090909095", - "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "22.275277202020206", - "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "24.57534975757575", - "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "26.052543727272727", - "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "26.766590575757576", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test" - }, - { - "duration": "33.42531311111112", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard" - }, - { - "duration": "21.027038525252525", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes" - }, - { - "duration": "21.222493080808086", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes" - }, - { - "duration": "26.922234545454554", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "33.29083424242425", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "20.898740303030305", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "21.072023646464643", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "20.457519626262627", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Blogger" - }, - { - "duration": "20.234898565656568", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ESPN" - }, - { - "duration": "17.716905282828282", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Facebook" - }, - { - "duration": "17.521131757575752", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/LinkedIn" - }, - { - "duration": "19.673153646464645", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Twitter" - }, - { - "duration": "23.46269215151515", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/Weather.com" - }, - { - "duration": "17.135128101010096", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/amazon_pinch" - }, - { - "duration": "20.052489999999985", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/blogspot_pinch" - }, - { - "duration": "18.50391045454545", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/booking_pinch" - }, - { - "duration": "20.944398686868684", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/cnn_pinch" - }, - { - "duration": "18.376026101010098", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/ebay_pinch" - }, - { - "duration": "20.068561888888887", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/espn_pinch" - }, - { - "duration": "17.35824208050505", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/facebook_pinch" - }, - { - "duration": "21.377881696969705", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/gmail_pinch" - }, - { - "duration": "20.00883534343434", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_calendar_pinch" - }, - { - "duration": "18.033614686868678", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_image_pinch" - }, - { - "duration": "23.226142202020192", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/google_search_pinch" - }, - { - "duration": "18.611691414141408", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://booking.com" - }, - { - "duration": "24.200457676767673", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com" - }, - { - "duration": "21.442634242424248", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://news.yahoo.com" - }, - { - "duration": "23.978675454545474", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://sports.yahoo.com/" - }, - { - "duration": "17.163681292929297", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.amazon.com" - }, - { - "duration": "21.11834083838384", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.cnn.com" - }, - { - "duration": "18.500673303030307", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.ebay.com" - }, - { - "duration": "20.12547411111111", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://www.youtube.com" - }, - { - "duration": "21.599045060606063", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://mail.google.com/mail/" - }, - { - "duration": "23.52236257575757", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "20.186037191919194", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/calendar/" - }, - { - "duration": "18.223816474747473", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/https://www.google.com/search?q=cats&tbm=isch" - }, - { - "duration": "17.155473969696963", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/linkedin_pinch" - }, - { - "duration": "19.42624984848485", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/twitter_pinch" - }, - { - "duration": "23.373945161616167", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/weather_pinch" - }, - { - "duration": "24.168533020202016", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_games_pinch" - }, - { - "duration": "21.526567000000007", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_news_pinch" - }, - { - "duration": "23.818035292929284", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/yahoo_sports_pinch" - }, - { - "duration": "19.822346323232324", - "name": "smoothness.gpu_rasterization.tough_pinch_zoom_cases/youtube_pinch" - }, - { - "duration": "18.507448818181825", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "18.646058151515152", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "18.67110256565657", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "18.686313020202018", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "18.720366909090913", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "17.362337030303028", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "16.141212919191922", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "15.0306944090909", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "14.287694404040403", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "13.50915887878788", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "29.52484534343435", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "19.545956444444453", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "19.334000777777785", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "19.40894502020201", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "19.360452080808074", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "17.8572618989899", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "16.496166333333328", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "15.449881121212119", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "14.503100601010102", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "13.804428499999998", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "18.274340212121217", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "18.259447555555553", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "18.33203639393939", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "18.336211111111112", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "18.339763494949494", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "17.88479071717172", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "16.365232181818183", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "15.383536575757578", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "14.37222653030303", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "13.85775982323233", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "18.05117803030303", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "18.44442062626263", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "18.491643818181817", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "18.44029223232323", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "18.4738447979798", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "17.093403171717178", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "15.773262585858587", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "14.913316646464654", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "14.102246196969702", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "13.437218060606059", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "26.569065852459005", - "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding" - }, - { - "duration": "26.629028147540986", - "name": "smoothness.image_decoding_cases/yuv_decoding" - }, - { - "duration": "16.53914413636364", - "name": "smoothness.key_mobile_sites_smooth/androidpolice" - }, - { - "duration": "13.291175718181815", - "name": "smoothness.key_mobile_sites_smooth/baidu" - }, - { - "duration": "12.237363636363638", - "name": "smoothness.key_mobile_sites_smooth/bing" - }, - { - "duration": "14.365715415254241", - "name": "smoothness.key_mobile_sites_smooth/blogspot" - }, - { - "duration": "24.812816169491523", - "name": "smoothness.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "12.958837654545453", - "name": "smoothness.key_mobile_sites_smooth/booking.com" - }, - { - "duration": "24.33851395", - "name": "smoothness.key_mobile_sites_smooth/capitolvolkswagen" - }, - { - "duration": "15.18539076363636", - "name": "smoothness.key_mobile_sites_smooth/cnn" - }, - { - "duration": "30.0165683220339", - "name": "smoothness.key_mobile_sites_smooth/cnn_article" - }, - { - "duration": "23.590496254237287", - "name": "smoothness.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "21.357222400000005", - "name": "smoothness.key_mobile_sites_smooth/deviantart" - }, - { - "duration": "15.89577759090909", - "name": "smoothness.key_mobile_sites_smooth/ebay" - }, - { - "duration": "15.979215499999999", - "name": "smoothness.key_mobile_sites_smooth/facebook" - }, - { - "duration": "21.41754853333333", - "name": "smoothness.key_mobile_sites_smooth/google_news" - }, - { - "duration": "17.745036381818185", - "name": "smoothness.key_mobile_sites_smooth/google_plus" - }, - { - "duration": "13.544446727272723", - "name": "smoothness.key_mobile_sites_smooth/google_web_search" - }, - { - "duration": "14.588915345454541", - "name": "smoothness.key_mobile_sites_smooth/gsp.ro" - }, - { - "duration": "16.675895533333332", - "name": "smoothness.key_mobile_sites_smooth/linkedin" - }, - { - "duration": "12.726080918181815", - "name": "smoothness.key_mobile_sites_smooth/mlb" - }, - { - "duration": "17.255912881355933", - "name": "smoothness.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "21.782283267857142", - "name": "smoothness.key_mobile_sites_smooth/pinterest" - }, - { - "duration": "20.882384271186442", - "name": "smoothness.key_mobile_sites_smooth/reddit" - }, - { - "duration": "17.950470527272728", - "name": "smoothness.key_mobile_sites_smooth/sfgate" - }, - { - "duration": "19.428483915254244", - "name": "smoothness.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "14.26479439090909", - "name": "smoothness.key_mobile_sites_smooth/techcrunch" - }, - { - "duration": "15.692550409090913", - "name": "smoothness.key_mobile_sites_smooth/theverge" - }, - { - "duration": "22.655533066666667", - "name": "smoothness.key_mobile_sites_smooth/theverge_article" - }, - { - "duration": "21.96348992592593", - "name": "smoothness.key_mobile_sites_smooth/usatoday" - }, - { - "duration": "18.137424877192977", - "name": "smoothness.key_mobile_sites_smooth/wikipedia" - }, - { - "duration": "18.142369593220337", - "name": "smoothness.key_mobile_sites_smooth/wikipedia_delayed_scroll_start" - }, - { - "duration": "21.20393466101695", - "name": "smoothness.key_mobile_sites_smooth/wordpress" - }, - { - "duration": "19.768529454545455", - "name": "smoothness.key_mobile_sites_smooth/worldjournal" - }, - { - "duration": "27.002991305084752", - "name": "smoothness.key_mobile_sites_smooth/wowwiki" - }, - { - "duration": "14.532464472727272", - "name": "smoothness.key_mobile_sites_smooth/wsj" - }, - { - "duration": "17.25935281666667", - "name": "smoothness.key_mobile_sites_smooth/yahoo_answers" - }, - { - "duration": "16.786935727272727", - "name": "smoothness.key_mobile_sites_smooth/yahoo_news" - }, - { - "duration": "13.40610516666667", - "name": "smoothness.key_mobile_sites_smooth/youtube" - }, - { - "duration": "25.359990737704916", - "name": "smoothness.key_silk_cases/basic_stream" - }, - { - "duration": "16.37147265573771", - "name": "smoothness.key_silk_cases/card_expansion" - }, - { - "duration": "17.447161639344266", - "name": "smoothness.key_silk_cases/card_expansion_animated" - }, - { - "duration": "17.716525114754095", - "name": "smoothness.key_silk_cases/card_expansion_images_text" - }, - { - "duration": "16.31518052459017", - "name": "smoothness.key_silk_cases/card_flying" - }, - { - "duration": "17.861628114754097", - "name": "smoothness.key_silk_cases/coordinated_animation" - }, - { - "duration": "17.843532426229512", - "name": "smoothness.key_silk_cases/font_wipe" - }, - { - "duration": "18.894321262295083", - "name": "smoothness.key_silk_cases/google_news_ios" - }, - { - "duration": "18.105140180327872", - "name": "smoothness.key_silk_cases/gws_boogie_expansion" - }, - { - "duration": "18.616162852459027", - "name": "smoothness.key_silk_cases/gws_google_expansion" - }, - { - "duration": "17.38313752459016", - "name": "smoothness.key_silk_cases/horizontal_vertical_expansion" - }, - { - "duration": "22.869229426229506", - "name": "smoothness.key_silk_cases/infinite_scrolling" - }, - { - "duration": "14.918027991803275", - "name": "smoothness.key_silk_cases/list_animation_simple" - }, - { - "duration": "26.942414672131147", - "name": "smoothness.key_silk_cases/list_recycle_transform" - }, - { - "duration": "16.686518245901638", - "name": "smoothness.key_silk_cases/mask_transition_animation" - }, - { - "duration": "16.928695688524595", - "name": "smoothness.key_silk_cases/masonry" - }, - { - "duration": "15.259632737704917", - "name": "smoothness.key_silk_cases/mobile_news_sandbox" - }, - { - "duration": "17.517494147540983", - "name": "smoothness.key_silk_cases/parallax_effect" - }, - { - "duration": "14.755297639344262", - "name": "smoothness.key_silk_cases/physical_simulation" - }, - { - "duration": "24.119664426229516", - "name": "smoothness.key_silk_cases/silk_finance" - }, - { - "duration": "15.970722868852462", - "name": "smoothness.key_silk_cases/sticky_using_webkit" - }, - { - "duration": "26.26587440983606", - "name": "smoothness.key_silk_cases/stress_hidey_bars" - }, - { - "duration": "25.750074213114747", - "name": "smoothness.key_silk_cases/svg_icon_raster" - }, - { - "duration": "12.902936049180326", - "name": "smoothness.key_silk_cases/swipe_action" - }, - { - "duration": "16.33346949180328", - "name": "smoothness.key_silk_cases/swipe_to_dismiss" - }, - { - "duration": "20.306419754098368", - "name": "smoothness.key_silk_cases/toggle_drawer" - }, - { - "duration": "18.311884672131153", - "name": "smoothness.key_silk_cases/update_history_state" - }, - { - "duration": "17.131549540983606", - "name": "smoothness.key_silk_cases/vertical_expansion" - }, - { - "duration": "16.476652081967217", - "name": "smoothness.key_silk_cases/zoom_in_animation" - }, - { - "duration": "28.821596590163935", - "name": "smoothness.maps/maps_perf_test" - }, - { - "duration": "28.674610918032776", - "name": "smoothness.pathological_mobile_sites/cnn_pathological" - }, - { - "duration": "20.24299862295082", - "name": "smoothness.pathological_mobile_sites/espn_pathological" - }, - { - "duration": "17.557712475409833", - "name": "smoothness.pathological_mobile_sites/guardian_pathological" - }, - { - "duration": "34.125893313131314", - "name": "smoothness.pathological_mobile_sites/http://edition.cnn.com" - }, - { - "duration": "21.165496929292935", - "name": "smoothness.pathological_mobile_sites/http://m.espn.go.com/nhl/rankings" - }, - { - "duration": "24.303929666666658", - "name": "smoothness.pathological_mobile_sites/http://recode.net" - }, - { - "duration": "23.769852070707078", - "name": "smoothness.pathological_mobile_sites/http://sports.yahoo.com/" - }, - { - "duration": "23.95460922222222", - "name": "smoothness.pathological_mobile_sites/http://www.latimes.com" - }, - { - "duration": "23.24269973737373", - "name": "smoothness.pathological_mobile_sites/http://www.pbs.org/newshour/bb/much-really-cost-live-city-like-seattle/#the-rundown" - }, - { - "duration": "18.307695060606054", - "name": "smoothness.pathological_mobile_sites/http://www.theguardian.com/politics/2015/mar/09/ed-balls-tory-spending-plans-nhs-charging" - }, - { - "duration": "24.52768088888889", - "name": "smoothness.pathological_mobile_sites/http://www.wowwiki.com/World_of_Warcraft:_Mists_of_Pandaria" - }, - { - "duration": "21.474880676767675", - "name": "smoothness.pathological_mobile_sites/http://www.zdnet.com" - }, - { - "duration": "21.462242555555555", - "name": "smoothness.pathological_mobile_sites/https://www.linkedin.com/in/linustorvalds" - }, - { - "duration": "23.825132131147544", - "name": "smoothness.pathological_mobile_sites/latimes_pathological" - }, - { - "duration": "20.733113622950818", - "name": "smoothness.pathological_mobile_sites/linkedin_pathological" - }, - { - "duration": "22.28273478688524", - "name": "smoothness.pathological_mobile_sites/pbs_pathological" - }, - { - "duration": "23.086000836065573", - "name": "smoothness.pathological_mobile_sites/recode_pathological" - }, - { - "duration": "23.744039098360652", - "name": "smoothness.pathological_mobile_sites/wow_wiki_pathological" - }, - { - "duration": "22.60097137704919", - "name": "smoothness.pathological_mobile_sites/yahoo_sports_pathological" - }, - { - "duration": "20.430695229508185", - "name": "smoothness.pathological_mobile_sites/zdnet_pathological" - }, - { - "duration": "31.095673180327864", - "name": "smoothness.simple_mobile_sites/ebay_scroll" - }, - { - "duration": "25.098881000000002", - "name": "smoothness.simple_mobile_sites/flickr_scroll" - }, - { - "duration": "26.060939696969683", - "name": "smoothness.simple_mobile_sites/http://m.nytimes.com/" - }, - { - "duration": "31.32089277777777", - "name": "smoothness.simple_mobile_sites/http://www.ebay.co.uk/" - }, - { - "duration": "26.259290949494947", - "name": "smoothness.simple_mobile_sites/http://www.nyc.gov" - }, - { - "duration": "25.429110333333316", - "name": "smoothness.simple_mobile_sites/https://www.flickr.com/" - }, - { - "duration": "26.21302401639344", - "name": "smoothness.simple_mobile_sites/nyc_gov_scroll" - }, - { - "duration": "25.879720360655746", - "name": "smoothness.simple_mobile_sites/nytimes_scroll" - }, - { - "duration": "12.30919037878788", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/amazon" - }, - { - "duration": "17.553353626262624", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/androidpolice" - }, - { - "duration": "13.419487333333336", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/baidu" - }, - { - "duration": "12.35000406565657", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/bing" - }, - { - "duration": "14.588684181818179", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/blogspot" - }, - { - "duration": "26.629666191919195", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "12.98962581313131", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/booking.com" - }, - { - "duration": "25.129272292929294", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/capitolvolkswagen" - }, - { - "duration": "15.469489843434344", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn" - }, - { - "duration": "32.38077446464647", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cnn_article" - }, - { - "duration": "25.60486985858586", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "21.313415727272734", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/deviantart" - }, - { - "duration": "16.256086060606055", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/ebay" - }, - { - "duration": "23.20500197979798", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/espn" - }, - { - "duration": "16.32861003030304", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/facebook" - }, - { - "duration": "14.802518469696972", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/forecast.io" - }, - { - "duration": "21.317157606060597", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_news" - }, - { - "duration": "19.805972242424232", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_plus" - }, - { - "duration": "13.828701045454547", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/google_web_search" - }, - { - "duration": "14.843548909090911", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/gsp.ro" - }, - { - "duration": "17.13667131313131", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/linkedin" - }, - { - "duration": "12.860879126262624", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/mlb" - }, - { - "duration": "17.460176787878783", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "22.94758834343435", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/pinterest" - }, - { - "duration": "20.98797042424242", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/reddit" - }, - { - "duration": "18.45800221212121", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/sfgate" - }, - { - "duration": "19.94021547474747", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "14.559818661616161", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/techcrunch" - }, - { - "duration": "16.004070919191925", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge" - }, - { - "duration": "22.836122060606062", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/theverge_article" - }, - { - "duration": "13.172477782828281", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/twitter" - }, - { - "duration": "21.683123101010096", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/usatoday" - }, - { - "duration": "18.283508696969697", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia" - }, - { - "duration": "18.263198434343437", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wikipedia_delayed_scroll_start" - }, - { - "duration": "21.93877677777777", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wordpress" - }, - { - "duration": "20.825173404040413", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/worldjournal" - }, - { - "duration": "27.130637929292934", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wowwiki" - }, - { - "duration": "14.661252787878787", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/wsj" - }, - { - "duration": "18.171624353535357", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_answers" - }, - { - "duration": "17.091449030303032", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/yahoo_news" - }, - { - "duration": "13.579494898989902", - "name": "smoothness.sync_scroll.key_mobile_sites_smooth/youtube" - }, - { - "duration": "25.046911303030296", - "name": "smoothness.top_25_smooth/blogspot" - }, - { - "duration": "17.37225661616163", - "name": "smoothness.top_25_smooth/booking.com" - }, - { - "duration": "12.80938446464646", - "name": "smoothness.top_25_smooth/ebay" - }, - { - "duration": "15.779602202020206", - "name": "smoothness.top_25_smooth/espn" - }, - { - "duration": "20.048795929292922", - "name": "smoothness.top_25_smooth/facebook" - }, - { - "duration": "24.951335727272728", - "name": "smoothness.top_25_smooth/gmail" - }, - { - "duration": "18.869747686868696", - "name": "smoothness.top_25_smooth/google_calendar" - }, - { - "duration": "28.923561282828267", - "name": "smoothness.top_25_smooth/google_docs" - }, - { - "duration": "22.120960626262626", - "name": "smoothness.top_25_smooth/google_image_search" - }, - { - "duration": "26.418621020202036", - "name": "smoothness.top_25_smooth/google_plus" - }, - { - "duration": "13.20374604040404", - "name": "smoothness.top_25_smooth/google_web_search" - }, - { - "duration": "16.266582000000003", - "name": "smoothness.top_25_smooth/linkedin" - }, - { - "duration": "21.153775717171715", - "name": "smoothness.top_25_smooth/pinterest" - }, - { - "duration": "24.788411272727274", - "name": "smoothness.top_25_smooth/techcrunch" - }, - { - "duration": "18.91154121212121", - "name": "smoothness.top_25_smooth/twitter" - }, - { - "duration": "16.4054206919192", - "name": "smoothness.top_25_smooth/weather.com" - }, - { - "duration": "23.213889505050503", - "name": "smoothness.top_25_smooth/wikipedia" - }, - { - "duration": "22.27848776767677", - "name": "smoothness.top_25_smooth/wordpress" - }, - { - "duration": "14.596352338383838", - "name": "smoothness.top_25_smooth/yahoo_answers" - }, - { - "duration": "24.10144237373737", - "name": "smoothness.top_25_smooth/yahoo_games" - }, - { - "duration": "17.48463835353535", - "name": "smoothness.top_25_smooth/yahoo_news" - }, - { - "duration": "17.747225151515146", - "name": "smoothness.top_25_smooth/yahoo_sports" - }, - { - "duration": "19.60449215151515", - "name": "smoothness.top_25_smooth/youtube" - }, - { - "duration": "27.04536781818182", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html" - }, - { - "duration": "22.456082111111108", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html" - }, - { - "duration": "22.534815787878802", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html" - }, - { - "duration": "22.52919038383839", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html" - }, - { - "duration": "22.43159716161616", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html" - }, - { - "duration": "22.454406262626275", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html" - }, - { - "duration": "22.426331535353533", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html" - }, - { - "duration": "22.458929676767674", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html" - }, - { - "duration": "22.401501545454547", - "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html" - }, - { - "duration": "22.406789909090914", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html" - }, - { - "duration": "22.549943171717167", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html" - }, - { - "duration": "21.923174557377042", - "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations" - }, - { - "duration": "21.85514444444445", - "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html" - }, - { - "duration": "22.44665429508197", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties" - }, - { - "duration": "22.286494262626267", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html" - }, - { - "duration": "22.57624036065575", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties" - }, - { - "duration": "22.297481767676768", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html" - }, - { - "duration": "22.488254622950816", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties" - }, - { - "duration": "22.225520010101018", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html" - }, - { - "duration": "20.932041327868856", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas" - }, - { - "duration": "20.892632616161613", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html" - }, - { - "duration": "21.126268836065574", - "name": "smoothness.tough_animation_cases/balls_javascript_css" - }, - { - "duration": "20.999826545454553", - "name": "smoothness.tough_animation_cases/balls_javascript_css.html" - }, - { - "duration": "26.701714885245888", - "name": "smoothness.tough_animation_cases/balls_svg_animations" - }, - { - "duration": "26.597550686868686", - "name": "smoothness.tough_animation_cases/balls_svg_animations.html" - }, - { - "duration": "21.343014101010095", - "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200" - }, - { - "duration": "22.020698459016398", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes" - }, - { - "duration": "22.083971262626275", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316" - }, - { - "duration": "22.952134747474748", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "22.359438050505048", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "22.42862556565656", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "22.33996149494949", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "22.232475754098363", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style" - }, - { - "duration": "22.707320868852456", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element" - }, - { - "duration": "22.16799822950819", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element" - }, - { - "duration": "22.176333786885248", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class" - }, - { - "duration": "24.100041747474748", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "23.35224656565657", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "23.59784304040403", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "23.550403656565656", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "21.300982606557373", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations" - }, - { - "duration": "21.352403010101003", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "23.610044540983605", - "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style" - }, - { - "duration": "24.273761786885252", - "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element" - }, - { - "duration": "23.5560451147541", - "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element" - }, - { - "duration": "23.93363522222221", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "22.201258151515145", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "23.34559153535355", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "23.310823323232324", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "23.575668704918037", - "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class" - }, - { - "duration": "23.453082032786885", - "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style" - }, - { - "duration": "24.093794278688524", - "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element" - }, - { - "duration": "22.332709983606552", - "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element" - }, - { - "duration": "23.37103018032786", - "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class" - }, - { - "duration": "22.533571852459012", - "name": "smoothness.tough_animation_cases/css_transitions_inline_style" - }, - { - "duration": "23.259156983606555", - "name": "smoothness.tough_animation_cases/css_transitions_new_element" - }, - { - "duration": "23.372676656565666", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "22.69614324242424", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "22.715541161616162", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "22.561160545454534", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "22.355516030303033", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "22.712755676767678", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "22.83893402020201", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "22.80539458585859", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "22.765675655737706", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style" - }, - { - "duration": "22.564853245901634", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element" - }, - { - "duration": "22.75068975409835", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element" - }, - { - "duration": "22.41470508080808", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "22.35842371717172", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "22.550059090909095", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "22.49970381818182", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "22.78685416393442", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class" - }, - { - "duration": "22.64483332786886", - "name": "smoothness.tough_animation_cases/css_transitions_style_element" - }, - { - "duration": "22.651829590163928", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style" - }, - { - "duration": "22.432310721311477", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element" - }, - { - "duration": "22.505301868852452", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element" - }, - { - "duration": "22.76856439344262", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class" - }, - { - "duration": "22.64673163934427", - "name": "smoothness.tough_animation_cases/css_transitions_updating_class" - }, - { - "duration": "21.704338229508192", - "name": "smoothness.tough_animation_cases/css_value_type_color" - }, - { - "duration": "21.591275212121204", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316" - }, - { - "duration": "21.58429938383838", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316" - }, - { - "duration": "21.25076870491803", - "name": "smoothness.tough_animation_cases/css_value_type_filter" - }, - { - "duration": "21.213075878787883", - "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316" - }, - { - "duration": "21.47085027868853", - "name": "smoothness.tough_animation_cases/css_value_type_length" - }, - { - "duration": "21.28950224242425", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316" - }, - { - "duration": "21.378793010101017", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316" - }, - { - "duration": "21.81602663934426", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex" - }, - { - "duration": "21.741128161616164", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316" - }, - { - "duration": "21.800361777777773", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316" - }, - { - "duration": "21.80552524590165", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple" - }, - { - "duration": "21.814812707070704", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316" - }, - { - "duration": "21.76607248484849", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316" - }, - { - "duration": "21.843382000000002", - "name": "smoothness.tough_animation_cases/css_value_type_path" - }, - { - "duration": "21.668360090909086", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316" - }, - { - "duration": "21.68115701010101", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316" - }, - { - "duration": "21.093255442622944", - "name": "smoothness.tough_animation_cases/css_value_type_shadow" - }, - { - "duration": "20.95892668686868", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316" - }, - { - "duration": "20.898138292929293", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316" - }, - { - "duration": "21.37288601639345", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex" - }, - { - "duration": "21.297352010101005", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316" - }, - { - "duration": "21.361086353535356", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316" - }, - { - "duration": "21.49146072131148", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple" - }, - { - "duration": "21.48650625252525", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316" - }, - { - "duration": "21.542096949494955", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316" - }, - { - "duration": "21.179604016393437", - "name": "smoothness.tough_animation_cases/keyframed_animations" - }, - { - "duration": "21.16444153535355", - "name": "smoothness.tough_animation_cases/keyframed_animations.html" - }, - { - "duration": "21.068441163934427", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference" - }, - { - "duration": "20.978088626262632", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html" - }, - { - "duration": "21.02356952459016", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue" - }, - { - "duration": "21.0166183030303", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html" - }, - { - "duration": "21.983963295081967", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "20.83310868852459", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen" - }, - { - "duration": "20.870298393939397", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html" - }, - { - "duration": "21.98198574747475", - "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html" - }, - { - "duration": "27.327474363636362", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html" - }, - { - "duration": "27.89716124590164", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page" - }, - { - "duration": "21.987142080808084", - "name": "smoothness.tough_animation_cases/transform_transition_js_block.html" - }, - { - "duration": "20.940191786885247", - "name": "smoothness.tough_animation_cases/transform_transitions" - }, - { - "duration": "20.9394409090909", - "name": "smoothness.tough_animation_cases/transform_transitions.html" - }, - { - "duration": "21.949484999999996", - "name": "smoothness.tough_animation_cases/transform_transitions_js_block" - }, - { - "duration": "21.567496622950816", - "name": "smoothness.tough_animation_cases/web_animation_value_type_color" - }, - { - "duration": "21.487963852459007", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d" - }, - { - "duration": "21.7911168852459", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex" - }, - { - "duration": "21.813014000000003", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple" - }, - { - "duration": "21.780180508196732", - "name": "smoothness.tough_animation_cases/web_animation_value_type_path" - }, - { - "duration": "21.0838273114754", - "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow" - }, - { - "duration": "21.444138983606557", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex" - }, - { - "duration": "21.748571262295087", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple" - }, - { - "duration": "23.66700586885245", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes" - }, - { - "duration": "23.78068638383839", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316" - }, - { - "duration": "21.543867918032785", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time" - }, - { - "duration": "21.60836641414143", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316" - }, - { - "duration": "22.524585508196722", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous" - }, - { - "duration": "22.720181323232318", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316" - }, - { - "duration": "23.505437098360655", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining" - }, - { - "duration": "23.353811707070708", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316" - }, - { - "duration": "21.386591688524586", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations" - }, - { - "duration": "21.399232565656565", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "23.24874341414142", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316" - }, - { - "duration": "23.409907245901646", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page" - }, - { - "duration": "22.018705404040404", - "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html" - }, - { - "duration": "16.105503581967213", - "name": "smoothness.tough_canvas_cases/bouncing_balls_15" - }, - { - "duration": "17.28932118032787", - "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow" - }, - { - "duration": "16.051860098360653", - "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles" - }, - { - "duration": "15.649400016393441", - "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles" - }, - { - "duration": "15.525153090163935", - "name": "smoothness.tough_canvas_cases/bouncing_png_images" - }, - { - "duration": "22.835854540983604", - "name": "smoothness.tough_canvas_cases/bouncing_svg_images" - }, - { - "duration": "15.895966147540987", - "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear" - }, - { - "duration": "15.80449435245902", - "name": "smoothness.tough_canvas_cases/canvas_arcs" - }, - { - "duration": "15.616654877049179", - "name": "smoothness.tough_canvas_cases/canvas_font_cycler" - }, - { - "duration": "15.735745081967213", - "name": "smoothness.tough_canvas_cases/canvas_lines" - }, - { - "duration": "15.936453622950818", - "name": "smoothness.tough_canvas_cases/canvas_to_blob" - }, - { - "duration": "16.138249836065572", - "name": "smoothness.tough_canvas_cases/chip_tune" - }, - { - "duration": "16.349343655737705", - "name": "smoothness.tough_canvas_cases/crafty_mind" - }, - { - "duration": "16.084336631147544", - "name": "smoothness.tough_canvas_cases/effect_games" - }, - { - "duration": "15.630610270491806", - "name": "smoothness.tough_canvas_cases/fill_shapes" - }, - { - "duration": "22.03807560655738", - "name": "smoothness.tough_canvas_cases/geo_apis" - }, - { - "duration": "16.11863257377049", - "name": "smoothness.tough_canvas_cases/hakim" - }, - { - "duration": "22.211645585858573", - "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM" - }, - { - "duration": "16.232983545454555", - "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/" - }, - { - "duration": "16.39818360606061", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html" - }, - { - "duration": "16.47651023232323", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html" - }, - { - "duration": "15.828248590909089", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html" - }, - { - "duration": "17.71002109090909", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html" - }, - { - "duration": "16.561532848484845", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html" - }, - { - "duration": "16.286886555555554", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/" - }, - { - "duration": "16.001509656565656", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html" - }, - { - "duration": "16.98685219191919", - "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/" - }, - { - "duration": "16.067574818181814", - "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169" - }, - { - "duration": "15.701819767676767", - "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html" - }, - { - "duration": "15.878640116161616", - "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html" - }, - { - "duration": "15.970756161616164", - "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/" - }, - { - "duration": "16.159435075757578", - "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html" - }, - { - "duration": "16.334891929292922", - "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html" - }, - { - "duration": "16.157329565656564", - "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/" - }, - { - "duration": "16.281470419191916", - "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html" - }, - { - "duration": "15.856684000000003", - "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/" - }, - { - "duration": "16.354321050505053", - "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/" - }, - { - "duration": "16.985144721311467", - "name": "smoothness.tough_canvas_cases/jarro_doverson" - }, - { - "duration": "16.234797221311467", - "name": "smoothness.tough_canvas_cases/kevs_3d" - }, - { - "duration": "15.973522327868858", - "name": "smoothness.tough_canvas_cases/man_in_blue" - }, - { - "duration": "22.102537081967213", - "name": "smoothness.tough_canvas_cases/many_images" - }, - { - "duration": "15.95385218032787", - "name": "smoothness.tough_canvas_cases/megi_dish" - }, - { - "duration": "17.711289098360652", - "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt" - }, - { - "duration": "16.493513803278685", - "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank" - }, - { - "duration": "16.268253278688523", - "name": "smoothness.tough_canvas_cases/microsoft_snow" - }, - { - "duration": "15.853337098360658", - "name": "smoothness.tough_canvas_cases/microsoft_speed_reading" - }, - { - "duration": "16.289367631147538", - "name": "smoothness.tough_canvas_cases/microsoft_tweet_map" - }, - { - "duration": "16.35075617213115", - "name": "smoothness.tough_canvas_cases/microsoft_video_city" - }, - { - "duration": "15.776083418032787", - "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains" - }, - { - "duration": "16.115658991803276", - "name": "smoothness.tough_canvas_cases/mix_10k" - }, - { - "duration": "15.817121426229507", - "name": "smoothness.tough_canvas_cases/put_get_image_data" - }, - { - "duration": "15.825464983606556", - "name": "smoothness.tough_canvas_cases/runway" - }, - { - "duration": "16.180551254098365", - "name": "smoothness.tough_canvas_cases/smash_cat" - }, - { - "duration": "15.689207368852458", - "name": "smoothness.tough_canvas_cases/spielzeugz" - }, - { - "duration": "16.113895852459013", - "name": "smoothness.tough_canvas_cases/stroke_shapes" - }, - { - "duration": "16.10038631313131", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html" - }, - { - "duration": "15.780741131313123", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html" - }, - { - "duration": "17.43734721212121", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image" - }, - { - "duration": "16.112110808080804", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15" - }, - { - "duration": "15.964707287878785", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html" - }, - { - "duration": "16.146996626262617", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html" - }, - { - "duration": "15.85691740909091", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html" - }, - { - "duration": "15.618912782828282", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html" - }, - { - "duration": "23.098944424242422", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html" - }, - { - "duration": "15.89293042424242", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html" - }, - { - "duration": "15.847867282828279", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html" - }, - { - "duration": "15.873840070707063", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html" - }, - { - "duration": "15.870807106060607", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html" - }, - { - "duration": "16.11391834343435", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html" - }, - { - "duration": "21.345023229508197", - "name": "smoothness.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "21.162696704918034", - "name": "smoothness.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "24.441053295081964", - "name": "smoothness.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "25.979630672131137", - "name": "smoothness.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "16.190615245762718", - "name": "smoothness.tough_image_decode_cases/cats_unscaled" - }, - { - "duration": "10.54116988135593", - "name": "smoothness.tough_image_decode_cases/cats_viewport_width" - }, - { - "duration": "16.296360999999997", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html" - }, - { - "duration": "10.575817", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html" - }, - { - "duration": "26.831801852459034", - "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "31.684677295081965", - "name": "smoothness.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "20.92570716393442", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "21.056270688524588", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "17.146070540983605", - "name": "smoothness.tough_pinch_zoom_cases/amazon_pinch" - }, - { - "duration": "19.850274710526318", - "name": "smoothness.tough_pinch_zoom_cases/blogspot_pinch" - }, - { - "duration": "18.49401318032787", - "name": "smoothness.tough_pinch_zoom_cases/booking_pinch" - }, - { - "duration": "21.084434262295087", - "name": "smoothness.tough_pinch_zoom_cases/cnn_pinch" - }, - { - "duration": "18.379349803278693", - "name": "smoothness.tough_pinch_zoom_cases/ebay_pinch" - }, - { - "duration": "20.200942409836053", - "name": "smoothness.tough_pinch_zoom_cases/espn_pinch" - }, - { - "duration": "17.63264106557377", - "name": "smoothness.tough_pinch_zoom_cases/facebook_pinch" - }, - { - "duration": "21.4984471147541", - "name": "smoothness.tough_pinch_zoom_cases/gmail_pinch" - }, - { - "duration": "20.04281475409835", - "name": "smoothness.tough_pinch_zoom_cases/google_calendar_pinch" - }, - { - "duration": "18.136763098360667", - "name": "smoothness.tough_pinch_zoom_cases/google_image_pinch" - }, - { - "duration": "23.29388478688525", - "name": "smoothness.tough_pinch_zoom_cases/google_search_pinch" - }, - { - "duration": "17.182486180327864", - "name": "smoothness.tough_pinch_zoom_cases/linkedin_pinch" - }, - { - "duration": "19.469438524590164", - "name": "smoothness.tough_pinch_zoom_cases/twitter_pinch" - }, - { - "duration": "23.2429231147541", - "name": "smoothness.tough_pinch_zoom_cases/weather_pinch" - }, - { - "duration": "23.956703868852465", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_games_pinch" - }, - { - "duration": "21.698386409836072", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_news_pinch" - }, - { - "duration": "24.05364109836066", - "name": "smoothness.tough_pinch_zoom_cases/yahoo_sports_pinch" - }, - { - "duration": "19.869200295081964", - "name": "smoothness.tough_pinch_zoom_cases/youtube_pinch" - }, - { - "duration": "18.847303540983606", - "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "18.966237606557375", - "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "18.829337442622954", - "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "18.8945316557377", - "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "18.831891114754093", - "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "22.047175098360658", - "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "16.157517475409836", - "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "15.142000122950817", - "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "14.368170516393441", - "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "13.655936918032785", - "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "24.06814372131148", - "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "19.860441967213116", - "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "19.96723924590164", - "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "19.933946262295077", - "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "19.913688163934424", - "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "18.18256631147541", - "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "16.56473468852459", - "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "15.486981516393447", - "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "14.515805024590163", - "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "13.883499098360659", - "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "18.36990908196722", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "18.42711316393443", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "18.318384360655735", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "18.366071901639344", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "18.465494442622962", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "17.83910228333333", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "16.4680272295082", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "15.51992467213115", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "14.494020770491804", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "13.936371377049179", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "17.633219672131148", - "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "17.790567606557378", - "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "17.757097770491804", - "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "17.85748234426229", - "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "17.76425598360656", - "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "16.546033532786886", - "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "15.175983098360652", - "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "14.473115811475411", - "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "13.628749483606551", - "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "13.192075713114756", - "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "27.354231813559316", - "name": "smoothness.tough_texture_upload_cases/background_color_animation" - }, - { - "duration": "21.746200068965514", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient" - }, - { - "duration": "21.782055120689655", - "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads" - }, - { - "duration": "21.037732224137937", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads" - }, - { - "duration": "21.57695798275862", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads" - }, - { - "duration": "21.706344499999997", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads" - }, - { - "duration": "27.06156842622951", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html" - }, - { - "duration": "22.392097396551723", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html" - }, - { - "duration": "22.42507820689655", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html" - }, - { - "duration": "22.395451568965512", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html" - }, - { - "duration": "22.401603122807018", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html" - }, - { - "duration": "22.390622849999996", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html" - }, - { - "duration": "22.38537755932203", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html" - }, - { - "duration": "22.38091410526316", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html" - }, - { - "duration": "22.393001050847456", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html" - }, - { - "duration": "22.443340288135595", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html" - }, - { - "duration": "22.47187273333334", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html" - }, - { - "duration": "4.368507578688524", - "name": "smoothness.tough_webgl_cases/animometer_webgl" - }, - { - "duration": "4.3792165770491795", - "name": "smoothness.tough_webgl_cases/aquarium" - }, - { - "duration": "4.382426836065574", - "name": "smoothness.tough_webgl_cases/aquarium_20k" - }, - { - "duration": "4.3809500852459005", - "name": "smoothness.tough_webgl_cases/blob" - }, - { - "duration": "4.374934229508197", - "name": "smoothness.tough_webgl_cases/dynamic_cube_map" - }, - { - "duration": "4.394998470491803", - "name": "smoothness.tough_webgl_cases/earth" - }, - { - "duration": "4.366718270491802", - "name": "smoothness.tough_webgl_cases/many_planets_deep" - }, - { - "duration": "9.553684991803278", - "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object" - }, - { - "duration": "4.373657596721311", - "name": "smoothness.tough_webgl_cases/particles" - }, - { - "duration": "4.3852163", - "name": "smoothness.tough_webgl_cases/san_angeles" - }, - { - "duration": "34.003356393442616", - "name": "speedometer-future/http://browserbench.org/Speedometer/" - }, - { - "duration": "33.654974033333325", - "name": "speedometer/http://browserbench.org/Speedometer/" - }, - { - "duration": "58.918045393442625", - "name": "speedometer2-future/Speedometer2" - }, - { - "duration": "57.894307721311485", - "name": "speedometer2/Speedometer2" - }, - { - "duration": "149.79887113114754", - "name": "start_with_url.cold.startup_pages/about:blank" - }, - { - "duration": "147.23244632786884", - "name": "start_with_url.cold.startup_pages/http://bbc.co.uk" - }, - { - "duration": "319.07762895081964", - "name": "start_with_url.warm.startup_pages/about:blank" - }, - { - "duration": "322.5786071311477", - "name": "start_with_url.warm.startup_pages/http://bbc.co.uk" - }, - { - "duration": "24.974968999999994", - "name": "system_health.common_mobile/background:media:imgur" - }, - { - "duration": "25.595931166666666", - "name": "system_health.common_mobile/background:search:google" - }, - { - "duration": "36.92547301639344", - "name": "system_health.common_mobile/background:social:facebook" - }, - { - "duration": "38.616953366666664", - "name": "system_health.common_mobile/background:tools:gmail" - }, - { - "duration": "94.44720266666668", - "name": "system_health.common_mobile/browse:chrome:newtab" - }, - { - "duration": "34.010893499999995", - "name": "system_health.common_mobile/browse:chrome:omnibox" - }, - { - "duration": "102.79069728333334", - "name": "system_health.common_mobile/browse:media:facebook_photos" - }, - { - "duration": "64.71095096666664", - "name": "system_health.common_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "96.16659753333337", - "name": "system_health.common_mobile/browse:media:imgur" - }, - { - "duration": "118.95419955000001", - "name": "system_health.common_mobile/browse:media:youtube" - }, - { - "duration": "118.12141295", - "name": "system_health.common_mobile/browse:news:cnn" - }, - { - "duration": "75.36605991666667", - "name": "system_health.common_mobile/browse:news:cricbuzz" - }, - { - "duration": "70.0767844", - "name": "system_health.common_mobile/browse:news:qq" - }, - { - "duration": "62.60237110000002", - "name": "system_health.common_mobile/browse:news:reddit" - }, - { - "duration": "70.11665231666669", - "name": "system_health.common_mobile/browse:news:washingtonpost" - }, - { - "duration": "91.54142686666663", - "name": "system_health.common_mobile/browse:shopping:amazon" - }, - { - "duration": "86.33546050000001", - "name": "system_health.common_mobile/browse:shopping:avito" - }, - { - "duration": "44.1969528", - "name": "system_health.common_mobile/browse:shopping:lazada" - }, - { - "duration": "90.92550580000002", - "name": "system_health.common_mobile/browse:social:facebook" - }, - { - "duration": "248.16756949999998", - "name": "system_health.common_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "112.03981985", - "name": "system_health.common_mobile/browse:social:instagram" - }, - { - "duration": "110.19963486666671", - "name": "system_health.common_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "137.20686766666668", - "name": "system_health.common_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "67.09152128333332", - "name": "system_health.common_mobile/browse:social:twitter" - }, - { - "duration": "94.99666576666665", - "name": "system_health.common_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "58.435897266666665", - "name": "system_health.common_mobile/browse:tools:maps" - }, - { - "duration": "21.540348583333333", - "name": "system_health.common_mobile/load:chrome:blank" - }, - { - "duration": "27.254568100000007", - "name": "system_health.common_mobile/load:games:bubbles" - }, - { - "duration": "21.926923833333337", - "name": "system_health.common_mobile/load:games:lazors" - }, - { - "duration": "25.923831266666657", - "name": "system_health.common_mobile/load:media:dailymotion" - }, - { - "duration": "24.881356949999997", - "name": "system_health.common_mobile/load:media:facebook_photos" - }, - { - "duration": "24.242558449999997", - "name": "system_health.common_mobile/load:media:google_images" - }, - { - "duration": "25.042856083333337", - "name": "system_health.common_mobile/load:media:imgur" - }, - { - "duration": "24.18735763333334", - "name": "system_health.common_mobile/load:media:soundcloud" - }, - { - "duration": "24.020248750000004", - "name": "system_health.common_mobile/load:media:youtube" - }, - { - "duration": "38.90185256666667", - "name": "system_health.common_mobile/load:news:cnn" - }, - { - "duration": "29.061695499999995", - "name": "system_health.common_mobile/load:news:irctc" - }, - { - "duration": "28.09110954999999", - "name": "system_health.common_mobile/load:news:nytimes" - }, - { - "duration": "24.00289666666666", - "name": "system_health.common_mobile/load:news:qq" - }, - { - "duration": "24.346915949999996", - "name": "system_health.common_mobile/load:news:reddit" - }, - { - "duration": "27.996436616666657", - "name": "system_health.common_mobile/load:news:washingtonpost" - }, - { - "duration": "24.291215083333334", - "name": "system_health.common_mobile/load:news:wikipedia" - }, - { - "duration": "23.708367866666663", - "name": "system_health.common_mobile/load:search:baidu" - }, - { - "duration": "25.024297316666665", - "name": "system_health.common_mobile/load:search:ebay" - }, - { - "duration": "22.7154981", - "name": "system_health.common_mobile/load:search:google" - }, - { - "duration": "24.73392836666667", - "name": "system_health.common_mobile/load:search:taobao" - }, - { - "duration": "22.765068466666662", - "name": "system_health.common_mobile/load:search:yahoo" - }, - { - "duration": "23.097653766666667", - "name": "system_health.common_mobile/load:search:yandex" - }, - { - "duration": "23.656330433333334", - "name": "system_health.common_mobile/load:social:twitter" - }, - { - "duration": "22.963096716666666", - "name": "system_health.common_mobile/load:tools:docs" - }, - { - "duration": "29.37227408333334", - "name": "system_health.common_mobile/load:tools:drive" - }, - { - "duration": "26.37017631666668", - "name": "system_health.common_mobile/load:tools:dropbox" - }, - { - "duration": "24.112650999999993", - "name": "system_health.common_mobile/load:tools:stackoverflow" - }, - { - "duration": "29.871860683333338", - "name": "system_health.common_mobile/load:tools:weather" - }, - { - "duration": "137.63500200000001", - "name": "system_health.common_mobile/long_running:tools:gmail-background" - }, - { - "duration": "135.997162", - "name": "system_health.common_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "69.03044967213118", - "name": "system_health.memory_mobile/background:media:imgur" - }, - { - "duration": "71.42083867213114", - "name": "system_health.memory_mobile/background:search:google" - }, - { - "duration": "74.95382201639342", - "name": "system_health.memory_mobile/background:social:facebook" - }, - { - "duration": "88.00619837704916", - "name": "system_health.memory_mobile/background:tools:gmail" - }, - { - "duration": "228.70283788333327", - "name": "system_health.memory_mobile/browse:chrome:newtab" - }, - { - "duration": "90.45646471666669", - "name": "system_health.memory_mobile/browse:chrome:omnibox" - }, - { - "duration": "220.74425631147543", - "name": "system_health.memory_mobile/browse:media:facebook_photos" - }, - { - "duration": "133.66095613333337", - "name": "system_health.memory_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "206.38325358333324", - "name": "system_health.memory_mobile/browse:media:imgur" - }, - { - "duration": "240.9389626166667", - "name": "system_health.memory_mobile/browse:media:youtube" - }, - { - "duration": "168.6971696885246", - "name": "system_health.memory_mobile/browse:news:cnn" - }, - { - "duration": "149.61992381967212", - "name": "system_health.memory_mobile/browse:news:cricbuzz" - }, - { - "duration": "143.87965306666663", - "name": "system_health.memory_mobile/browse:news:qq" - }, - { - "duration": "144.53127243333333", - "name": "system_health.memory_mobile/browse:news:reddit" - }, - { - "duration": "140.8670915333333", - "name": "system_health.memory_mobile/browse:news:washingtonpost" - }, - { - "duration": "151.60782647540987", - "name": "system_health.memory_mobile/browse:shopping:amazon" - }, - { - "duration": "158.2903343389831", - "name": "system_health.memory_mobile/browse:shopping:avito" - }, - { - "duration": "92.204626852459", - "name": "system_health.memory_mobile/browse:shopping:lazada" - }, - { - "duration": "179.06597370491806", - "name": "system_health.memory_mobile/browse:social:facebook" - }, - { - "duration": "230.48076523333341", - "name": "system_health.memory_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "253.41301766666678", - "name": "system_health.memory_mobile/browse:social:instagram" - }, - { - "duration": "209.26540096666662", - "name": "system_health.memory_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "208.02696093333333", - "name": "system_health.memory_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "143.8900781", - "name": "system_health.memory_mobile/browse:social:twitter" - }, - { - "duration": "166.71923127868848", - "name": "system_health.memory_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "130.56581421666667", - "name": "system_health.memory_mobile/browse:tools:maps" - }, - { - "duration": "72.90530713114755", - "name": "system_health.memory_mobile/load:chrome:blank" - }, - { - "duration": "64.62599843333332", - "name": "system_health.memory_mobile/load:games:bubbles" - }, - { - "duration": "65.29436446666668", - "name": "system_health.memory_mobile/load:games:lazors" - }, - { - "duration": "79.31413863333334", - "name": "system_health.memory_mobile/load:games:spychase" - }, - { - "duration": "71.02942026666668", - "name": "system_health.memory_mobile/load:media:dailymotion" - }, - { - "duration": "68.52481141666667", - "name": "system_health.memory_mobile/load:media:facebook_photos" - }, - { - "duration": "67.78902611666666", - "name": "system_health.memory_mobile/load:media:google_images" - }, - { - "duration": "66.746272", - "name": "system_health.memory_mobile/load:media:imgur" - }, - { - "duration": "67.90991743333333", - "name": "system_health.memory_mobile/load:media:soundcloud" - }, - { - "duration": "68.60652006666668", - "name": "system_health.memory_mobile/load:media:youtube" - }, - { - "duration": "81.14658734999998", - "name": "system_health.memory_mobile/load:news:cnn" - }, - { - "duration": "67.90061683333334", - "name": "system_health.memory_mobile/load:news:irctc" - }, - { - "duration": "71.87558824999999", - "name": "system_health.memory_mobile/load:news:nytimes" - }, - { - "duration": "67.39154025", - "name": "system_health.memory_mobile/load:news:qq" - }, - { - "duration": "68.88368848333333", - "name": "system_health.memory_mobile/load:news:reddit" - }, - { - "duration": "69.72707446666668", - "name": "system_health.memory_mobile/load:news:washingtonpost" - }, - { - "duration": "69.26048315000001", - "name": "system_health.memory_mobile/load:news:wikipedia" - }, - { - "duration": "67.42002770000002", - "name": "system_health.memory_mobile/load:search:baidu" - }, - { - "duration": "66.47678118333333", - "name": "system_health.memory_mobile/load:search:ebay" - }, - { - "duration": "65.79356139999999", - "name": "system_health.memory_mobile/load:search:google" - }, - { - "duration": "67.67027786666667", - "name": "system_health.memory_mobile/load:search:taobao" - }, - { - "duration": "66.84180556666665", - "name": "system_health.memory_mobile/load:search:yahoo" - }, - { - "duration": "66.70497881666667", - "name": "system_health.memory_mobile/load:search:yandex" - }, - { - "duration": "66.95931826666667", - "name": "system_health.memory_mobile/load:social:twitter" - }, - { - "duration": "67.10365841666666", - "name": "system_health.memory_mobile/load:tools:docs" - }, - { - "duration": "70.41736001666668", - "name": "system_health.memory_mobile/load:tools:drive" - }, - { - "duration": "69.28514498333334", - "name": "system_health.memory_mobile/load:tools:dropbox" - }, - { - "duration": "68.54638874999999", - "name": "system_health.memory_mobile/load:tools:stackoverflow" - }, - { - "duration": "73.36293383333333", - "name": "system_health.memory_mobile/load:tools:weather" - }, - { - "duration": "882.0575373333334", - "name": "system_health.memory_mobile/long_running:tools:gmail-background" - }, - { - "duration": "743.9074793333333", - "name": "system_health.memory_mobile/long_running:tools:gmail-foreground" - }, - { - "duration": "35.79984774747476", - "name": "thread_times.key_idle_power_cases/animated-gif.html" - }, - { - "duration": "42.88722106060608", - "name": "thread_times.key_idle_power_cases/blank.html" - }, - { - "duration": "37.08725779797979", - "name": "thread_times.key_idle_power_cases/css-animation.html" - }, - { - "duration": "40.58842495959595", - "name": "thread_times.key_idle_power_cases/request-animation-frame.html" - }, - { - "duration": "37.88519412121212", - "name": "thread_times.key_idle_power_cases/set-timeout.html" - }, - { - "duration": "107.98949859595956", - "name": "thread_times.key_idle_power_cases/set-timeout.html (Long Idle)" - }, - { - "duration": "34.3025540909091", - "name": "thread_times.key_mobile_sites_smooth/boingboing" - }, - { - "duration": "32.76085289898991", - "name": "thread_times.key_mobile_sites_smooth/cuteoverload" - }, - { - "duration": "33.86383571717172", - "name": "thread_times.key_mobile_sites_smooth/nytimes" - }, - { - "duration": "26.162444696969708", - "name": "thread_times.key_mobile_sites_smooth/reddit" - }, - { - "duration": "24.492774050505044", - "name": "thread_times.key_mobile_sites_smooth/slashdot" - }, - { - "duration": "27.06468106060606", - "name": "thread_times.key_noop_cases/no_op_raf.html" - }, - { - "duration": "18.66574421212121", - "name": "thread_times.key_noop_cases/no_op_scroll.html" - }, - { - "duration": "16.409880343434345", - "name": "thread_times.key_noop_cases/no_op_settimeout.html" - }, - { - "duration": "21.924679494949487", - "name": "thread_times.key_noop_cases/no_op_touch_handler.html" - }, - { - "duration": "17.999973836065575", - "name": "thread_times.key_silk_cases/card_expansion" - }, - { - "duration": "19.75223260655737", - "name": "thread_times.key_silk_cases/card_expansion_animated" - }, - { - "duration": "19.472481147540986", - "name": "thread_times.key_silk_cases/card_expansion_images_text" - }, - { - "duration": "18.078055622950817", - "name": "thread_times.key_silk_cases/card_flying" - }, - { - "duration": "18.715183967213108", - "name": "thread_times.key_silk_cases/coordinated_animation" - }, - { - "duration": "17.75132306557377", - "name": "thread_times.key_silk_cases/font_wipe" - }, - { - "duration": "17.744295808080818", - "name": "thread_times.key_silk_cases/font_wipe.html" - }, - { - "duration": "21.50892396721312", - "name": "thread_times.key_silk_cases/google_news_ios" - }, - { - "duration": "18.357626032786882", - "name": "thread_times.key_silk_cases/gws_boogie_expansion" - }, - { - "duration": "18.89722509836066", - "name": "thread_times.key_silk_cases/gws_google_expansion" - }, - { - "duration": "19.210452278688518", - "name": "thread_times.key_silk_cases/horizontal_vertical_expansion" - }, - { - "duration": "32.41806385858585", - "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/list-recycle-transform.html" - }, - { - "duration": "17.064412313131317", - "name": "thread_times.key_silk_cases/http://groupcloned.com/test/plain/sticky-using-webkit-backface-visibility.html" - }, - { - "duration": "14.458769035353551", - "name": "thread_times.key_silk_cases/http://jsbin.com/UVIgUTa/38/quiet" - }, - { - "duration": "18.46020021212122", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/15/show/" - }, - { - "duration": "18.0857585959596", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/3yDKh/16/show/" - }, - { - "duration": "18.66951686868687", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/R8DX9/4/show/" - }, - { - "duration": "19.552565777777783", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/TLXLu/3/show/" - }, - { - "duration": "19.542680515151517", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/bNp2h/3/show/" - }, - { - "duration": "20.312292262626265", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/cKB9D/7/show/" - }, - { - "duration": "20.243373202020205", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/jx5De/14/show/" - }, - { - "duration": "18.522802545454542", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/rF9Gh/7/show/" - }, - { - "duration": "18.74329997979798", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/ugkd4/10/show/" - }, - { - "duration": "20.58765239393939", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/vBQHH/11/show/" - }, - { - "duration": "18.32988457575758", - "name": "thread_times.key_silk_cases/http://jsfiddle.net/xLuvC/1/show/" - }, - { - "duration": "21.54538492929293", - "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?scroll" - }, - { - "duration": "15.727110186868687", - "name": "thread_times.key_silk_cases/http://mobile-news.sandbox.google.com/news/pt0?swipe" - }, - { - "duration": "30.1632374040404", - "name": "thread_times.key_silk_cases/http://wiltzius.github.io/shape-shifter/" - }, - { - "duration": "18.845124777777773", - "name": "thread_times.key_silk_cases/http://www.google.com/#q=google" - }, - { - "duration": "18.277203818181828", - "name": "thread_times.key_silk_cases/https://www.google.com/search?hl=en&q=define%3Aboogie" - }, - { - "duration": "33.10727125252527", - "name": "thread_times.key_silk_cases/inbox_app.html?stress_hidey_bars" - }, - { - "duration": "22.397924252525254", - "name": "thread_times.key_silk_cases/inbox_app.html?toggle_drawer" - }, - { - "duration": "28.995927524590165", - "name": "thread_times.key_silk_cases/infinite_scrolling" - }, - { - "duration": "29.16774575757576", - "name": "thread_times.key_silk_cases/infinite_scrolling.html" - }, - { - "duration": "15.610924926229501", - "name": "thread_times.key_silk_cases/list_animation_simple" - }, - { - "duration": "15.846582843434346", - "name": "thread_times.key_silk_cases/list_animation_simple.html" - }, - { - "duration": "32.40474127868853", - "name": "thread_times.key_silk_cases/list_recycle_transform" - }, - { - "duration": "19.10130004918033", - "name": "thread_times.key_silk_cases/mask_transition_animation" - }, - { - "duration": "15.877968327868858", - "name": "thread_times.key_silk_cases/mobile_news_sandbox" - }, - { - "duration": "20.373808196721313", - "name": "thread_times.key_silk_cases/parallax_effect" - }, - { - "duration": "14.504173442622951", - "name": "thread_times.key_silk_cases/physical_simulation" - }, - { - "duration": "20.409190313131322", - "name": "thread_times.key_silk_cases/pushState.html" - }, - { - "duration": "29.045594967213116", - "name": "thread_times.key_silk_cases/silk_finance" - }, - { - "duration": "29.623334151515152", - "name": "thread_times.key_silk_cases/silk_finance.html" - }, - { - "duration": "16.9895437704918", - "name": "thread_times.key_silk_cases/sticky_using_webkit" - }, - { - "duration": "32.90224080327868", - "name": "thread_times.key_silk_cases/stress_hidey_bars" - }, - { - "duration": "30.270459868852456", - "name": "thread_times.key_silk_cases/svg_icon_raster" - }, - { - "duration": "18.311246688524587", - "name": "thread_times.key_silk_cases/swipe_to_dismiss" - }, - { - "duration": "22.519694803278693", - "name": "thread_times.key_silk_cases/toggle_drawer" - }, - { - "duration": "20.24437518032787", - "name": "thread_times.key_silk_cases/update_history_state" - }, - { - "duration": "20.346623163934428", - "name": "thread_times.key_silk_cases/vertical_expansion" - }, - { - "duration": "18.589314819672136", - "name": "thread_times.key_silk_cases/zoom_in_animation" - }, - { - "duration": "39.29848354545454", - "name": "thread_times.simple_mobile_sites/ebay_scroll" - }, - { - "duration": "30.682887343434345", - "name": "thread_times.simple_mobile_sites/flickr_scroll" - }, - { - "duration": "31.54496540404039", - "name": "thread_times.simple_mobile_sites/http://m.nytimes.com/" - }, - { - "duration": "39.561392040404044", - "name": "thread_times.simple_mobile_sites/http://www.ebay.co.uk/" - }, - { - "duration": "33.5069418282828", - "name": "thread_times.simple_mobile_sites/http://www.nyc.gov" - }, - { - "duration": "30.465235626262622", - "name": "thread_times.simple_mobile_sites/https://www.flickr.com/" - }, - { - "duration": "33.76200130303029", - "name": "thread_times.simple_mobile_sites/nyc_gov_scroll" - }, - { - "duration": "31.59959693939394", - "name": "thread_times.simple_mobile_sites/nytimes_scroll" - }, - { - "duration": "35.56198336065574", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION" - }, - { - "duration": "32.15435601639345", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS" - }, - { - "duration": "27.013010245901647", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE" - }, - { - "duration": "29.97447018032787", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE" - }, - { - "duration": "29.44411008196722", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID" - }, - { - "duration": "33.50462498360656", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY" - }, - { - "duration": "29.37349708196722", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY" - }, - { - "duration": "28.84416409836066", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID" - }, - { - "duration": "27.928630836065576", - "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "40.19413134426229", - "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "25.449655737704912", - "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "22.69886003278689", - "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "22.775494590163934", - "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "21.000251540983612", - "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "19.20413249180328", - "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "17.739757278688526", - "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "16.590688901639343", - "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "15.686084057377043", - "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "28.419994983606554", - "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "24.994728508196726", - "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "25.455224770491803", - "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "25.8692473442623", - "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "26.452714475409838", - "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "23.857618131147536", - "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "20.83381818032787", - "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "19.254617180327866", - "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "18.028861098360657", - "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "16.625232409836066", - "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "22.362297688524592", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "22.801194196721312", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "23.058994983606556", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "23.348151688524588", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "23.440361967213118", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "22.339080442622947", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "19.80756396721312", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "17.981644180327873", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "16.309696885245902", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "15.18703783606557", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "17.909988754098357", - "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "18.327462081967216", - "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "18.443906344262295", - "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "18.556158868852464", - "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "18.743114557377048", - "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "17.228211786885243", - "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "15.593335721311469", - "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "14.843192024590161", - "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "13.919484139344265", - "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "13.259781483606556", - "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "11.62648680327869", - "name": "tracing.tracing_with_background_memory_infra/Facebook" - }, - { - "duration": "12.268152721311475", - "name": "tracing.tracing_with_background_memory_infra/Wikipedia" - }, - { - "duration": "10.378211418032787", - "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com" - }, - { - "duration": "10.544552270491808", - "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/" - }, - { - "duration": "10.287894295081967", - "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/" - }, - { - "duration": "10.545187467213117", - "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/" - }, - { - "duration": "13.037905959016394", - "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com" - }, - { - "duration": "16.039089139344263", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "13.429725614754101", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/" - }, - { - "duration": "105.41662453333336", - "name": "v8.browsing_mobile-future/browse:chrome:newtab" - }, - { - "duration": "38.94349348333334", - "name": "v8.browsing_mobile-future/browse:chrome:omnibox" - }, - { - "duration": "123.86885229508202", - "name": "v8.browsing_mobile-future/browse:media:facebook_photos" - }, - { - "duration": "78.73990490000003", - "name": "v8.browsing_mobile-future/browse:media:flickr_infinite_scroll" - }, - { - "duration": "123.45371616666667", - "name": "v8.browsing_mobile-future/browse:media:imgur" - }, - { - "duration": "134.32480450000006", - "name": "v8.browsing_mobile-future/browse:media:youtube" - }, - { - "duration": "178.66558918032794", - "name": "v8.browsing_mobile-future/browse:news:cnn" - }, - { - "duration": "96.6198143833333", - "name": "v8.browsing_mobile-future/browse:news:cricbuzz" - }, - { - "duration": "82.94377130508472", - "name": "v8.browsing_mobile-future/browse:news:qq" - }, - { - "duration": "73.82486696666668", - "name": "v8.browsing_mobile-future/browse:news:reddit" - }, - { - "duration": "88.8525413", - "name": "v8.browsing_mobile-future/browse:news:washingtonpost" - }, - { - "duration": "126.61729618032788", - "name": "v8.browsing_mobile-future/browse:shopping:amazon" - }, - { - "duration": "112.14767894999997", - "name": "v8.browsing_mobile-future/browse:shopping:avito" - }, - { - "duration": "53.97795329508197", - "name": "v8.browsing_mobile-future/browse:shopping:lazada" - }, - { - "duration": "116.932776147541", - "name": "v8.browsing_mobile-future/browse:social:facebook" - }, - { - "duration": "346.3331828333333", - "name": "v8.browsing_mobile-future/browse:social:facebook_infinite_scroll" - }, - { - "duration": "137.20034833333338", - "name": "v8.browsing_mobile-future/browse:social:instagram" - }, - { - "duration": "147.67553700000005", - "name": "v8.browsing_mobile-future/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "168.0231745", - "name": "v8.browsing_mobile-future/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "77.82194965000004", - "name": "v8.browsing_mobile-future/browse:social:twitter" - }, - { - "duration": "123.03254488524593", - "name": "v8.browsing_mobile-future/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "76.34013451666665", - "name": "v8.browsing_mobile-future/browse:tools:maps" - }, - { - "duration": "105.47530078947368", - "name": "v8.browsing_mobile/browse:chrome:newtab" - }, - { - "duration": "38.530946767857145", - "name": "v8.browsing_mobile/browse:chrome:omnibox" - }, - { - "duration": "124.42940463934427", - "name": "v8.browsing_mobile/browse:media:facebook_photos" - }, - { - "duration": "78.50806563793105", - "name": "v8.browsing_mobile/browse:media:flickr_infinite_scroll" - }, - { - "duration": "123.84028077586207", - "name": "v8.browsing_mobile/browse:media:imgur" - }, - { - "duration": "132.47249980392155", - "name": "v8.browsing_mobile/browse:media:youtube" - }, - { - "duration": "179.8774849180328", - "name": "v8.browsing_mobile/browse:news:cnn" - }, - { - "duration": "93.89134496610167", - "name": "v8.browsing_mobile/browse:news:cricbuzz" - }, - { - "duration": "82.70660055357145", - "name": "v8.browsing_mobile/browse:news:qq" - }, - { - "duration": "73.51167000000001", - "name": "v8.browsing_mobile/browse:news:reddit" - }, - { - "duration": "88.70962062745097", - "name": "v8.browsing_mobile/browse:news:washingtonpost" - }, - { - "duration": "123.76626196721311", - "name": "v8.browsing_mobile/browse:shopping:amazon" - }, - { - "duration": "112.45641118032789", - "name": "v8.browsing_mobile/browse:shopping:avito" - }, - { - "duration": "54.440948147540965", - "name": "v8.browsing_mobile/browse:shopping:lazada" - }, - { - "duration": "117.23906829508196", - "name": "v8.browsing_mobile/browse:social:facebook" - }, - { - "duration": "347.31532147540975", - "name": "v8.browsing_mobile/browse:social:facebook_infinite_scroll" - }, - { - "duration": "135.43384913793105", - "name": "v8.browsing_mobile/browse:social:instagram" - }, - { - "duration": "147.1208457142857", - "name": "v8.browsing_mobile/browse:social:pinterest_infinite_scroll" - }, - { - "duration": "167.05851574074075", - "name": "v8.browsing_mobile/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "77.42943426923078", - "name": "v8.browsing_mobile/browse:social:twitter" - }, - { - "duration": "122.23090967213116", - "name": "v8.browsing_mobile/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "76.53326107017546", - "name": "v8.browsing_mobile/browse:tools:maps" - }, - { - "duration": "27.498429590163944", - "name": "wasm/AsmJsZenGarden" - }, - { - "duration": "64.15932316393443", - "name": "wasm/WasmSpaceBuggy" - }, - { - "duration": "27.54625806557376", - "name": "wasm/WasmStylizedRenderer" - }, - { - "duration": "27.556006065573772", - "name": "wasm/WasmSunTemple" - }, - { - "duration": "48.98831089344265", - "name": "wasm/WasmTanks" - }, - { - "duration": "27.51685060655738", - "name": "wasm/WasmZenGarden" - }, - { - "duration": "21.52393575409837", - "name": "webrtc/10s_datachannel_transfer" - }, - { - "duration": "27.097270950819677", - "name": "webrtc/canvas_capture_peer_connection" - }, - { - "duration": "37.32259072131148", - "name": "webrtc/codec_constraints_h264" - }, - { - "duration": "37.41315247540984", - "name": "webrtc/codec_constraints_vp8" - }, - { - "duration": "37.29322452459017", - "name": "webrtc/codec_constraints_vp9" - }, - { - "duration": "23.59042208196722", - "name": "webrtc/hd_local_stream_10s" - }, - { - "duration": "44.92994696721313", - "name": "webrtc/multiple_peerconnections" - }, - { - "duration": "67.37556847540985", - "name": "webrtc/pause_play_peerconnections" - } -] \ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/pixel2_webview_story_timing.json b/tools/perf/core/shard_maps/timing_data/pixel2_webview_story_timing.json deleted file mode 100644 index 0637a08..0000000 --- a/tools/perf/core/shard_maps/timing_data/pixel2_webview_story_timing.json +++ /dev/null
@@ -1 +0,0 @@ -[] \ No newline at end of file
diff --git a/tools/perf/core/shard_maps/timing_data/win10_highdpi_story_timing.json b/tools/perf/core/shard_maps/timing_data/win10_highdpi_story_timing.json deleted file mode 100644 index 926fb67..0000000 --- a/tools/perf/core/shard_maps/timing_data/win10_highdpi_story_timing.json +++ /dev/null
@@ -1,5694 +0,0 @@ -[ - { - "duration": "11.850393969696968", - "name": "blink_perf.bindings/append-child.html" - }, - { - "duration": "7.503030305050504", - "name": "blink_perf.bindings/create-element.html" - }, - { - "duration": "7.061232335353535", - "name": "blink_perf.bindings/document-implementation.html" - }, - { - "duration": "6.992949510101012", - "name": "blink_perf.bindings/dom-attribute-on-prototoype.html" - }, - { - "duration": "7.347151497979796", - "name": "blink_perf.bindings/first-child.html" - }, - { - "duration": "4.708414115151515", - "name": "blink_perf.bindings/gc-forest.html" - }, - { - "duration": "5.545252526262629", - "name": "blink_perf.bindings/gc-mini-tree.html" - }, - { - "duration": "18.99659595454546", - "name": "blink_perf.bindings/gc-tree.html" - }, - { - "duration": "7.001585893939394", - "name": "blink_perf.bindings/get-attribute-rare.html" - }, - { - "duration": "6.866464659595958", - "name": "blink_perf.bindings/get-attribute.html" - }, - { - "duration": "7.143535341414144", - "name": "blink_perf.bindings/get-element-by-id.html" - }, - { - "duration": "7.149494988888891", - "name": "blink_perf.bindings/get-elements-by-tag-name.html" - }, - { - "duration": "7.219333329292931", - "name": "blink_perf.bindings/id-getter.html" - }, - { - "duration": "7.05094947878788", - "name": "blink_perf.bindings/id-setter.html" - }, - { - "duration": "7.556878797979798", - "name": "blink_perf.bindings/indexed-getter.html" - }, - { - "duration": "7.310131305050505", - "name": "blink_perf.bindings/insert-before.html" - }, - { - "duration": "6.887939412121213", - "name": "blink_perf.bindings/named-property-enumerator.html" - }, - { - "duration": "27.610999989898996", - "name": "blink_perf.bindings/node-list-access.html" - }, - { - "duration": "7.26337376060606", - "name": "blink_perf.bindings/node-type.html" - }, - { - "duration": "1.7968686828282827", - "name": "blink_perf.bindings/post-message.html" - }, - { - "duration": "7.661717124242425", - "name": "blink_perf.bindings/sequence-conversion-array.html" - }, - { - "duration": "7.3084545494949475", - "name": "blink_perf.bindings/sequence-conversion-custom-iterator.html" - }, - { - "duration": "1.9026363484848487", - "name": "blink_perf.bindings/serialize-array.html" - }, - { - "duration": "1.5409899222222219", - "name": "blink_perf.bindings/serialize-long-string.html" - }, - { - "duration": "3.620575752525252", - "name": "blink_perf.bindings/serialize-map.html" - }, - { - "duration": "1.5426262717171717", - "name": "blink_perf.bindings/serialize-nested-array.html" - }, - { - "duration": "7.164878775757574", - "name": "blink_perf.bindings/set-attribute-rare.html" - }, - { - "duration": "7.086232339393941", - "name": "blink_perf.bindings/set-attribute.html" - }, - { - "duration": "8.711626284848483", - "name": "blink_perf.bindings/structured-clone-json-deserialize.html" - }, - { - "duration": "8.667202066666665", - "name": "blink_perf.bindings/structured-clone-json-serialize.html" - }, - { - "duration": "4.420757596969698", - "name": "blink_perf.bindings/structured-clone-long-string-deserialize.html" - }, - { - "duration": "4.417585862626261", - "name": "blink_perf.bindings/structured-clone-long-string-serialize.html" - }, - { - "duration": "7.61487878888889", - "name": "blink_perf.bindings/typed-array-construct-from-array.html" - }, - { - "duration": "7.366828318181819", - "name": "blink_perf.bindings/typed-array-construct-from-same-type.html" - }, - { - "duration": "7.401202035353537", - "name": "blink_perf.bindings/typed-array-construct-from-typed.html" - }, - { - "duration": "7.260484861616164", - "name": "blink_perf.bindings/typed-array-set-from-typed.html" - }, - { - "duration": "7.308474762626262", - "name": "blink_perf.bindings/undefined-first-child.html" - }, - { - "duration": "7.252969692929292", - "name": "blink_perf.bindings/undefined-get-element-by-id.html" - }, - { - "duration": "7.418888872727273", - "name": "blink_perf.bindings/undefined-id-getter.html" - }, - { - "duration": "11.99351506565657", - "name": "blink_perf.canvas/createImageBitmapFromImageData.html" - }, - { - "duration": "5.392161610101013", - "name": "blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "17.696686878787883", - "name": "blink_perf.canvas/draw-dynamic-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "1.6545252525252525", - "name": "blink_perf.canvas/draw-hw-accelerated-canvas-2d-to-sw-canvas-2d.html" - }, - { - "duration": "3.823525252525255", - "name": "blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "3.017080819191919", - "name": "blink_perf.canvas/draw-static-webgl-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "6.37388890909091", - "name": "blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html" - }, - { - "duration": "7.748656576767677", - "name": "blink_perf.canvas/drawimage-not-pixelaligned.html" - }, - { - "duration": "7.711818157575754", - "name": "blink_perf.canvas/drawimage.html" - }, - { - "duration": "8.3351515050505", - "name": "blink_perf.canvas/getImageData.html" - }, - { - "duration": "9.162959662626266", - "name": "blink_perf.canvas/getImageDataColorManaged.html" - }, - { - "duration": "7.991181814141414", - "name": "blink_perf.canvas/putImageData.html" - }, - { - "duration": "3.4390606111111115", - "name": "blink_perf.canvas/toBlob_duration.html" - }, - { - "duration": "3.1314141424242425", - "name": "blink_perf.canvas/toBlob_duration_jpeg.html" - }, - { - "duration": "2.8016363484848474", - "name": "blink_perf.canvas/transferFromImageBitmap.html" - }, - { - "duration": "4.1477070636363615", - "name": "blink_perf.canvas/upload-canvas-2d-to-texture.html" - }, - { - "duration": "9.509717176767674", - "name": "blink_perf.canvas/upload-video-to-sub-texture.html" - }, - { - "duration": "5.225252510101009", - "name": "blink_perf.canvas/upload-video-to-texture.html" - }, - { - "duration": "4.616656590909092", - "name": "blink_perf.canvas/upload-webgl-to-texture.html" - }, - { - "duration": "17.54732321717172", - "name": "blink_perf.css/AttributeDescendantSelector.html" - }, - { - "duration": "7.454040419191919", - "name": "blink_perf.css/CSSPropertySetterGetter.html" - }, - { - "duration": "7.541232320202021", - "name": "blink_perf.css/CSSPropertySetterGetterMethods.html" - }, - { - "duration": "7.49953537070707", - "name": "blink_perf.css/CSSPropertyUpdateValue.html" - }, - { - "duration": "9.780232343434346", - "name": "blink_perf.css/ChangeStyleChildClassSelector.html" - }, - { - "duration": "9.839747444444445", - "name": "blink_perf.css/ChangeStyleChildElementSelectors.html" - }, - { - "duration": "9.771737368686866", - "name": "blink_perf.css/ChangeStyleElementSelector.html" - }, - { - "duration": "9.863494964646465", - "name": "blink_perf.css/ChangeStyleGrandChildElementSelector.html" - }, - { - "duration": "9.865535358585857", - "name": "blink_perf.css/ChangeStyleMultipleClassSelector.html" - }, - { - "duration": "9.851525267676768", - "name": "blink_perf.css/ChangeStyleMultipleQualifiedDataAttributesWithValuesSelector.html" - }, - { - "duration": "9.822818287878787", - "name": "blink_perf.css/ChangeStyleNestedPseudoSelector.html" - }, - { - "duration": "9.885919156565656", - "name": "blink_perf.css/ChangeStylePairOfNthChildSelector.html" - }, - { - "duration": "9.891959595959595", - "name": "blink_perf.css/ChangeStylePartialAttributeMatchingSelector.html" - }, - { - "duration": "9.913959595959597", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeSelector.html" - }, - { - "duration": "9.883121257575757", - "name": "blink_perf.css/ChangeStyleQualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "11.224030257575759", - "name": "blink_perf.css/ChangeStyleShallowTree.html" - }, - { - "duration": "9.839969737373737", - "name": "blink_perf.css/ChangeStyleSingleClassSelector.html" - }, - { - "duration": "9.850090934343438", - "name": "blink_perf.css/ChangeStyleSingleNthChildSelector.html" - }, - { - "duration": "9.815141373737374", - "name": "blink_perf.css/ChangeStyleSinglePseudoSelector.html" - }, - { - "duration": "9.8357778030303", - "name": "blink_perf.css/ChangeStyleUniversalSelector.html" - }, - { - "duration": "9.846040414141413", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeSelector.html" - }, - { - "duration": "9.858818161616162", - "name": "blink_perf.css/ChangeStyleUnqualifiedDataAttributeWithValueSelector.html" - }, - { - "duration": "13.2593737929293", - "name": "blink_perf.css/ClassDescendantSelector.html" - }, - { - "duration": "8.232151485858587", - "name": "blink_perf.css/ClassInvalidation.html" - }, - { - "duration": "11.310818151515157", - "name": "blink_perf.css/FocusUpdate.html" - }, - { - "duration": "10.18426263636364", - "name": "blink_perf.css/LoadBootstrapBlog.html" - }, - { - "duration": "10.495717171717171", - "name": "blink_perf.css/LoadMaterializeStarterPage.html" - }, - { - "duration": "10.823444474747475", - "name": "blink_perf.css/LoadSemanticPageExample.html" - }, - { - "duration": "7.283131309090906", - "name": "blink_perf.css/PseudoClassSelectors.html" - }, - { - "duration": "8.728666646464646", - "name": "blink_perf.css/SelectorCountScaling.html" - }, - { - "duration": "9.38569698989899", - "name": "blink_perf.dom/addRange.html" - }, - { - "duration": "1.8826262464646466", - "name": "blink_perf.dom/delete-in-password-field.html" - }, - { - "duration": "8.013191943434343", - "name": "blink_perf.dom/div-editable.html" - }, - { - "duration": "1.5727474787878788", - "name": "blink_perf.dom/inner_html_with_selection.html" - }, - { - "duration": "13.534444393939394", - "name": "blink_perf.dom/long-sibling-list.html" - }, - { - "duration": "2.9950909232323233", - "name": "blink_perf.dom/modify-element-classname.html" - }, - { - "duration": "2.2810403838383833", - "name": "blink_perf.dom/modify-element-id.html" - }, - { - "duration": "2.2220202070707074", - "name": "blink_perf.dom/modify-element-title.html" - }, - { - "duration": "1.8530303070707068", - "name": "blink_perf.dom/move-down-with-hidden-elements.html" - }, - { - "duration": "1.847515156565657", - "name": "blink_perf.dom/move-up-with-hidden-elements.html" - }, - { - "duration": "1.6623838454545452", - "name": "blink_perf.dom/remove_child_with_selection.html" - }, - { - "duration": "7.947080776767676", - "name": "blink_perf.dom/select-multiple-add.html" - }, - { - "duration": "7.714585844444445", - "name": "blink_perf.dom/select-single-add.html" - }, - { - "duration": "7.574060588888886", - "name": "blink_perf.dom/select-single-remove.html" - }, - { - "duration": "7.631686892929295", - "name": "blink_perf.dom/textarea-dom.html" - }, - { - "duration": "7.594121206060608", - "name": "blink_perf.dom/textarea-edit.html" - }, - { - "duration": "11.794242449494957", - "name": "blink_perf.events/EventsDispatching.html" - }, - { - "duration": "8.782060611111111", - "name": "blink_perf.events/EventsDispatchingInDeeplyNestedShadowTrees.html" - }, - { - "duration": "17.686515191919188", - "name": "blink_perf.events/EventsDispatchingInShadowTrees.html" - }, - { - "duration": "12.499262626262626", - "name": "blink_perf.events/hit-test-lots-of-layers.html" - }, - { - "duration": "26.816121191919198", - "name": "blink_perf.image_decoder/decode-gif.html" - }, - { - "duration": "12.437606065656563", - "name": "blink_perf.image_decoder/decode-jpeg.html" - }, - { - "duration": "20.71432328282828", - "name": "blink_perf.image_decoder/decode-lossless-webp.html" - }, - { - "duration": "10.967606060606066", - "name": "blink_perf.image_decoder/decode-lossy-webp.html" - }, - { - "duration": "16.038262636363637", - "name": "blink_perf.image_decoder/decode-png-palette-opaque.html" - }, - { - "duration": "13.17494951010101", - "name": "blink_perf.image_decoder/decode-png-palette.html" - }, - { - "duration": "22.422646474747474", - "name": "blink_perf.image_decoder/decode-png.html" - }, - { - "duration": "10.346727231313135", - "name": "blink_perf.layout/ArabicLineLayout.html" - }, - { - "duration": "1.7740606232323235", - "name": "blink_perf.layout/Shapes/MultipleShapes.html" - }, - { - "duration": "7.433686874747477", - "name": "blink_perf.layout/SimpleTextPathLineLayout.html" - }, - { - "duration": "9.038999989898988", - "name": "blink_perf.layout/add-remove-inline-floats.html" - }, - { - "duration": "7.782555541414139", - "name": "blink_perf.layout/attach-inlines-2.html" - }, - { - "duration": "6.916434344444441", - "name": "blink_perf.layout/attach-inlines.html" - }, - { - "duration": "8.818939409090907", - "name": "blink_perf.layout/auto-grid-lots-of-data.html" - }, - { - "duration": "7.058555546464645", - "name": "blink_perf.layout/chapter-reflow-once-random.html" - }, - { - "duration": "11.631515146464645", - "name": "blink_perf.layout/chapter-reflow-once.html" - }, - { - "duration": "8.252636358585859", - "name": "blink_perf.layout/chapter-reflow-thrice.html" - }, - { - "duration": "9.146969696969697", - "name": "blink_perf.layout/chapter-reflow-twice.html" - }, - { - "duration": "7.202787881818181", - "name": "blink_perf.layout/chapter-reflow.html" - }, - { - "duration": "3.785010107070708", - "name": "blink_perf.layout/character_fallback.html" - }, - { - "duration": "1.761636367676767", - "name": "blink_perf.layout/character_fallback_aat.html" - }, - { - "duration": "9.153333383838385", - "name": "blink_perf.layout/fixed-grid-lots-of-data.html" - }, - { - "duration": "8.867464601010102", - "name": "blink_perf.layout/fixed-grid-lots-of-stretched-data.html" - }, - { - "duration": "7.394404016161617", - "name": "blink_perf.layout/flexbox-column-nowrap.html" - }, - { - "duration": "7.3503333595959575", - "name": "blink_perf.layout/flexbox-column-wrap.html" - }, - { - "duration": "7.447797966666665", - "name": "blink_perf.layout/flexbox-deeply-nested-column-flow.html" - }, - { - "duration": "8.92109093434344", - "name": "blink_perf.layout/flexbox-lots-of-data.html" - }, - { - "duration": "7.423585860606059", - "name": "blink_perf.layout/flexbox-row-nowrap.html" - }, - { - "duration": "7.443919146464647", - "name": "blink_perf.layout/flexbox-row-wrap.html" - }, - { - "duration": "7.0987171858585825", - "name": "blink_perf.layout/flexbox-with-stretch-layout.html" - }, - { - "duration": "10.22315144949495", - "name": "blink_perf.layout/floats_100_100.html" - }, - { - "duration": "10.37197977777778", - "name": "blink_perf.layout/floats_100_100_nested.html" - }, - { - "duration": "6.6620505242424235", - "name": "blink_perf.layout/floats_10_1000.html" - }, - { - "duration": "3.8134242444444433", - "name": "blink_perf.layout/floats_20_100.html" - }, - { - "duration": "4.40039394949495", - "name": "blink_perf.layout/floats_20_100_nested.html" - }, - { - "duration": "2.6902727252525263", - "name": "blink_perf.layout/floats_2_100.html" - }, - { - "duration": "2.59917171010101", - "name": "blink_perf.layout/floats_2_100_nested.html" - }, - { - "duration": "4.655959621212122", - "name": "blink_perf.layout/floats_50_100.html" - }, - { - "duration": "4.946272719191921", - "name": "blink_perf.layout/floats_50_100_nested.html" - }, - { - "duration": "7.37470706767677", - "name": "blink_perf.layout/hindi-line-layout.html" - }, - { - "duration": "8.054393930303032", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans-wider-than-table.html" - }, - { - "duration": "8.07083837272727", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-colspans.html" - }, - { - "duration": "8.042878797979794", - "name": "blink_perf.layout/large-table-with-collapsed-borders-and-no-colspans.html" - }, - { - "duration": "2.1921616101010097", - "name": "blink_perf.layout/latin-complex-text.html" - }, - { - "duration": "2.2805151494949496", - "name": "blink_perf.layout/layers_overlap_2d.html" - }, - { - "duration": "2.429404044444445", - "name": "blink_perf.layout/layers_overlap_3d.html" - }, - { - "duration": "8.19663632929293", - "name": "blink_perf.layout/line-layout-line-height.html" - }, - { - "duration": "7.075939392929294", - "name": "blink_perf.layout/line-layout-repeat-append.html" - }, - { - "duration": "6.896232329292933", - "name": "blink_perf.layout/line-layout.html" - }, - { - "duration": "1.871707065656565", - "name": "blink_perf.layout/long-line-nowrap-collapse.html" - }, - { - "duration": "1.8789899060606055", - "name": "blink_perf.layout/long-line-nowrap-spans-collapse.html" - }, - { - "duration": "4.291020178787881", - "name": "blink_perf.layout/long-line-nowrap.html" - }, - { - "duration": "7.373666650505051", - "name": "blink_perf.layout/multicol/deeply-nested-tables.html" - }, - { - "duration": "7.205080817171718", - "name": "blink_perf.layout/multicol/fixed-height-with-spanner-and-nested-tables.html" - }, - { - "duration": "6.775323247474749", - "name": "blink_perf.layout/multicol/lots-of-text-autofill.html" - }, - { - "duration": "6.982080831313131", - "name": "blink_perf.layout/multicol/lots-of-text-balanced-orphans-widows.html" - }, - { - "duration": "6.8465555575757575", - "name": "blink_perf.layout/multicol/lots-of-text-balanced.html" - }, - { - "duration": "7.449464638383838", - "name": "blink_perf.layout/multicol/tall-content-short-columns-realistic.html" - }, - { - "duration": "7.475888897979797", - "name": "blink_perf.layout/multicol/tall-content-short-columns.html" - }, - { - "duration": "7.267888906060605", - "name": "blink_perf.layout/nested-blocks-with-percent-height-and-max-height.html" - }, - { - "duration": "7.475646456565656", - "name": "blink_perf.layout/nested-grid.html" - }, - { - "duration": "13.373424222222223", - "name": "blink_perf.layout/nested-percent-height-tables.html" - }, - { - "duration": "51.49417173737374", - "name": "blink_perf.layout/subtree-detaching.html" - }, - { - "duration": "3.2012020222222217", - "name": "blink_perf.layout/vertical-japanese-kokoro-insert.html" - }, - { - "duration": "3.6646363545454532", - "name": "blink_perf.layout/word-break-break-all.html" - }, - { - "duration": "3.6936363767676763", - "name": "blink_perf.layout/word-break-break-word.html" - }, - { - "duration": "3.676686871717171", - "name": "blink_perf.layout/word-wrap-break-word.html" - }, - { - "duration": "16.762747515151517", - "name": "blink_perf.owp_storage/blob-perf-files.html" - }, - { - "duration": "13.229030308080814", - "name": "blink_perf.owp_storage/blob-perf-ipc.html" - }, - { - "duration": "11.21367677777778", - "name": "blink_perf.owp_storage/blob-perf-shm.html" - }, - { - "duration": "13.202757575757579", - "name": "blink_perf.owp_storage/blob-perf-tiny.html" - }, - { - "duration": "13.640363621212112", - "name": "blink_perf.owp_storage/idb-load-docs.html" - }, - { - "duration": "15.165838393939385", - "name": "blink_perf.paint/appending-text.html" - }, - { - "duration": "18.154292888888886", - "name": "blink_perf.paint/color-changes.html" - }, - { - "duration": "15.968030323232323", - "name": "blink_perf.paint/complex-content-slow-scroll.html" - }, - { - "duration": "14.979959611111113", - "name": "blink_perf.paint/containment-resize.html" - }, - { - "duration": "14.792070792929291", - "name": "blink_perf.paint/fixed-and-many-layers-scroll.html" - }, - { - "duration": "17.22665655050505", - "name": "blink_perf.paint/large-table-background-change-with-invisible-collapsed-borders.html" - }, - { - "duration": "13.958747515151517", - "name": "blink_perf.paint/large-table-background-change-with-visible-collapsed-borders.html" - }, - { - "duration": "18.175282888888884", - "name": "blink_perf.paint/large-table-background-change-with-zero-width-collapsed-borders.html" - }, - { - "duration": "14.828252525252523", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-backgrounds.html" - }, - { - "duration": "15.417383808080803", - "name": "blink_perf.paint/large-table-collapsed-border-change-with-text.html" - }, - { - "duration": "12.91895964646464", - "name": "blink_perf.paint/large-table-collapsed-border-change.html" - }, - { - "duration": "16.062979787878792", - "name": "blink_perf.paint/large-table-repaint.html" - }, - { - "duration": "12.312777813131316", - "name": "blink_perf.paint/move-text-with-mask.html" - }, - { - "duration": "15.015868671717183", - "name": "blink_perf.paint/paint-offset-changes.html" - }, - { - "duration": "22.637676777777777", - "name": "blink_perf.paint/transform-changes.html" - }, - { - "duration": "12.351939388888892", - "name": "blink_perf.parser/css-parser-yui.html" - }, - { - "duration": "8.697979802020201", - "name": "blink_perf.parser/html-parser-threaded.html" - }, - { - "duration": "8.278222220202018", - "name": "blink_perf.parser/html-parser.html" - }, - { - "duration": "30.700020222222232", - "name": "blink_perf.parser/html5-full-render.html" - }, - { - "duration": "7.544000017171716", - "name": "blink_perf.parser/iframe-append-remove.html" - }, - { - "duration": "7.621343428282833", - "name": "blink_perf.parser/innerHTML-setter-siblings.html" - }, - { - "duration": "7.559676770707072", - "name": "blink_perf.parser/innerHTML-setter.html" - }, - { - "duration": "7.635333327272731", - "name": "blink_perf.parser/query-selector-all-attribute-complex.html" - }, - { - "duration": "7.638040404040406", - "name": "blink_perf.parser/query-selector-all-attribute.html" - }, - { - "duration": "7.448040404040405", - "name": "blink_perf.parser/query-selector-all-class-deep.html" - }, - { - "duration": "8.480606086868688", - "name": "blink_perf.parser/query-selector-all-class-first.html" - }, - { - "duration": "7.625232344444444", - "name": "blink_perf.parser/query-selector-all-class-last.html" - }, - { - "duration": "7.734909056565658", - "name": "blink_perf.parser/query-selector-all-class.html" - }, - { - "duration": "7.500252520202022", - "name": "blink_perf.parser/query-selector-all-deep.html" - }, - { - "duration": "8.422525242424243", - "name": "blink_perf.parser/query-selector-all-first.html" - }, - { - "duration": "8.888929287878788", - "name": "blink_perf.parser/query-selector-all-id-deep.html" - }, - { - "duration": "8.438505045454548", - "name": "blink_perf.parser/query-selector-all-id-first.html" - }, - { - "duration": "8.758565631313129", - "name": "blink_perf.parser/query-selector-all-id-last.html" - }, - { - "duration": "7.8251817989899", - "name": "blink_perf.parser/query-selector-all-last.html" - }, - { - "duration": "7.367333302020204", - "name": "blink_perf.parser/query-selector-deep.html" - }, - { - "duration": "7.505080811111112", - "name": "blink_perf.parser/query-selector-first.html" - }, - { - "duration": "7.6685151373737375", - "name": "blink_perf.parser/query-selector-id-deep.html" - }, - { - "duration": "7.786606049494947", - "name": "blink_perf.parser/query-selector-id-last.html" - }, - { - "duration": "7.820717184848486", - "name": "blink_perf.parser/query-selector-last.html" - }, - { - "duration": "7.127505044444442", - "name": "blink_perf.parser/simple-url.html" - }, - { - "duration": "7.969050519191919", - "name": "blink_perf.parser/textarea-parsing.html" - }, - { - "duration": "7.375707046464646", - "name": "blink_perf.parser/tiny-innerHTML.html" - }, - { - "duration": "8.140353505050504", - "name": "blink_perf.parser/url-parser.html" - }, - { - "duration": "7.283313124242421", - "name": "blink_perf.parser/xml-parser.html" - }, - { - "duration": "6.846858553535351", - "name": "blink_perf.shadow_dom/shadow-style-share-attr-selectors.html" - }, - { - "duration": "2.1604242494949495", - "name": "blink_perf.shadow_dom/shadow-style-share-media-query.html" - }, - { - "duration": "2.247525258585859", - "name": "blink_perf.shadow_dom/shadow-style-share-with-distribution.html" - }, - { - "duration": "1.7050100969696969", - "name": "blink_perf.shadow_dom/shadow-style-share.html" - }, - { - "duration": "1.845171706060606", - "name": "blink_perf.shadow_dom/style-sheet-insert.html" - }, - { - "duration": "1.8806767696969697", - "name": "blink_perf.shadow_dom/v0-changing-classname-with-shadow-dom.html" - }, - { - "duration": "2.3220000030303027", - "name": "blink_perf.shadow_dom/v0-changing-classname-without-shadow-dom.html" - }, - { - "duration": "3.549929286868687", - "name": "blink_perf.shadow_dom/v0-changing-select-with-shadow-dom.html" - }, - { - "duration": "3.72138383939394", - "name": "blink_perf.shadow_dom/v0-changing-select-without-shadow-dom.html" - }, - { - "duration": "1.8872121323232323", - "name": "blink_perf.shadow_dom/v0-content-reprojection.html" - }, - { - "duration": "1.7125656595959595", - "name": "blink_perf.shadow_dom/v0-large-distribution-without-layout.html" - }, - { - "duration": "1.6809494969696972", - "name": "blink_perf.shadow_dom/v0-multiple-insertion-points.html" - }, - { - "duration": "1.8918383858585852", - "name": "blink_perf.shadow_dom/v0-shadow-reprojection.html" - }, - { - "duration": "1.6916767545454545", - "name": "blink_perf.shadow_dom/v0-small-distribution-with-layout.html" - }, - { - "duration": "15.806242424242424", - "name": "blink_perf.shadow_dom/v1-distribution-disconnected-and-reconnected.html" - }, - { - "duration": "1.557040394949495", - "name": "blink_perf.shadow_dom/v1-distribution.html" - }, - { - "duration": "1.5849595979797981", - "name": "blink_perf.shadow_dom/v1-host-child-append.html" - }, - { - "duration": "15.818939388888895", - "name": "blink_perf.shadow_dom/v1-large-deep-distribution.html" - }, - { - "duration": "34.10340404040405", - "name": "blink_perf.shadow_dom/v1-large-deep-layout.html" - }, - { - "duration": "1.557636360606061", - "name": "blink_perf.shadow_dom/v1-large-shallow-distribution.html" - }, - { - "duration": "1.6170303202020204", - "name": "blink_perf.shadow_dom/v1-large-shallow-layout.html" - }, - { - "duration": "2.021121210101009", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-re-layout.html" - }, - { - "duration": "1.619555562626263", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "1.6222121282828281", - "name": "blink_perf.shadow_dom/v1-mutate-deep-tree-then-slot-flatten.html" - }, - { - "duration": "1.922232313131314", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-re-layout.html" - }, - { - "duration": "1.644686852525253", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-assigned-nodes.html" - }, - { - "duration": "1.6638686757575765", - "name": "blink_perf.shadow_dom/v1-mutate-shallow-tree-then-slot-flatten.html" - }, - { - "duration": "1.537151526262626", - "name": "blink_perf.shadow_dom/v1-slot-append.html" - }, - { - "duration": "3.097868685858586", - "name": "blink_perf.shadow_dom/v1-small-deep-distribution.html" - }, - { - "duration": "3.1138484858585858", - "name": "blink_perf.shadow_dom/v1-small-deep-layout.html" - }, - { - "duration": "1.5417878868686872", - "name": "blink_perf.shadow_dom/v1-small-shallow-distribution.html" - }, - { - "duration": "1.5514242424242422", - "name": "blink_perf.shadow_dom/v1-small-shallow-layout.html" - }, - { - "duration": "6.111989913131314", - "name": "blink_perf.svg/AzLizardBenjiPark.html" - }, - { - "duration": "3.1386868707070703", - "name": "blink_perf.svg/Bamboo.html" - }, - { - "duration": "1.9351615979797978", - "name": "blink_perf.svg/Cactus.html" - }, - { - "duration": "1.92946465050505", - "name": "blink_perf.svg/Cowboy.html" - }, - { - "duration": "3.5596262606060614", - "name": "blink_perf.svg/Cowboy_transform.html" - }, - { - "duration": "1.7019495030303027", - "name": "blink_perf.svg/CrawFishGanson.html" - }, - { - "duration": "1.82923231111111", - "name": "blink_perf.svg/Debian.html" - }, - { - "duration": "1.687525247474747", - "name": "blink_perf.svg/DropsOnABlade.html" - }, - { - "duration": "1.6795252494949497", - "name": "blink_perf.svg/FlowerFromMyGarden.html" - }, - { - "duration": "1.7643434343434345", - "name": "blink_perf.svg/FoodLeifLodahl.html" - }, - { - "duration": "1.8458787737373734", - "name": "blink_perf.svg/France.html" - }, - { - "duration": "1.681121228282829", - "name": "blink_perf.svg/FrancoBolloGnomeEzechi.html" - }, - { - "duration": "1.9306161727272715", - "name": "blink_perf.svg/GearFlowers.html" - }, - { - "duration": "1.7340505010101013", - "name": "blink_perf.svg/HarveyRayner.html" - }, - { - "duration": "1.6850404030303028", - "name": "blink_perf.svg/HereGear.html" - }, - { - "duration": "3.464868684848484", - "name": "blink_perf.svg/MtSaintHelens.html" - }, - { - "duration": "1.6374949545454545", - "name": "blink_perf.svg/Samurai.html" - }, - { - "duration": "33.12736360606062", - "name": "blink_perf.svg/SierpinskiCarpet.html" - }, - { - "duration": "2.9998282838383847", - "name": "blink_perf.svg/SvgCubics.html" - }, - { - "duration": "2.2271919171717167", - "name": "blink_perf.svg/SvgHitTesting.html" - }, - { - "duration": "7.960595973737375", - "name": "blink_perf.svg/SvgNestedUse.html" - }, - { - "duration": "1.749494947474748", - "name": "blink_perf.svg/UnderTheSee.html" - }, - { - "duration": "2.033676784848485", - "name": "blink_perf.svg/WorldIso.html" - }, - { - "duration": "3.0995959636363635", - "name": "blink_perf.svg/Worldcup.html" - }, - { - "duration": "33.415434343434335", - "name": "dromaeo/http://dromaeo.com?dom-attr" - }, - { - "duration": "32.56941414141415", - "name": "dromaeo/http://dromaeo.com?dom-modify" - }, - { - "duration": "48.42508080808082", - "name": "dromaeo/http://dromaeo.com?dom-query" - }, - { - "duration": "27.969899020202007", - "name": "dromaeo/http://dromaeo.com?dom-traverse" - }, - { - "duration": "17.245101030303033", - "name": "dummy_benchmark.histogram_benchmark_1/dummy_page.html" - }, - { - "duration": "2.9755353363636363", - "name": "dummy_benchmark.noisy_benchmark_1/dummy_page.html" - }, - { - "duration": "2.4593737363636365", - "name": "dummy_benchmark.stable_benchmark_1/dummy_page.html" - }, - { - "duration": "202.85856565656562", - "name": "jetstream/http://browserbench.org/JetStream/" - }, - { - "duration": "29.93683835353535", - "name": "kraken/http://krakenbenchmark.mozilla.org/kraken-1.1/driver.html" - }, - { - "duration": "115.79520204040404", - "name": "loading.desktop/24h" - }, - { - "duration": "49.01622222222222", - "name": "loading.desktop/24h_cold" - }, - { - "duration": "61.295221888888896", - "name": "loading.desktop/24h_warm" - }, - { - "duration": "0.00150001045", - "name": "loading.desktop/2ch" - }, - { - "duration": "152.7568586565656", - "name": "loading.desktop/AirBnB" - }, - { - "duration": "57.07977777777777", - "name": "loading.desktop/AirBnB_cold" - }, - { - "duration": "84.44122222222224", - "name": "loading.desktop/AirBnB_warm" - }, - { - "duration": "81.5796161414141", - "name": "loading.desktop/Aljayyash" - }, - { - "duration": "36.66333344444445", - "name": "loading.desktop/Aljayyash_cold" - }, - { - "duration": "42.017", - "name": "loading.desktop/Aljayyash_warm" - }, - { - "duration": "177.77539391919194", - "name": "loading.desktop/AllRecipes" - }, - { - "duration": "72.87233333333333", - "name": "loading.desktop/AllRecipes_cold" - }, - { - "duration": "100.69244444444445", - "name": "loading.desktop/AllRecipes_warm" - }, - { - "duration": "157.9158888484848", - "name": "loading.desktop/ArsTechnica" - }, - { - "duration": "64.47455544444445", - "name": "loading.desktop/ArsTechnica_cold" - }, - { - "duration": "92.54277777777777", - "name": "loading.desktop/ArsTechnica_warm" - }, - { - "duration": "80.38057576767677", - "name": "loading.desktop/Baidu" - }, - { - "duration": "37.15155555555556", - "name": "loading.desktop/Baidu_cold" - }, - { - "duration": "42.347111", - "name": "loading.desktop/Baidu_warm" - }, - { - "duration": "152.58226263636365", - "name": "loading.desktop/Bhaskar" - }, - { - "duration": "60.74755544444444", - "name": "loading.desktop/Bhaskar_cold" - }, - { - "duration": "82.68355555555556", - "name": "loading.desktop/Bhaskar_warm" - }, - { - "duration": "113.17770705050503", - "name": "loading.desktop/Chosun" - }, - { - "duration": "46.97222222222223", - "name": "loading.desktop/Chosun_cold" - }, - { - "duration": "58.54900000000001", - "name": "loading.desktop/Chosun_warm" - }, - { - "duration": "103.54197974747468", - "name": "loading.desktop/Colorado.edu" - }, - { - "duration": "45.382222222222225", - "name": "loading.desktop/Colorado.edu_cold" - }, - { - "duration": "55.10599988888888", - "name": "loading.desktop/Colorado.edu_warm" - }, - { - "duration": "99.9402727272727", - "name": "loading.desktop/Danawa" - }, - { - "duration": "43.295111222222225", - "name": "loading.desktop/Danawa_cold" - }, - { - "duration": "54.21388866666666", - "name": "loading.desktop/Danawa_warm" - }, - { - "duration": "98.89663635353534", - "name": "loading.desktop/Daum" - }, - { - "duration": "43.68855555555555", - "name": "loading.desktop/Daum_cold" - }, - { - "duration": "52.729111222222215", - "name": "loading.desktop/Daum_warm" - }, - { - "duration": "119.02746457575762", - "name": "loading.desktop/Donga" - }, - { - "duration": "48.79377788888889", - "name": "loading.desktop/Donga_cold" - }, - { - "duration": "61.68666677777777", - "name": "loading.desktop/Donga_warm" - }, - { - "duration": "140.52727272727267", - "name": "loading.desktop/Economist" - }, - { - "duration": "58.543111111111116", - "name": "loading.desktop/Economist_cold" - }, - { - "duration": "82.5615", - "name": "loading.desktop/Economist_warm" - }, - { - "duration": "228.69829291919189", - "name": "loading.desktop/Elmundo" - }, - { - "duration": "78.18244466666667", - "name": "loading.desktop/Elmundo_cold" - }, - { - "duration": "150.45255555555556", - "name": "loading.desktop/Elmundo_warm" - }, - { - "duration": "101.09244436363633", - "name": "loading.desktop/FC2Blog" - }, - { - "duration": "43.44511122222223", - "name": "loading.desktop/FC2Blog_cold" - }, - { - "duration": "53.314666555555554", - "name": "loading.desktop/FC2Blog_warm" - }, - { - "duration": "0.0015001296499999998", - "name": "loading.desktop/FDA" - }, - { - "duration": "111.08438397979803", - "name": "loading.desktop/FIFA" - }, - { - "duration": "48.13266655555555", - "name": "loading.desktop/FIFA_cold" - }, - { - "duration": "59.180888888888894", - "name": "loading.desktop/FIFA_warm" - }, - { - "duration": "155.39663627272722", - "name": "loading.desktop/FarsNews" - }, - { - "duration": "79.753889", - "name": "loading.desktop/FarsNews_cold" - }, - { - "duration": "64.7131108888889", - "name": "loading.desktop/FarsNews_warm" - }, - { - "duration": "101.7750504545455", - "name": "loading.desktop/Flickr" - }, - { - "duration": "44.12544444444445", - "name": "loading.desktop/Flickr_cold" - }, - { - "duration": "54.30866677777778", - "name": "loading.desktop/Flickr_warm" - }, - { - "duration": "97.64360610101005", - "name": "loading.desktop/FlipKart" - }, - { - "duration": "41.16466666666666", - "name": "loading.desktop/FlipKart_cold" - }, - { - "duration": "51.574555555555555", - "name": "loading.desktop/FlipKart_warm" - }, - { - "duration": "85.32855556565653", - "name": "loading.desktop/Free.fr" - }, - { - "duration": "36.92433333333334", - "name": "loading.desktop/Free.fr_cold" - }, - { - "duration": "42.13199999999999", - "name": "loading.desktop/Free.fr_warm" - }, - { - "duration": "77.21311107070709", - "name": "loading.desktop/HTML5Rocks" - }, - { - "duration": "35.10366677777777", - "name": "loading.desktop/HTML5Rocks_cold" - }, - { - "duration": "38.530222333333334", - "name": "loading.desktop/HTML5Rocks_warm" - }, - { - "duration": "83.18356559595962", - "name": "loading.desktop/Haraj" - }, - { - "duration": "38.77455566666666", - "name": "loading.desktop/Haraj_cold" - }, - { - "duration": "43.786555666666665", - "name": "loading.desktop/Haraj_warm" - }, - { - "duration": "118.91626267676763", - "name": "loading.desktop/HatenaBookmark" - }, - { - "duration": "48.541888888888884", - "name": "loading.desktop/HatenaBookmark_cold" - }, - { - "duration": "64.90722211111111", - "name": "loading.desktop/HatenaBookmark_warm" - }, - { - "duration": "121.03334345454536", - "name": "loading.desktop/IGN" - }, - { - "duration": "51.31022222222222", - "name": "loading.desktop/IGN_cold" - }, - { - "duration": "63.95366644444445", - "name": "loading.desktop/IGN_warm" - }, - { - "duration": "116.33096975757572", - "name": "loading.desktop/IMDB" - }, - { - "duration": "48.737333444444445", - "name": "loading.desktop/IMDB_cold" - }, - { - "duration": "64.61688866666667", - "name": "loading.desktop/IMDB_warm" - }, - { - "duration": "102.57024242424244", - "name": "loading.desktop/IndiaTimes" - }, - { - "duration": "43.34066688888889", - "name": "loading.desktop/IndiaTimes_cold" - }, - { - "duration": "55.41855555555556", - "name": "loading.desktop/IndiaTimes_warm" - }, - { - "duration": "118.77830299999997", - "name": "loading.desktop/Kakaku" - }, - { - "duration": "50.835", - "name": "loading.desktop/Kakaku_cold" - }, - { - "duration": "65.04477777777778", - "name": "loading.desktop/Kakaku_warm" - }, - { - "duration": "196.9060908080808", - "name": "loading.desktop/Kenh14" - }, - { - "duration": "76.4041111111111", - "name": "loading.desktop/Kenh14_cold" - }, - { - "duration": "106.40877777777776", - "name": "loading.desktop/Kenh14_warm" - }, - { - "duration": "9.999275E-4", - "name": "loading.desktop/Leboncoin" - }, - { - "duration": "0.00150001045", - "name": "loading.desktop/MLB" - }, - { - "duration": "111.19094945454545", - "name": "loading.desktop/Mercadolivre" - }, - { - "duration": "47.936", - "name": "loading.desktop/Mercadolivre_cold" - }, - { - "duration": "57.980333333333334", - "name": "loading.desktop/Mercadolivre_warm" - }, - { - "duration": "116.01690909090907", - "name": "loading.desktop/NatGeo" - }, - { - "duration": "98.64382825252528", - "name": "loading.desktop/Naver" - }, - { - "duration": "41.81855566666667", - "name": "loading.desktop/Naver_cold" - }, - { - "duration": "50.160777555555555", - "name": "loading.desktop/Naver_warm" - }, - { - "duration": "0.0020000934", - "name": "loading.desktop/Orange" - }, - { - "duration": "101.8609595050505", - "name": "loading.desktop/Pantip" - }, - { - "duration": "43.649889", - "name": "loading.desktop/Pantip_cold" - }, - { - "duration": "54.13722222222222", - "name": "loading.desktop/Pantip_warm" - }, - { - "duration": "123.40419184848493", - "name": "loading.desktop/PremierLeague" - }, - { - "duration": "61.736111", - "name": "loading.desktop/PremierLeague_cold" - }, - { - "duration": "68.64855555555556", - "name": "loading.desktop/PremierLeague_warm" - }, - { - "duration": "121.79510104040399", - "name": "loading.desktop/QQ" - }, - { - "duration": "52.550333444444455", - "name": "loading.desktop/QQ_cold" - }, - { - "duration": "65.696", - "name": "loading.desktop/QQ_warm" - }, - { - "duration": "108.85021210101011", - "name": "loading.desktop/REI" - }, - { - "duration": "47.14177766666667", - "name": "loading.desktop/REI_cold" - }, - { - "duration": "59.31699999999999", - "name": "loading.desktop/REI_warm" - }, - { - "duration": "9.999275E-4", - "name": "loading.desktop/Rambler" - }, - { - "duration": "90.25773739393938", - "name": "loading.desktop/Ruten" - }, - { - "duration": "39.87855555555556", - "name": "loading.desktop/Ruten_cold" - }, - { - "duration": "47.04155577777778", - "name": "loading.desktop/Ruten_warm" - }, - { - "duration": "131.78460609090916", - "name": "loading.desktop/Sina" - }, - { - "duration": "57.16655555555556", - "name": "loading.desktop/Sina_cold" - }, - { - "duration": "71.91933333333333", - "name": "loading.desktop/Sina_warm" - }, - { - "duration": "139.97829290909095", - "name": "loading.desktop/Taobao" - }, - { - "duration": "59.429333555555544", - "name": "loading.desktop/Taobao_cold" - }, - { - "duration": "76.66511111111112", - "name": "loading.desktop/Taobao_warm" - }, - { - "duration": "160.2342121313131", - "name": "loading.desktop/TheOnion" - }, - { - "duration": "66.89288888888888", - "name": "loading.desktop/TheOnion_cold" - }, - { - "duration": "92.191", - "name": "loading.desktop/TheOnion_warm" - }, - { - "duration": "135.42048485858584", - "name": "loading.desktop/TheVerge" - }, - { - "duration": "56.2047778888889", - "name": "loading.desktop/TheVerge_cold" - }, - { - "duration": "75.6738888888889", - "name": "loading.desktop/TheVerge_warm" - }, - { - "duration": "142.4076465858586", - "name": "loading.desktop/TicketMaster" - }, - { - "duration": "61.155444333333335", - "name": "loading.desktop/TicketMaster_cold" - }, - { - "duration": "80.351222", - "name": "loading.desktop/TicketMaster_warm" - }, - { - "duration": "266.71652557575766", - "name": "loading.desktop/Vietnamnet" - }, - { - "duration": "99.65133333333334", - "name": "loading.desktop/Vietnamnet_cold" - }, - { - "duration": "139.49133333333333", - "name": "loading.desktop/Vietnamnet_warm" - }, - { - "duration": "155.64173738383838", - "name": "loading.desktop/Vnexpress" - }, - { - "duration": "64.04422222222223", - "name": "loading.desktop/Vnexpress_cold" - }, - { - "duration": "88.88466666666666", - "name": "loading.desktop/Vnexpress_warm" - }, - { - "duration": "158.69804036363632", - "name": "loading.desktop/Walgreens" - }, - { - "duration": "69.10600011111111", - "name": "loading.desktop/Walgreens_cold" - }, - { - "duration": "96.37977777777776", - "name": "loading.desktop/Walgreens_warm" - }, - { - "duration": "80.89380810101011", - "name": "loading.desktop/Yandex" - }, - { - "duration": "36.91611111111111", - "name": "loading.desktop/Yandex_cold" - }, - { - "duration": "42.27555544444445", - "name": "loading.desktop/Yandex_warm" - }, - { - "duration": "123.77974755555557", - "name": "loading.desktop/amazon.co.jp" - }, - { - "duration": "52.304888777777784", - "name": "loading.desktop/amazon.co.jp_cold" - }, - { - "duration": "69.581", - "name": "loading.desktop/amazon.co.jp_warm" - }, - { - "duration": "0.001250028575", - "name": "loading.desktop/goo.ne.jp" - }, - { - "duration": "93.46309089898985", - "name": "loading.desktop/ja.wikipedia" - }, - { - "duration": "41.67577788888889", - "name": "loading.desktop/ja.wikipedia_cold" - }, - { - "duration": "49.72666677777779", - "name": "loading.desktop/ja.wikipedia_warm" - }, - { - "duration": "151.9114746969696", - "name": "loading.desktop/money.cnn" - }, - { - "duration": "61.269778", - "name": "loading.desktop/money.cnn_cold" - }, - { - "duration": "85.45144444444445", - "name": "loading.desktop/money.cnn_warm" - }, - { - "duration": "89.88158583838386", - "name": "loading.desktop/ru.wikipedia" - }, - { - "duration": "40.043889", - "name": "loading.desktop/ru.wikipedia_cold" - }, - { - "duration": "47.09388888888889", - "name": "loading.desktop/ru.wikipedia_warm" - }, - { - "duration": "167.99965658585865", - "name": "loading.desktop/uol.com.br" - }, - { - "duration": "64.81466644444443", - "name": "loading.desktop/uol.com.br_cold" - }, - { - "duration": "95.43600022222222", - "name": "loading.desktop/uol.com.br_warm" - }, - { - "duration": "107.64852529292926", - "name": "loading.desktop/yahoo.co.jp" - }, - { - "duration": "47.22400011111112", - "name": "loading.desktop/yahoo.co.jp_cold" - }, - { - "duration": "56.877666555555564", - "name": "loading.desktop/yahoo.co.jp_warm" - }, - { - "duration": "28.676171666666658", - "name": "media.desktop/mse.html?media=aac_audio.mp4" - }, - { - "duration": "29.30343432323233", - "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4" - }, - { - "duration": "29.39976768686869", - "name": "media.desktop/mse.html?media=aac_audio.mp4,h264_video.mp4&waitForPageLoaded=true" - }, - { - "duration": "28.49593940404042", - "name": "media.desktop/mse.html?media=h264_video.mp4" - }, - { - "duration": "39.5865454949495", - "name": "media.desktop/video.html?src=crowd.ogg&type=audio" - }, - { - "duration": "41.79165656565655", - "name": "media.desktop/video.html?src=crowd1080.mp4" - }, - { - "duration": "41.07382826262628", - "name": "media.desktop/video.html?src=crowd1080.webm" - }, - { - "duration": "38.451090909090915", - "name": "media.desktop/video.html?src=crowd1080_vp9.webm" - }, - { - "duration": "25.117535333333326", - "name": "media.desktop/video.html?src=crowd1080_vp9.webm&seek" - }, - { - "duration": "37.703232323232335", - "name": "media.desktop/video.html?src=crowd720_vp9.webm" - }, - { - "duration": "44.493646484848476", - "name": "media.desktop/video.html?src=garden2_10s.mp4" - }, - { - "duration": "29.0549596060606", - "name": "media.desktop/video.html?src=garden2_10s.mp4&seek" - }, - { - "duration": "38.88641416161616", - "name": "media.desktop/video.html?src=garden2_10s.webm" - }, - { - "duration": "26.273242424242436", - "name": "media.desktop/video.html?src=garden2_10s.webm&seek" - }, - { - "duration": "31.02649491919192", - "name": "media.desktop/video.html?src=smpte_3840x2160_60fps_vp9.webm&seek" - }, - { - "duration": "48.0307070909091", - "name": "media.desktop/video.html?src=tulip2.m4a&type=audio" - }, - { - "duration": "48.25161610101011", - "name": "media.desktop/video.html?src=tulip2.mp3&type=audio" - }, - { - "duration": "23.071383919191923", - "name": "media.desktop/video.html?src=tulip2.mp3&type=audio&seek" - }, - { - "duration": "49.95918179797982", - "name": "media.desktop/video.html?src=tulip2.mp4" - }, - { - "duration": "54.84316165656569", - "name": "media.desktop/video.html?src=tulip2.mp4&busyjs" - }, - { - "duration": "26.205181838383837", - "name": "media.desktop/video.html?src=tulip2.mp4&seek" - }, - { - "duration": "48.71410103030302", - "name": "media.desktop/video.html?src=tulip2.ogg&type=audio" - }, - { - "duration": "23.011545464646456", - "name": "media.desktop/video.html?src=tulip2.ogg&type=audio&seek" - }, - { - "duration": "49.84171717171718", - "name": "media.desktop/video.html?src=tulip2.vp9.webm" - }, - { - "duration": "40.42931313131313", - "name": "media.desktop/video.html?src=tulip2.vp9.webm&background" - }, - { - "duration": "28.480020242424228", - "name": "media.desktop/video.html?src=tulip2.vp9.webm&seek" - }, - { - "duration": "53.2817575959596", - "name": "media.desktop/video.html?src=tulip2.vp9.webm_Regular-3G" - }, - { - "duration": "48.48945452525251", - "name": "media.desktop/video.html?src=tulip2.wav&type=audio" - }, - { - "duration": "23.34219194949495", - "name": "media.desktop/video.html?src=tulip2.wav&type=audio&seek" - }, - { - "duration": "159.06532318181817", - "name": "memory.desktop/TrivialAnimationPageSharedPageState" - }, - { - "duration": "114.5082223030303", - "name": "memory.desktop/TrivialBlinkingCursorPageSharedPageState" - }, - { - "duration": "222.57515149494955", - "name": "memory.desktop/TrivialBlurAnimationPageSharedPageState" - }, - { - "duration": "148.67307066666663", - "name": "memory.desktop/TrivialCanvasPageSharedPageState" - }, - { - "duration": "118.46026254545454", - "name": "memory.desktop/TrivialFullscreenVideoPageSharedPageState" - }, - { - "duration": "118.25817169696977", - "name": "memory.desktop/TrivialGifPageSharedPageState" - }, - { - "duration": "152.4319192525252", - "name": "memory.desktop/TrivialScrollingPageSharedPageState" - }, - { - "duration": "156.61189895959598", - "name": "memory.desktop/TrivialWebGLPageSharedPageState" - }, - { - "duration": "166.47384848484847", - "name": "memory.long_running_idle_gmail_background_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "168.8551415151516", - "name": "memory.long_running_idle_gmail_tbmv2/https://mail.google.com/mail/" - }, - { - "duration": "43.78824244444444", - "name": "octane/http://chromium.github.io/octane/index.html?auto=1" - }, - { - "duration": "93.2880813488372", - "name": "power.desktop/TrivialAnimationPageSharedPageState" - }, - { - "duration": "69.68927906976745", - "name": "power.desktop/TrivialBlinkingCursorPageSharedPageState" - }, - { - "duration": "118.8463605116279", - "name": "power.desktop/TrivialBlurAnimationPageSharedPageState" - }, - { - "duration": "86.23733720930228", - "name": "power.desktop/TrivialCanvasPageSharedPageState" - }, - { - "duration": "71.7006395348837", - "name": "power.desktop/TrivialFullscreenVideoPageSharedPageState" - }, - { - "duration": "69.76922093023255", - "name": "power.desktop/TrivialGifPageSharedPageState" - }, - { - "duration": "91.1666162790698", - "name": "power.desktop/TrivialScrollingPageSharedPageState" - }, - { - "duration": "91.31366274418606", - "name": "power.desktop/TrivialWebGLPageSharedPageState" - }, - { - "duration": "83.76198837209303", - "name": "power.desktop/abcnews" - }, - { - "duration": "69.25856972093025", - "name": "power.desktop/indiatimes" - }, - { - "duration": "85.46715120930236", - "name": "power.desktop/instagram" - }, - { - "duration": "71.34581395348842", - "name": "power.desktop/microsoft" - }, - { - "duration": "72.91425595348835", - "name": "power.desktop/sina" - }, - { - "duration": "73.5699651627907", - "name": "power.desktop/slideshare" - }, - { - "duration": "93.36681399999999", - "name": "power.desktop/uol" - }, - { - "duration": "6.930767684848485", - "name": "rasterize_and_record_micro.partial_invalidation/800_relpos_divs.html" - }, - { - "duration": "22.989424191919188", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/amazon.html" - }, - { - "duration": "11.222868707070702", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/blogger.html" - }, - { - "duration": "11.516161616161613", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/booking.html" - }, - { - "duration": "15.308111106060611", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/cnn.html" - }, - { - "duration": "11.90027273232324", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/ebay.html" - }, - { - "duration": "22.18951516161616", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/espn.html" - }, - { - "duration": "12.532727252525259", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/facebook.html" - }, - { - "duration": "18.773131303030308", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/gmail.html" - }, - { - "duration": "16.26942426767676", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/google.html" - }, - { - "duration": "12.714636398989896", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googlecalendar.html" - }, - { - "duration": "20.464414141414128", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googledocs.html" - }, - { - "duration": "17.752313121212126", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleimagesearch.html" - }, - { - "duration": "30.85282822222222", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/googleplus.html" - }, - { - "duration": "10.17671716666666", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/linkedin.html" - }, - { - "duration": "14.031343469696969", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/pinterest.html" - }, - { - "duration": "27.771919191919206", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/techcrunch.html" - }, - { - "duration": "19.308585858585865", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/twitter.html" - }, - { - "duration": "14.78189898484848", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/weather.html" - }, - { - "duration": "9.999275E-4", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/wikipedia.html" - }, - { - "duration": "17.790353560606054", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/wordpress.html" - }, - { - "duration": "12.411252535353535", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahooanswers.html" - }, - { - "duration": "27.61456564646463", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoogames.html" - }, - { - "duration": "104.59697983838386", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoonews.html" - }, - { - "duration": "90.31896965656567", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/yahoosports.html" - }, - { - "duration": "27.50078786868686", - "name": "rasterize_and_record_micro.top_25/file://static_top_25/youtube.html" - }, - { - "duration": "9.999275E-4", - "name": "rendering.desktop/amazon" - }, - { - "duration": "3.8840000175438587", - "name": "rendering.desktop/amazon_pinch" - }, - { - "duration": "68.54723234343433", - "name": "rendering.desktop/analog_clock_svg" - }, - { - "duration": "42.649842105263176", - "name": "rendering.desktop/animometer_webgl" - }, - { - "duration": "118.55949122807014", - "name": "rendering.desktop/aquarium" - }, - { - "duration": "62.56791228070176", - "name": "rendering.desktop/aquarium_20k" - }, - { - "duration": "65.04972564705882", - "name": "rendering.desktop/background_color_animation" - }, - { - "duration": "80.82550980392156", - "name": "rendering.desktop/background_color_animation_with_gradient" - }, - { - "duration": "34.05992203896105", - "name": "rendering.desktop/balls_css_key_frame_animations" - }, - { - "duration": "35.146662311688296", - "name": "rendering.desktop/balls_css_key_frame_animations_composited_transform" - }, - { - "duration": "42.52419485714285", - "name": "rendering.desktop/balls_css_transition_2_properties" - }, - { - "duration": "42.65307792207793", - "name": "rendering.desktop/balls_css_transition_40_properties" - }, - { - "duration": "42.48933766233766", - "name": "rendering.desktop/balls_css_transition_all_properties" - }, - { - "duration": "41.856038909090906", - "name": "rendering.desktop/balls_javascript_canvas" - }, - { - "duration": "33.840038987012996", - "name": "rendering.desktop/balls_javascript_css" - }, - { - "duration": "41.84879223376624", - "name": "rendering.desktop/balls_svg_animations" - }, - { - "duration": "44.625210526315776", - "name": "rendering.desktop/blob" - }, - { - "duration": "36.13822223232323", - "name": "rendering.desktop/blogspot" - }, - { - "duration": "3.4160877385964925", - "name": "rendering.desktop/blogspot_pinch" - }, - { - "duration": "22.165656555555557", - "name": "rendering.desktop/booking.com" - }, - { - "duration": "3.455736849122806", - "name": "rendering.desktop/booking_pinch" - }, - { - "duration": "32.681816091954026", - "name": "rendering.desktop/bouncing_balls_15" - }, - { - "duration": "25.432413781609192", - "name": "rendering.desktop/bouncing_balls_shadow" - }, - { - "duration": "27.585344850574707", - "name": "rendering.desktop/bouncing_clipped_rectangles" - }, - { - "duration": "33.21421840229883", - "name": "rendering.desktop/bouncing_gradient_circles" - }, - { - "duration": "16.759816040229886", - "name": "rendering.desktop/bouncing_png_images" - }, - { - "duration": "36.45083910344828", - "name": "rendering.desktop/bouncing_svg_images" - }, - { - "duration": "37.68852723636364", - "name": "rendering.desktop/canvas_05000_pixels_per_second" - }, - { - "duration": "36.902727272727276", - "name": "rendering.desktop/canvas_10000_pixels_per_second" - }, - { - "duration": "31.977854600000004", - "name": "rendering.desktop/canvas_15000_pixels_per_second" - }, - { - "duration": "29.60580003636364", - "name": "rendering.desktop/canvas_20000_pixels_per_second" - }, - { - "duration": "27.56656361818181", - "name": "rendering.desktop/canvas_30000_pixels_per_second" - }, - { - "duration": "26.547527272727276", - "name": "rendering.desktop/canvas_40000_pixels_per_second" - }, - { - "duration": "26.2450908909091", - "name": "rendering.desktop/canvas_50000_pixels_per_second" - }, - { - "duration": "25.5033272", - "name": "rendering.desktop/canvas_60000_pixels_per_second" - }, - { - "duration": "24.888163654545444", - "name": "rendering.desktop/canvas_75000_pixels_per_second" - }, - { - "duration": "24.554363618181817", - "name": "rendering.desktop/canvas_90000_pixels_per_second" - }, - { - "duration": "53.39479308045975", - "name": "rendering.desktop/canvas_animation_no_clear" - }, - { - "duration": "27.38512645977012", - "name": "rendering.desktop/canvas_arcs" - }, - { - "duration": "25.8954598045977", - "name": "rendering.desktop/canvas_font_cycler" - }, - { - "duration": "30.321931045977006", - "name": "rendering.desktop/canvas_lines" - }, - { - "duration": "32.922770114942516", - "name": "rendering.desktop/canvas_to_blob" - }, - { - "duration": "17.604363654545452", - "name": "rendering.desktop/cats_unscaled" - }, - { - "duration": "15.823963618181816", - "name": "rendering.desktop/cats_viewport_width" - }, - { - "duration": "39.78305752873561", - "name": "rendering.desktop/chip_tune" - }, - { - "duration": "9.999275E-4", - "name": "rendering.desktop/cnn" - }, - { - "duration": "3.398631578947369", - "name": "rendering.desktop/cnn_pinch" - }, - { - "duration": "59.68979218181818", - "name": "rendering.desktop/compositor_heavy_animation" - }, - { - "duration": "44.02577009195403", - "name": "rendering.desktop/crafty_mind" - }, - { - "duration": "30.301051935064944", - "name": "rendering.desktop/css_animations_many_keyframes" - }, - { - "duration": "32.81038957142858", - "name": "rendering.desktop/css_animations_simultaneous_inline_style" - }, - { - "duration": "34.54855842857141", - "name": "rendering.desktop/css_animations_simultaneous_new_element" - }, - { - "duration": "32.83219481818181", - "name": "rendering.desktop/css_animations_simultaneous_style_element" - }, - { - "duration": "32.88518180519481", - "name": "rendering.desktop/css_animations_simultaneous_updating_class" - }, - { - "duration": "30.733194844155847", - "name": "rendering.desktop/css_animations_staggered_infinite_iterations" - }, - { - "duration": "39.71909090909091", - "name": "rendering.desktop/css_animations_staggered_inline_style" - }, - { - "duration": "73.65292205194807", - "name": "rendering.desktop/css_animations_staggered_new_element" - }, - { - "duration": "40.90548051948054", - "name": "rendering.desktop/css_animations_staggered_style_element" - }, - { - "duration": "40.084805220779224", - "name": "rendering.desktop/css_animations_staggered_updating_class" - }, - { - "duration": "43.65384418181818", - "name": "rendering.desktop/css_animations_triggered_inline_style" - }, - { - "duration": "132.40348051948052", - "name": "rendering.desktop/css_animations_triggered_new_element" - }, - { - "duration": "46.803402597402595", - "name": "rendering.desktop/css_animations_triggered_style_element" - }, - { - "duration": "43.99832468831169", - "name": "rendering.desktop/css_animations_triggered_updating_class" - }, - { - "duration": "34.04992212987013", - "name": "rendering.desktop/css_transitions_inline_style" - }, - { - "duration": "35.414545454545475", - "name": "rendering.desktop/css_transitions_new_element" - }, - { - "duration": "34.57106492207792", - "name": "rendering.desktop/css_transitions_staggered_inline_style" - }, - { - "duration": "38.321857142857134", - "name": "rendering.desktop/css_transitions_staggered_new_element" - }, - { - "duration": "35.200714311688316", - "name": "rendering.desktop/css_transitions_staggered_style_element" - }, - { - "duration": "34.616753259740264", - "name": "rendering.desktop/css_transitions_staggered_updating_class" - }, - { - "duration": "33.90392210389611", - "name": "rendering.desktop/css_transitions_style_element" - }, - { - "duration": "47.334441610389604", - "name": "rendering.desktop/css_transitions_triggered_inline_style" - }, - { - "duration": "47.227909090909094", - "name": "rendering.desktop/css_transitions_triggered_new_element" - }, - { - "duration": "47.79022083116883", - "name": "rendering.desktop/css_transitions_triggered_style_element" - }, - { - "duration": "47.38175324675324", - "name": "rendering.desktop/css_transitions_triggered_updating_class" - }, - { - "duration": "33.80661035064936", - "name": "rendering.desktop/css_transitions_updating_class" - }, - { - "duration": "33.647545493506506", - "name": "rendering.desktop/css_value_type_color" - }, - { - "duration": "72.8213505714286", - "name": "rendering.desktop/css_value_type_filter" - }, - { - "duration": "37.115103870129865", - "name": "rendering.desktop/css_value_type_length" - }, - { - "duration": "52.47089615584415", - "name": "rendering.desktop/css_value_type_length_complex" - }, - { - "duration": "50.59872727272725", - "name": "rendering.desktop/css_value_type_length_simple" - }, - { - "duration": "42.90481820779222", - "name": "rendering.desktop/css_value_type_path" - }, - { - "duration": "36.92132468831171", - "name": "rendering.desktop/css_value_type_shadow" - }, - { - "duration": "37.76916887012989", - "name": "rendering.desktop/css_value_type_transform_complex" - }, - { - "duration": "36.85585712987013", - "name": "rendering.desktop/css_value_type_transform_simple" - }, - { - "duration": "75.77731578947369", - "name": "rendering.desktop/dynamic_cube_map" - }, - { - "duration": "36.92531575438597", - "name": "rendering.desktop/earth" - }, - { - "duration": "20.16788889898991", - "name": "rendering.desktop/ebay" - }, - { - "duration": "3.5106842017543873", - "name": "rendering.desktop/ebay_pinch" - }, - { - "duration": "35.41202299999999", - "name": "rendering.desktop/effect_games" - }, - { - "duration": "23.55615153535354", - "name": "rendering.desktop/espn" - }, - { - "duration": "0.9117719157894737", - "name": "rendering.desktop/espn_pinch" - }, - { - "duration": "35.61288223529412", - "name": "rendering.desktop/extra_large_texture_uploads" - }, - { - "duration": "19.250474762626258", - "name": "rendering.desktop/facebook" - }, - { - "duration": "3.39640351754386", - "name": "rendering.desktop/facebook_pinch" - }, - { - "duration": "28.49466668965517", - "name": "rendering.desktop/fill_shapes" - }, - { - "duration": "51.87660002105261", - "name": "rendering.desktop/filter_terrain_svg" - }, - { - "duration": "20.608298862068967", - "name": "rendering.desktop/geo_apis" - }, - { - "duration": "36.36382046153845", - "name": "rendering.desktop/gmail" - }, - { - "duration": "3.3959824684210527", - "name": "rendering.desktop/gmail_pinch" - }, - { - "duration": "9.999275E-4", - "name": "rendering.desktop/google_calendar" - }, - { - "duration": "0.9008771866666665", - "name": "rendering.desktop/google_calendar_pinch" - }, - { - "duration": "0.8985789508771932", - "name": "rendering.desktop/google_image_pinch" - }, - { - "duration": "9.999275E-4", - "name": "rendering.desktop/google_image_search" - }, - { - "duration": "3.3670526385964914", - "name": "rendering.desktop/google_search_pinch" - }, - { - "duration": "18.706090868686868", - "name": "rendering.desktop/google_web_search" - }, - { - "duration": "54.89359548314604", - "name": "rendering.desktop/guimark_vector_chart" - }, - { - "duration": "27.867356298850584", - "name": "rendering.desktop/hakim" - }, - { - "duration": "49.070112337078655", - "name": "rendering.desktop/ie_chalkboard" - }, - { - "duration": "45.15392627368421", - "name": "rendering.desktop/ie_pirate_mark" - }, - { - "duration": "63.75302301149425", - "name": "rendering.desktop/jarro_doverson" - }, - { - "duration": "27.06054020689655", - "name": "rendering.desktop/kevs_3d" - }, - { - "duration": "33.46058441558442", - "name": "rendering.desktop/keyframed_animations" - }, - { - "duration": "50.31170584313725", - "name": "rendering.desktop/large_texture_uploads" - }, - { - "duration": "21.40312118181817", - "name": "rendering.desktop/linkedin" - }, - { - "duration": "3.3878596526315783", - "name": "rendering.desktop/linkedin_pinch" - }, - { - "duration": "43.139896597701146", - "name": "rendering.desktop/man_in_blue" - }, - { - "duration": "37.710862057471275", - "name": "rendering.desktop/many_images" - }, - { - "duration": "49.480912280701766", - "name": "rendering.desktop/many_planets_deep" - }, - { - "duration": "24.171798010101003", - "name": "rendering.desktop/maps_move" - }, - { - "duration": "32.766245596491224", - "name": "rendering.desktop/maps_perf_test" - }, - { - "duration": "39.50062741176471", - "name": "rendering.desktop/medium_texture_uploads" - }, - { - "duration": "23.789793080459763", - "name": "rendering.desktop/megi_dish" - }, - { - "duration": "35.78790804597701", - "name": "rendering.desktop/microsoft_asteroid_belt" - }, - { - "duration": "68.26728735632184", - "name": "rendering.desktop/microsoft_fireflies" - }, - { - "duration": "37.48194255172414", - "name": "rendering.desktop/microsoft_fish_ie_tank" - }, - { - "duration": "62.95422988505745", - "name": "rendering.desktop/microsoft_snow" - }, - { - "duration": "21.837954080459767", - "name": "rendering.desktop/microsoft_speed_reading" - }, - { - "duration": "27.232643678160922", - "name": "rendering.desktop/microsoft_tweet_map" - }, - { - "duration": "62.536022965517255", - "name": "rendering.desktop/microsoft_video_city" - }, - { - "duration": "32.924160931034486", - "name": "rendering.desktop/microsoft_worker_fountains" - }, - { - "duration": "21.976770126436783", - "name": "rendering.desktop/mix_10k" - }, - { - "duration": "30.51412987012987", - "name": "rendering.desktop/mix_blend_mode_animation_difference" - }, - { - "duration": "30.615155831168828", - "name": "rendering.desktop/mix_blend_mode_animation_hue" - }, - { - "duration": "43.37629867532468", - "name": "rendering.desktop/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "33.55527268831168", - "name": "rendering.desktop/mix_blend_mode_animation_screen" - }, - { - "duration": "31.303146033707876", - "name": "rendering.desktop/motion_mark_canvas_fill_shapes" - }, - { - "duration": "33.45737076404497", - "name": "rendering.desktop/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "35.32269477894739", - "name": "rendering.desktop/motion_mark_focus" - }, - { - "duration": "50.3807192631579", - "name": "rendering.desktop/nvidia_vertex_buffer_object" - }, - { - "duration": "63.088116805194765", - "name": "rendering.desktop/overlay_background_color_css_transitions_page" - }, - { - "duration": "55.646578982456155", - "name": "rendering.desktop/particles" - }, - { - "duration": "28.78543428282828", - "name": "rendering.desktop/pinterest" - }, - { - "duration": "28.00796551724139", - "name": "rendering.desktop/put_get_image_data" - }, - { - "duration": "38.986725529411764", - "name": "rendering.desktop/raf" - }, - { - "duration": "39.02239215686276", - "name": "rendering.desktop/raf_animation" - }, - { - "duration": "37.360176470588236", - "name": "rendering.desktop/raf_canvas" - }, - { - "duration": "28.52194117647059", - "name": "rendering.desktop/raf_touch_animation" - }, - { - "duration": "22.564643620689658", - "name": "rendering.desktop/runway" - }, - { - "duration": "82.02701754385963", - "name": "rendering.desktop/san_angeles" - }, - { - "duration": "19.457137274509805", - "name": "rendering.desktop/second_batch_js_heavy" - }, - { - "duration": "18.977627490196074", - "name": "rendering.desktop/second_batch_js_light" - }, - { - "duration": "18.990196019607836", - "name": "rendering.desktop/second_batch_js_medium" - }, - { - "duration": "23.640098058823533", - "name": "rendering.desktop/simple_text_page" - }, - { - "duration": "18.300843156862747", - "name": "rendering.desktop/simple_touch_drag" - }, - { - "duration": "32.75727450980392", - "name": "rendering.desktop/small_texture_uploads" - }, - { - "duration": "42.85482754022989", - "name": "rendering.desktop/smash_cat" - }, - { - "duration": "24.672793126436776", - "name": "rendering.desktop/spielzeugz" - }, - { - "duration": "30.928023000000014", - "name": "rendering.desktop/stroke_shapes" - }, - { - "duration": "22.939117666666668", - "name": "rendering.desktop/sync_scroll_offset" - }, - { - "duration": "56.13776771717171", - "name": "rendering.desktop/techcrunch" - }, - { - "duration": "24.469327272727266", - "name": "rendering.desktop/text_05000_pixels_per_second" - }, - { - "duration": "24.020854563636366", - "name": "rendering.desktop/text_10000_pixels_per_second" - }, - { - "duration": "20.65054545454545", - "name": "rendering.desktop/text_15000_pixels_per_second" - }, - { - "duration": "19.14403636363636", - "name": "rendering.desktop/text_20000_pixels_per_second" - }, - { - "duration": "17.57619998181818", - "name": "rendering.desktop/text_30000_pixels_per_second" - }, - { - "duration": "16.626163690909095", - "name": "rendering.desktop/text_40000_pixels_per_second" - }, - { - "duration": "15.926054445454549", - "name": "rendering.desktop/text_50000_pixels_per_second" - }, - { - "duration": "15.41870911818182", - "name": "rendering.desktop/text_60000_pixels_per_second" - }, - { - "duration": "15.051945481818183", - "name": "rendering.desktop/text_75000_pixels_per_second" - }, - { - "duration": "14.655545436363637", - "name": "rendering.desktop/text_90000_pixels_per_second" - }, - { - "duration": "48.05150909090909", - "name": "rendering.desktop/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "44.819799999999994", - "name": "rendering.desktop/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "41.31076363636364", - "name": "rendering.desktop/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "38.637363636363624", - "name": "rendering.desktop/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "35.55101814545455", - "name": "rendering.desktop/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "34.101054600000005", - "name": "rendering.desktop/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "33.53670907272727", - "name": "rendering.desktop/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "32.42318181818183", - "name": "rendering.desktop/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "31.890309109090907", - "name": "rendering.desktop/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "31.61012721818182", - "name": "rendering.desktop/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "24.225527236363636", - "name": "rendering.desktop/text_hover_05000_pixels_per_second" - }, - { - "duration": "23.847272690909094", - "name": "rendering.desktop/text_hover_10000_pixels_per_second" - }, - { - "duration": "20.492872745454548", - "name": "rendering.desktop/text_hover_15000_pixels_per_second" - }, - { - "duration": "18.67307272727272", - "name": "rendering.desktop/text_hover_20000_pixels_per_second" - }, - { - "duration": "17.13859994545454", - "name": "rendering.desktop/text_hover_30000_pixels_per_second" - }, - { - "duration": "16.357090945454548", - "name": "rendering.desktop/text_hover_40000_pixels_per_second" - }, - { - "duration": "15.755236400000005", - "name": "rendering.desktop/text_hover_50000_pixels_per_second" - }, - { - "duration": "15.352163690909087", - "name": "rendering.desktop/text_hover_60000_pixels_per_second" - }, - { - "duration": "14.989800018181821", - "name": "rendering.desktop/text_hover_75000_pixels_per_second" - }, - { - "duration": "14.668290936363643", - "name": "rendering.desktop/text_hover_90000_pixels_per_second" - }, - { - "duration": "24.310725490196074", - "name": "rendering.desktop/touch_handler_scrolling" - }, - { - "duration": "37.20437664935066", - "name": "rendering.desktop/transform_transitions" - }, - { - "duration": "25.891389597402593", - "name": "rendering.desktop/transform_transitions_js_block" - }, - { - "duration": "20.64077776767676", - "name": "rendering.desktop/twitter" - }, - { - "duration": "3.3783684280701753", - "name": "rendering.desktop/twitter_pinch" - }, - { - "duration": "28.174464626262633", - "name": "rendering.desktop/weather.com" - }, - { - "duration": "3.3067368298245614", - "name": "rendering.desktop/weather_pinch" - }, - { - "duration": "33.58861033766233", - "name": "rendering.desktop/web_animation_value_type_color" - }, - { - "duration": "36.914571480519484", - "name": "rendering.desktop/web_animation_value_type_length_3d" - }, - { - "duration": "51.65994802597403", - "name": "rendering.desktop/web_animation_value_type_length_complex" - }, - { - "duration": "52.54902597402598", - "name": "rendering.desktop/web_animation_value_type_length_simple" - }, - { - "duration": "43.3534156103896", - "name": "rendering.desktop/web_animation_value_type_path" - }, - { - "duration": "36.80436366233764", - "name": "rendering.desktop/web_animation_value_type_shadow" - }, - { - "duration": "37.93105192207791", - "name": "rendering.desktop/web_animation_value_type_transform_complex" - }, - { - "duration": "36.55677922077922", - "name": "rendering.desktop/web_animation_value_type_transform_simple" - }, - { - "duration": "30.999363623376624", - "name": "rendering.desktop/web_animations_many_keyframes" - }, - { - "duration": "35.402675272727265", - "name": "rendering.desktop/web_animations_set_current_time" - }, - { - "duration": "34.86444157142857", - "name": "rendering.desktop/web_animations_simultaneous" - }, - { - "duration": "39.442857155844145", - "name": "rendering.desktop/web_animations_staggered_chaining" - }, - { - "duration": "31.01603892207793", - "name": "rendering.desktop/web_animations_staggered_infinite_iterations" - }, - { - "duration": "44.23270127272727", - "name": "rendering.desktop/web_animations_staggered_triggering_page" - }, - { - "duration": "26.54909088888889", - "name": "rendering.desktop/wikipedia" - }, - { - "duration": "31.293232303030322", - "name": "rendering.desktop/wordpress" - }, - { - "duration": "20.350333343434354", - "name": "rendering.desktop/yahoo_answers" - }, - { - "duration": "34.34766658585858", - "name": "rendering.desktop/yahoo_games" - }, - { - "duration": "3.416350854385966", - "name": "rendering.desktop/yahoo_games_pinch" - }, - { - "duration": "25.521515161616158", - "name": "rendering.desktop/yahoo_news" - }, - { - "duration": "3.3934210614035085", - "name": "rendering.desktop/yahoo_news_pinch" - }, - { - "duration": "29.86825255555556", - "name": "rendering.desktop/yahoo_sports" - }, - { - "duration": "3.4236140140350866", - "name": "rendering.desktop/yahoo_sports_pinch" - }, - { - "duration": "9.999275E-4", - "name": "rendering.desktop/youtube" - }, - { - "duration": "0.9037543747368418", - "name": "rendering.desktop/youtube_pinch" - }, - { - "duration": "61.13627450980392", - "name": "rendering.desktop/yuv_decoding" - }, - { - "duration": "24.472397058823532", - "name": "scheduler.tough_scheduling_cases/raf" - }, - { - "duration": "24.587989909090915", - "name": "scheduler.tough_scheduling_cases/raf.html" - }, - { - "duration": "24.653264705882354", - "name": "scheduler.tough_scheduling_cases/raf_animation" - }, - { - "duration": "25.029040414141413", - "name": "scheduler.tough_scheduling_cases/raf_animation.html" - }, - { - "duration": "23.800161749999994", - "name": "scheduler.tough_scheduling_cases/raf_canvas" - }, - { - "duration": "23.790090919191933", - "name": "scheduler.tough_scheduling_cases/raf_canvas.html" - }, - { - "duration": "19.00205879411764", - "name": "scheduler.tough_scheduling_cases/raf_touch_animation" - }, - { - "duration": "18.992010101010106", - "name": "scheduler.tough_scheduling_cases/raf_touch_animation.html" - }, - { - "duration": "13.877505020202019", - "name": "scheduler.tough_scheduling_cases/second_batch_js.html?heavy" - }, - { - "duration": "13.767757611111115", - "name": "scheduler.tough_scheduling_cases/second_batch_js.html?light" - }, - { - "duration": "13.831444484848493", - "name": "scheduler.tough_scheduling_cases/second_batch_js.html?medium" - }, - { - "duration": "13.668750000000003", - "name": "scheduler.tough_scheduling_cases/second_batch_js_heavy" - }, - { - "duration": "13.620823544117647", - "name": "scheduler.tough_scheduling_cases/second_batch_js_light" - }, - { - "duration": "13.611603000000006", - "name": "scheduler.tough_scheduling_cases/second_batch_js_medium" - }, - { - "duration": "18.567088205882353", - "name": "scheduler.tough_scheduling_cases/simple_text_page" - }, - { - "duration": "18.56379798989899", - "name": "scheduler.tough_scheduling_cases/simple_text_page.html" - }, - { - "duration": "13.097647058823526", - "name": "scheduler.tough_scheduling_cases/simple_touch_drag" - }, - { - "duration": "13.02359597979798", - "name": "scheduler.tough_scheduling_cases/simple_touch_drag.html" - }, - { - "duration": "16.31858823529412", - "name": "scheduler.tough_scheduling_cases/sync_scroll_offset" - }, - { - "duration": "16.27633333333333", - "name": "scheduler.tough_scheduling_cases/sync_scroll_offset.html" - }, - { - "duration": "17.294661764705875", - "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling" - }, - { - "duration": "17.393828282828277", - "name": "scheduler.tough_scheduling_cases/touch_handler_scrolling.html" - }, - { - "duration": "47.02026266666667", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Analog_Clock_SVG" - }, - { - "duration": "42.034212060606045", - "name": "smoothness.gpu_rasterization.tough_filters_cases/Filter_Terrain_SVG" - }, - { - "duration": "31.27655554545453", - "name": "smoothness.gpu_rasterization.tough_filters_cases/IE_PirateMark" - }, - { - "duration": "28.159606080808068", - "name": "smoothness.gpu_rasterization.tough_filters_cases/MotionMark_Focus" - }, - { - "duration": "44.73479797979797", - "name": "smoothness.gpu_rasterization.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "39.503080868686844", - "name": "smoothness.gpu_rasterization.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "30.80473735353534", - "name": "smoothness.gpu_rasterization.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "28.020828282828276", - "name": "smoothness.gpu_rasterization.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "33.978393969696974", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/GUIMark_Vector_Chart_Test" - }, - { - "duration": "39.52761616161616", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/IE_Chalkboard" - }, - { - "duration": "24.75570706060605", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes" - }, - { - "duration": "24.97450503030303", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes" - }, - { - "duration": "34.286919191919196", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "39.316464666666675", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "24.777323232323226", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "24.911111111111115", - "name": "smoothness.gpu_rasterization.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "24.139727272727274", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "23.62604040404041", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "21.3340202121212", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "20.102909080808082", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "19.024292898989906", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "18.731393969696967", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "18.391777808080803", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "18.332424202020206", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "18.088616141414143", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "18.1928282979798", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "19.174616151515163", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "17.00151519191919", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "14.697949449494956", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "13.584222202020205", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "12.549333282828286", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "11.975454515151519", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "11.640474792929282", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "11.287969681818181", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "11.022626272727267", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "10.93273738383838", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "29.62589899999998", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "28.837373727272723", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "26.76528285858585", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "25.5051312929293", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "24.331373737373738", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "23.788848515151518", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "23.392353545454537", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "23.054737363636377", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "22.75467677777777", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "22.821303070707074", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "17.233848505050513", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "16.699090929292936", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "14.557090853535353", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "13.479000055555554", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "12.406818191919191", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "11.865222282828283", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "11.51534342929293", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "11.315838434343434", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "11.075717176767675", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "10.971787873737373", - "name": "smoothness.gpu_rasterization.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "39.500106060606065", - "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding" - }, - { - "duration": "39.77294943434344", - "name": "smoothness.gpu_rasterization_and_decoding.image_decoding_cases/yuv_decoding.html" - }, - { - "duration": "39.466681878787874", - "name": "smoothness.image_decoding_cases/yuv_decoding" - }, - { - "duration": "39.76793935353535", - "name": "smoothness.image_decoding_cases/yuv_decoding.html" - }, - { - "duration": "20.30612122222222", - "name": "smoothness.key_desktop_move_cases/Maps" - }, - { - "duration": "0.0149998665", - "name": "smoothness.key_desktop_move_cases/https://mail.google.com/mail/" - }, - { - "duration": "20.324313121212114", - "name": "smoothness.key_desktop_move_cases/maps_move" - }, - { - "duration": "22.772646454545463", - "name": "smoothness.maps/maps_perf_test" - }, - { - "duration": "0.0012000083799999998", - "name": "smoothness.top_25_smooth/amazon" - }, - { - "duration": "20.05152525252525", - "name": "smoothness.top_25_smooth/blogspot" - }, - { - "duration": "16.092979803030303", - "name": "smoothness.top_25_smooth/booking.com" - }, - { - "duration": "0.0011428083428571428", - "name": "smoothness.top_25_smooth/cnn" - }, - { - "duration": "14.427555540404034", - "name": "smoothness.top_25_smooth/ebay" - }, - { - "duration": "18.237343424242418", - "name": "smoothness.top_25_smooth/espn" - }, - { - "duration": "14.905333373737376", - "name": "smoothness.top_25_smooth/facebook" - }, - { - "duration": "28.360777777777788", - "name": "smoothness.top_25_smooth/gmail" - }, - { - "duration": "9.999275E-4", - "name": "smoothness.top_25_smooth/google_calendar" - }, - { - "duration": "0.00100002286", - "name": "smoothness.top_25_smooth/google_docs" - }, - { - "duration": "9.999275E-4", - "name": "smoothness.top_25_smooth/google_image_search" - }, - { - "duration": "0.0010000467", - "name": "smoothness.top_25_smooth/google_plus" - }, - { - "duration": "12.926575747474748", - "name": "smoothness.top_25_smooth/google_web_search" - }, - { - "duration": "17.966161626262622", - "name": "smoothness.top_25_smooth/linkedin" - }, - { - "duration": "19.162686888888892", - "name": "smoothness.top_25_smooth/pinterest" - }, - { - "duration": "27.67851513131313", - "name": "smoothness.top_25_smooth/techcrunch" - }, - { - "duration": "19.353363585858585", - "name": "smoothness.top_25_smooth/twitter" - }, - { - "duration": "16.58728282323232", - "name": "smoothness.top_25_smooth/weather.com" - }, - { - "duration": "20.59770707070707", - "name": "smoothness.top_25_smooth/wikipedia" - }, - { - "duration": "20.386676757575753", - "name": "smoothness.top_25_smooth/wordpress" - }, - { - "duration": "14.997666681818185", - "name": "smoothness.top_25_smooth/yahoo_answers" - }, - { - "duration": "22.070838383838375", - "name": "smoothness.top_25_smooth/yahoo_games" - }, - { - "duration": "16.81006064646465", - "name": "smoothness.top_25_smooth/yahoo_news" - }, - { - "duration": "18.20494953535354", - "name": "smoothness.top_25_smooth/yahoo_sports" - }, - { - "duration": "9.999275E-4", - "name": "smoothness.top_25_smooth/youtube" - }, - { - "duration": "23.158929303030295", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swiffy72.html" - }, - { - "duration": "22.450494949494946", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swiffy72.html" - }, - { - "duration": "22.40739396969698", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swiffy72.html" - }, - { - "duration": "22.408111131313134", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swiffy72.html" - }, - { - "duration": "22.511616181818184", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swiffy72.html" - }, - { - "duration": "22.549121202020203", - "name": "smoothness.tough_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swiffy72.html" - }, - { - "duration": "22.578878797979797", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swiffy72.html" - }, - { - "duration": "22.453515131313125", - "name": "smoothness.tough_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swiffy72.html" - }, - { - "duration": "22.578303040404037", - "name": "smoothness.tough_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swiffy72.html" - }, - { - "duration": "22.494929292929292", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swiffy72.html" - }, - { - "duration": "22.498383828282837", - "name": "smoothness.tough_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swiffy72.html" - }, - { - "duration": "25.73932224444445", - "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations" - }, - { - "duration": "28.15726669999999", - "name": "smoothness.tough_animation_cases/balls_css_key_frame_animations_composited_transform" - }, - { - "duration": "26.216313171717168", - "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations.html" - }, - { - "duration": "28.058858616161615", - "name": "smoothness.tough_animation_cases/balls_css_keyframe_animations_composited_transform.html" - }, - { - "duration": "28.971766666666664", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties" - }, - { - "duration": "28.493090909090903", - "name": "smoothness.tough_animation_cases/balls_css_transition_2_properties.html" - }, - { - "duration": "29.032222255555553", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties" - }, - { - "duration": "28.42368688888889", - "name": "smoothness.tough_animation_cases/balls_css_transition_40_properties.html" - }, - { - "duration": "29.082533366666667", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties" - }, - { - "duration": "28.276383838383854", - "name": "smoothness.tough_animation_cases/balls_css_transition_all_properties.html" - }, - { - "duration": "26.363455555555564", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas" - }, - { - "duration": "26.658929262626266", - "name": "smoothness.tough_animation_cases/balls_javascript_canvas.html" - }, - { - "duration": "25.404066655555535", - "name": "smoothness.tough_animation_cases/balls_javascript_css" - }, - { - "duration": "25.210535353535352", - "name": "smoothness.tough_animation_cases/balls_javascript_css.html" - }, - { - "duration": "26.175404460674155", - "name": "smoothness.tough_animation_cases/balls_svg_animations" - }, - { - "duration": "26.16122222222223", - "name": "smoothness.tough_animation_cases/balls_svg_animations.html" - }, - { - "duration": "37.657", - "name": "smoothness.tough_animation_cases/compositor_heavy_animation" - }, - { - "duration": "37.88841414141415", - "name": "smoothness.tough_animation_cases/compositor_heavy_animation.html?N=0200" - }, - { - "duration": "23.0479445", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes" - }, - { - "duration": "22.96879797979798", - "name": "smoothness.tough_animation_cases/css_animations_many_keyframes.html?N=0316" - }, - { - "duration": "25.378585878787884", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "24.492838323232323", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "24.517060575757572", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "24.457141404040403", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "24.72644441111111", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_inline_style" - }, - { - "duration": "25.410333355555558", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_new_element" - }, - { - "duration": "24.536533333333335", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_style_element" - }, - { - "duration": "24.652555588888884", - "name": "smoothness.tough_animation_cases/css_animations_simultaneous_updating_class" - }, - { - "duration": "47.922101010100995", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "29.002404040404038", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "27.84863639393938", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "27.87689895959596", - "name": "smoothness.tough_animation_cases/css_animations_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "23.674900033333344", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations" - }, - { - "duration": "23.501404060606056", - "name": "smoothness.tough_animation_cases/css_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "28.277011111111108", - "name": "smoothness.tough_animation_cases/css_animations_staggered_inline_style" - }, - { - "duration": "47.74937782222222", - "name": "smoothness.tough_animation_cases/css_animations_staggered_new_element" - }, - { - "duration": "29.078388899999993", - "name": "smoothness.tough_animation_cases/css_animations_staggered_style_element" - }, - { - "duration": "76.98759595959596", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "31.483585878787878", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "29.53540409090909", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "29.66405052525253", - "name": "smoothness.tough_animation_cases/css_animations_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "28.142399988888883", - "name": "smoothness.tough_animation_cases/css_animations_staggered_updating_class" - }, - { - "duration": "29.825133277777788", - "name": "smoothness.tough_animation_cases/css_animations_triggered_inline_style" - }, - { - "duration": "76.0434888888889", - "name": "smoothness.tough_animation_cases/css_animations_triggered_new_element" - }, - { - "duration": "31.666288888888896", - "name": "smoothness.tough_animation_cases/css_animations_triggered_style_element" - }, - { - "duration": "29.975388855555547", - "name": "smoothness.tough_animation_cases/css_animations_triggered_updating_class" - }, - { - "duration": "24.97868886666667", - "name": "smoothness.tough_animation_cases/css_transitions_inline_style" - }, - { - "duration": "25.82675555555555", - "name": "smoothness.tough_animation_cases/css_transitions_new_element" - }, - { - "duration": "25.490484838383832", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_new_element.html?N=0316" - }, - { - "duration": "24.612858606060605", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_inserting_style_element.html?N=0316" - }, - { - "duration": "24.756606050505052", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_class.html?N=0316" - }, - { - "duration": "24.72490907070706", - "name": "smoothness.tough_animation_cases/css_transitions_simultaneous_by_updating_inline_style.html?N=0316" - }, - { - "duration": "27.048414151515143", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_new_element.html?N=0316" - }, - { - "duration": "25.29727273737374", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_inserting_style_element.html?N=0316" - }, - { - "duration": "25.068858575757567", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_class.html?N=0316" - }, - { - "duration": "25.256878808080824", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_chaining_by_updating_inline_style.html?N=0316" - }, - { - "duration": "25.160733344444452", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_inline_style" - }, - { - "duration": "27.250344455555563", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_new_element" - }, - { - "duration": "25.57218894444443", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_style_element" - }, - { - "duration": "31.973505030303027", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_new_element.html?N=0316" - }, - { - "duration": "31.674595919191912", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_inserting_style_element.html?N=0316" - }, - { - "duration": "31.71178787878788", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_class.html?N=0316" - }, - { - "duration": "31.539989848484858", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_triggering_by_updating_inline_style.html?N=0316" - }, - { - "duration": "25.286044433333345", - "name": "smoothness.tough_animation_cases/css_transitions_staggered_updating_class" - }, - { - "duration": "25.0464444", - "name": "smoothness.tough_animation_cases/css_transitions_style_element" - }, - { - "duration": "32.122811066666664", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_inline_style" - }, - { - "duration": "31.892999988888867", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_new_element" - }, - { - "duration": "32.023111077777784", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_style_element" - }, - { - "duration": "32.00412223333333", - "name": "smoothness.tough_animation_cases/css_transitions_triggered_updating_class" - }, - { - "duration": "24.952022244444436", - "name": "smoothness.tough_animation_cases/css_transitions_updating_class" - }, - { - "duration": "23.99021108888889", - "name": "smoothness.tough_animation_cases/css_value_type_color" - }, - { - "duration": "23.954242373737383", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=css_animations&N=0316" - }, - { - "duration": "23.85488888888889", - "name": "smoothness.tough_animation_cases/css_value_type_color.html?api=web_animations&N=0316" - }, - { - "duration": "28.84884442222222", - "name": "smoothness.tough_animation_cases/css_value_type_filter" - }, - { - "duration": "28.632505060606057", - "name": "smoothness.tough_animation_cases/css_value_type_filter.html?api=css_animations&N=0316" - }, - { - "duration": "26.60374445555555", - "name": "smoothness.tough_animation_cases/css_value_type_length" - }, - { - "duration": "26.11250505050505", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=css_animations&N=0316" - }, - { - "duration": "25.79740403030304", - "name": "smoothness.tough_animation_cases/css_value_type_length_3d.html?api=web_animations&N=0316" - }, - { - "duration": "32.59159998888888", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex" - }, - { - "duration": "32.131434333333324", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=css_animations&N=0316" - }, - { - "duration": "32.30044442424243", - "name": "smoothness.tough_animation_cases/css_value_type_length_complex.html?api=web_animations&N=0316" - }, - { - "duration": "32.30755556666668", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple" - }, - { - "duration": "31.70120196969697", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=css_animations&N=0316" - }, - { - "duration": "31.993646474747464", - "name": "smoothness.tough_animation_cases/css_value_type_length_simple.html?api=web_animations&N=0316" - }, - { - "duration": "28.354466699999996", - "name": "smoothness.tough_animation_cases/css_value_type_path" - }, - { - "duration": "28.070848474747464", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=css_animations&N=0316" - }, - { - "duration": "27.88928281818181", - "name": "smoothness.tough_animation_cases/css_value_type_path.html?api=web_animations&N=0316" - }, - { - "duration": "27.358322255555553", - "name": "smoothness.tough_animation_cases/css_value_type_shadow" - }, - { - "duration": "27.585727252525256", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=css_animations&N=0316" - }, - { - "duration": "27.61830303030304", - "name": "smoothness.tough_animation_cases/css_value_type_shadow.html?api=web_animations&N=0316" - }, - { - "duration": "27.007700000000007", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex" - }, - { - "duration": "26.674353545454554", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=css_animations&N=0316" - }, - { - "duration": "26.416737363636365", - "name": "smoothness.tough_animation_cases/css_value_type_transform_complex.html?api=web_animations&N=0316" - }, - { - "duration": "26.02300003333332", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple" - }, - { - "duration": "25.750767717171716", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=css_animations&N=0316" - }, - { - "duration": "25.689393979797984", - "name": "smoothness.tough_animation_cases/css_value_type_transform_simple.html?api=web_animations&N=0316" - }, - { - "duration": "25.82474446666667", - "name": "smoothness.tough_animation_cases/keyframed_animations" - }, - { - "duration": "25.65085858585859", - "name": "smoothness.tough_animation_cases/keyframed_animations.html" - }, - { - "duration": "24.755555566666665", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference" - }, - { - "duration": "24.84221209090909", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_difference.html" - }, - { - "duration": "24.825922233333337", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue" - }, - { - "duration": "24.710787848484856", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_hue.html" - }, - { - "duration": "29.081311122222225", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_propagating_isolation" - }, - { - "duration": "25.546233333333323", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen" - }, - { - "duration": "25.437606070707073", - "name": "smoothness.tough_animation_cases/mix_blend_mode_animation_screen.html" - }, - { - "duration": "28.720858606060602", - "name": "smoothness.tough_animation_cases/mix_blend_mode_propagating_isolation.html" - }, - { - "duration": "42.37612121212121", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions.html" - }, - { - "duration": "41.99721108888889", - "name": "smoothness.tough_animation_cases/overlay_background_color_css_transitions_page" - }, - { - "duration": "9.999275E-4", - "name": "smoothness.tough_animation_cases/robohornetpro" - }, - { - "duration": "20.42112119191919", - "name": "smoothness.tough_animation_cases/transform_transition_js_block.html" - }, - { - "duration": "22.815700011111115", - "name": "smoothness.tough_animation_cases/transform_transitions" - }, - { - "duration": "22.807363606060612", - "name": "smoothness.tough_animation_cases/transform_transitions.html" - }, - { - "duration": "20.463233322222234", - "name": "smoothness.tough_animation_cases/transform_transitions_js_block" - }, - { - "duration": "23.801011088888895", - "name": "smoothness.tough_animation_cases/web_animation_value_type_color" - }, - { - "duration": "26.0178222", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_3d" - }, - { - "duration": "32.64989996666667", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_complex" - }, - { - "duration": "32.36229998888888", - "name": "smoothness.tough_animation_cases/web_animation_value_type_length_simple" - }, - { - "duration": "28.17882223333332", - "name": "smoothness.tough_animation_cases/web_animation_value_type_path" - }, - { - "duration": "27.223555522222235", - "name": "smoothness.tough_animation_cases/web_animation_value_type_shadow" - }, - { - "duration": "26.615911099999998", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_complex" - }, - { - "duration": "25.584433333333344", - "name": "smoothness.tough_animation_cases/web_animation_value_type_transform_simple" - }, - { - "duration": "23.764333388888883", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes" - }, - { - "duration": "23.74433335353534", - "name": "smoothness.tough_animation_cases/web_animations_many_keyframes.html?N=0316" - }, - { - "duration": "25.306444444444445", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time" - }, - { - "duration": "25.3824343030303", - "name": "smoothness.tough_animation_cases/web_animations_set_current_time_in_raf.html?N=0316" - }, - { - "duration": "25.148900011111117", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous" - }, - { - "duration": "25.115202030303045", - "name": "smoothness.tough_animation_cases/web_animations_simultaneous.html?N=0316" - }, - { - "duration": "27.85571108888888", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining" - }, - { - "duration": "27.742585848484854", - "name": "smoothness.tough_animation_cases/web_animations_staggered_chaining.html?N=0316" - }, - { - "duration": "23.62762223333333", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations" - }, - { - "duration": "23.472000010101013", - "name": "smoothness.tough_animation_cases/web_animations_staggered_infinite_iterations.html?N=0316" - }, - { - "duration": "29.08647473737373", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering.html?N=0316" - }, - { - "duration": "29.538400088888906", - "name": "smoothness.tough_animation_cases/web_animations_staggered_triggering_page" - }, - { - "duration": "26.028383797979807", - "name": "smoothness.tough_canvas_cases/../../../chrome/test/data/perf/canvas_bench/many_images.html" - }, - { - "duration": "24.82244790625", - "name": "smoothness.tough_canvas_cases/bouncing_balls_15" - }, - { - "duration": "21.274354145833346", - "name": "smoothness.tough_canvas_cases/bouncing_balls_shadow" - }, - { - "duration": "20.862375020833337", - "name": "smoothness.tough_canvas_cases/bouncing_clipped_rectangles" - }, - { - "duration": "23.090947927083324", - "name": "smoothness.tough_canvas_cases/bouncing_gradient_circles" - }, - { - "duration": "14.698427062500002", - "name": "smoothness.tough_canvas_cases/bouncing_png_images" - }, - { - "duration": "27.38738540624999", - "name": "smoothness.tough_canvas_cases/bouncing_svg_images" - }, - { - "duration": "41.78804166666666", - "name": "smoothness.tough_canvas_cases/canvas_animation_no_clear" - }, - { - "duration": "20.76051041666667", - "name": "smoothness.tough_canvas_cases/canvas_arcs" - }, - { - "duration": "19.97803122916667", - "name": "smoothness.tough_canvas_cases/canvas_font_cycler" - }, - { - "duration": "22.20732288541667", - "name": "smoothness.tough_canvas_cases/canvas_lines" - }, - { - "duration": "23.56866671875001", - "name": "smoothness.tough_canvas_cases/canvas_to_blob" - }, - { - "duration": "24.096802083333333", - "name": "smoothness.tough_canvas_cases/chip_tune" - }, - { - "duration": "28.066687437500004", - "name": "smoothness.tough_canvas_cases/crafty_mind" - }, - { - "duration": "22.016083364583334", - "name": "smoothness.tough_canvas_cases/effect_games" - }, - { - "duration": "21.681416687500008", - "name": "smoothness.tough_canvas_cases/fill_shapes" - }, - { - "duration": "19.059906270833334", - "name": "smoothness.tough_canvas_cases/geo_apis" - }, - { - "duration": "18.293916635416668", - "name": "smoothness.tough_canvas_cases/hakim" - }, - { - "duration": "19.06423233333333", - "name": "smoothness.tough_canvas_cases/http://geoapis.appspot.com/agdnZW9hcGlzchMLEgtFeGFtcGxlQ29kZRjh1wIM" - }, - { - "duration": "18.45953534343435", - "name": "smoothness.tough_canvas_cases/http://hakim.se/experiments/html5/magnetic/02/" - }, - { - "duration": "20.173151535353536", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/TweetMap/Default.html" - }, - { - "duration": "29.548363646464644", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/VideoCity/Default.html" - }, - { - "duration": "23.142090939393928", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html" - }, - { - "duration": "28.559424272727277", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/AsteroidBelt/Default.html" - }, - { - "duration": "24.44284849494951", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html" - }, - { - "duration": "34.526414121212106", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/LetItSnow/" - }, - { - "duration": "16.910393919191918", - "name": "smoothness.tough_canvas_cases/http://ie.microsoft.com/testdrive/Performance/SpeedReading/Default.html" - }, - { - "duration": "41.91503033333334", - "name": "smoothness.tough_canvas_cases/http://jarrodoverson.com/static/demos/particleSystem/" - }, - { - "duration": "16.91116166666667", - "name": "smoothness.tough_canvas_cases/http://mix10k.visitmix.com/Entry/Details/169" - }, - { - "duration": "15.295242398989904", - "name": "smoothness.tough_canvas_cases/http://runway.countlessprojects.com/prototype/performance_test.html" - }, - { - "duration": "19.141060606060606", - "name": "smoothness.tough_canvas_cases/http://spielzeugz.de/html5/liquid-particles.html" - }, - { - "duration": "27.56820201010101", - "name": "smoothness.tough_canvas_cases/http://themaninblue.com/experiment/AnimationBenchmark/canvas/" - }, - { - "duration": "23.70569695959596", - "name": "smoothness.tough_canvas_cases/http://www.chiptune.com/starfield/starfield.html" - }, - { - "duration": "27.974464656565644", - "name": "smoothness.tough_canvas_cases/http://www.craftymind.com/factory/guimark2/HTML5ChartingTest.html" - }, - { - "duration": "22.695020191919195", - "name": "smoothness.tough_canvas_cases/http://www.effectgames.com/demos/canvascycle/" - }, - { - "duration": "18.007848515151508", - "name": "smoothness.tough_canvas_cases/http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html" - }, - { - "duration": "17.069111090909086", - "name": "smoothness.tough_canvas_cases/http://www.megidish.net/awjs/" - }, - { - "duration": "29.079222252525252", - "name": "smoothness.tough_canvas_cases/http://www.smashcat.org/av/canvas_test/" - }, - { - "duration": "44.71519796874998", - "name": "smoothness.tough_canvas_cases/jarro_doverson" - }, - { - "duration": "17.92235411458333", - "name": "smoothness.tough_canvas_cases/kevs_3d" - }, - { - "duration": "27.48057292708332", - "name": "smoothness.tough_canvas_cases/man_in_blue" - }, - { - "duration": "24.75252086458333", - "name": "smoothness.tough_canvas_cases/many_images" - }, - { - "duration": "17.055145822916668", - "name": "smoothness.tough_canvas_cases/megi_dish" - }, - { - "duration": "26.37736461458334", - "name": "smoothness.tough_canvas_cases/microsoft_asteroid_belt" - }, - { - "duration": "24.969312479166664", - "name": "smoothness.tough_canvas_cases/microsoft_fish_ie_tank" - }, - { - "duration": "35.99058337499999", - "name": "smoothness.tough_canvas_cases/microsoft_snow" - }, - { - "duration": "16.863499979166672", - "name": "smoothness.tough_canvas_cases/microsoft_speed_reading" - }, - { - "duration": "19.985343739583335", - "name": "smoothness.tough_canvas_cases/microsoft_tweet_map" - }, - { - "duration": "31.693624989583327", - "name": "smoothness.tough_canvas_cases/microsoft_video_city" - }, - { - "duration": "23.302958343750007", - "name": "smoothness.tough_canvas_cases/microsoft_worker_fountains" - }, - { - "duration": "16.882927114583328", - "name": "smoothness.tough_canvas_cases/mix_10k" - }, - { - "duration": "21.751614583333332", - "name": "smoothness.tough_canvas_cases/put_get_image_data" - }, - { - "duration": "15.191604171874992", - "name": "smoothness.tough_canvas_cases/runway" - }, - { - "duration": "29.540416656249988", - "name": "smoothness.tough_canvas_cases/smash_cat" - }, - { - "duration": "18.93028123958334", - "name": "smoothness.tough_canvas_cases/spielzeugz" - }, - { - "duration": "21.82876039583333", - "name": "smoothness.tough_canvas_cases/stroke_shapes" - }, - { - "duration": "40.479040343434356", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-animation-no-clear.html" - }, - { - "duration": "20.061838444444444", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas-font-cycler.html" - }, - { - "duration": "21.54136362626263", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=image_with_shadow&back=image" - }, - { - "duration": "24.823686838383853", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas2d_balls_common/bouncing_balls.html?ball=text&back=white&ball_count=15" - }, - { - "duration": "23.496161585858587", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/canvas_toBlob.html" - }, - { - "duration": "20.972464626262635", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_clipped_rectangles.html" - }, - { - "duration": "23.559323282828288", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_gradient_circles.html" - }, - { - "duration": "14.799252499999996", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_png_images.html" - }, - { - "duration": "27.454303030303038", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/bouncing_svg_images.html" - }, - { - "duration": "21.280474777777787", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_arcs.html" - }, - { - "duration": "22.711181808080802", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/canvas_lines.html" - }, - { - "duration": "21.97", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/fill_shapes.html" - }, - { - "duration": "21.792666636363652", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/put_get_image_data.html" - }, - { - "duration": "22.52873737373737", - "name": "smoothness.tough_canvas_cases/tough_canvas_cases/rendering_throughput/stroke_shapes.html" - }, - { - "duration": "46.27198991919192", - "name": "smoothness.tough_filters_cases/Analog_Clock_SVG" - }, - { - "duration": "43.393757575757576", - "name": "smoothness.tough_filters_cases/Filter_Terrain_SVG" - }, - { - "duration": "30.462212070707064", - "name": "smoothness.tough_filters_cases/IE_PirateMark" - }, - { - "duration": "28.04301012121212", - "name": "smoothness.tough_filters_cases/MotionMark_Focus" - }, - { - "duration": "44.48742424242425", - "name": "smoothness.tough_filters_cases/analog_clock_svg" - }, - { - "duration": "41.813595939393956", - "name": "smoothness.tough_filters_cases/filter_terrain_svg" - }, - { - "duration": "30.577151545454544", - "name": "smoothness.tough_filters_cases/ie_pirate_mark" - }, - { - "duration": "28.038393959595965", - "name": "smoothness.tough_filters_cases/motion_mark_focus" - }, - { - "duration": "14.573687445312503", - "name": "smoothness.tough_image_decode_cases/cats_unscaled" - }, - { - "duration": "12.283750054687498", - "name": "smoothness.tough_image_decode_cases/cats_viewport_width" - }, - { - "duration": "14.571191924242424", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-unscaled.html" - }, - { - "duration": "12.243707060606056", - "name": "smoothness.tough_image_decode_cases/http://localhost:9000/cats-viewport-width.html" - }, - { - "duration": "34.085141393939395", - "name": "smoothness.tough_path_rendering_cases/GUIMark_Vector_Chart_Test" - }, - { - "duration": "39.349373757575755", - "name": "smoothness.tough_path_rendering_cases/IE_Chalkboard" - }, - { - "duration": "24.743727303030298", - "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Fill_Shapes" - }, - { - "duration": "25.05074748484848", - "name": "smoothness.tough_path_rendering_cases/MotionMark_Canvas_Stroke_Shapes" - }, - { - "duration": "34.578949", - "name": "smoothness.tough_path_rendering_cases/guimark_vector_chart" - }, - { - "duration": "38.83460206122449", - "name": "smoothness.tough_path_rendering_cases/ie_chalkboard" - }, - { - "duration": "24.641499969387766", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_fill_shapes" - }, - { - "duration": "24.777336714285703", - "name": "smoothness.tough_path_rendering_cases/motion_mark_canvas_stroke_shapes" - }, - { - "duration": "24.081828292929288", - "name": "smoothness.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "23.400141424242424", - "name": "smoothness.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "21.0396363939394", - "name": "smoothness.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "19.9001413939394", - "name": "smoothness.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "18.71334347474748", - "name": "smoothness.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "18.425525212121208", - "name": "smoothness.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "18.030484858585854", - "name": "smoothness.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "17.835696964646466", - "name": "smoothness.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "17.714929313131307", - "name": "smoothness.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "17.55384851515152", - "name": "smoothness.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "18.996010050505046", - "name": "smoothness.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "16.953777808080808", - "name": "smoothness.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "14.616313131313133", - "name": "smoothness.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "13.491969702020205", - "name": "smoothness.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "12.407232363636368", - "name": "smoothness.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "11.780232277777776", - "name": "smoothness.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "11.394040398989901", - "name": "smoothness.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "11.130525212121212", - "name": "smoothness.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "10.905686818181824", - "name": "smoothness.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "10.770515126262625", - "name": "smoothness.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "29.06941411111111", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "28.756050484848483", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "26.610494898989888", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "25.424343434343438", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "24.021202020202022", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "23.728252545454545", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "23.12317175757576", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "23.054141393939396", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "22.755000030303034", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "22.746919191919194", - "name": "smoothness.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "17.095050454545458", - "name": "smoothness.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "16.682454555555555", - "name": "smoothness.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "14.392757570707067", - "name": "smoothness.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "13.333242404040398", - "name": "smoothness.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "12.247767651515149", - "name": "smoothness.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "11.637030323232322", - "name": "smoothness.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "11.315898989898992", - "name": "smoothness.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "11.156020217171717", - "name": "smoothness.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "10.929899015151515", - "name": "smoothness.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "10.777646489898995", - "name": "smoothness.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "36.274812484375005", - "name": "smoothness.tough_texture_upload_cases/background_color_animation" - }, - { - "duration": "35.96737373737374", - "name": "smoothness.tough_texture_upload_cases/background_color_animation.html" - }, - { - "duration": "55.68976568749999", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient" - }, - { - "duration": "54.873535373737376", - "name": "smoothness.tough_texture_upload_cases/background_color_animation_with_gradient.html" - }, - { - "duration": "27.256890593750004", - "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads" - }, - { - "duration": "27.341989909090913", - "name": "smoothness.tough_texture_upload_cases/extra_large_texture_uploads.html" - }, - { - "duration": "33.566453078125", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads" - }, - { - "duration": "31.243464686868677", - "name": "smoothness.tough_texture_upload_cases/large_texture_uploads.html" - }, - { - "duration": "24.860062484375003", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads" - }, - { - "duration": "24.883404070707062", - "name": "smoothness.tough_texture_upload_cases/medium_texture_uploads.html" - }, - { - "duration": "21.516218734375002", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads" - }, - { - "duration": "21.80050505050506", - "name": "smoothness.tough_texture_upload_cases/small_texture_uploads.html" - }, - { - "duration": "23.972494969696953", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgICQ15a9NxDIARjIASgBMghBC1XuTk8ezw.swf.webglbeta.html" - }, - { - "duration": "22.468131313131316", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgIDQ2Pb-MxCsAhj6ASgBMgi5DLoSO0gPbQ.swf.webglbeta.html" - }, - { - "duration": "22.461151474747485", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCN39CopQEQoAEY2AQoATIID59gK5hjjIg.swf.webglbeta.html" - }, - { - "duration": "22.47129292929293", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgKCNj4HgyAEQeBjYBCgBMgjQpPkOjyWNdw.1.swf.webglbeta.html" - }, - { - "duration": "22.486181777777784", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CICAgMDOrcnRGRB4GNgEKAEyCP_ZBSfwUFsj.swf.webglbeta.html" - }, - { - "duration": "22.480393949494943", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/CNP2xe_LmqPEKBCsAhj6ASgBMggnyMqth81h8Q.swf.webglbeta.html" - }, - { - "duration": "22.46288887878788", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CICAgMDO7Ye9-gEQ2AUYWigBMgjZxDii6aoK9w.swf.webglbeta.html" - }, - { - "duration": "22.487222272727276", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/clip-paths-CILZhLqO_-27bxB4GNgEKAEyCC46kMLBXnMT.swf.webglbeta.html" - }, - { - "duration": "22.499414121212133", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/filters-CNLa0t2T47qJ_wEQoAEY2AQoATIIFaIdc7VMBr4.swf.webglbeta.html" - }, - { - "duration": "22.488919191919205", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CICAgMDO7cfIzwEQ1AMYPCgBMghqY8tqyRCArQ.swf.webglbeta.html" - }, - { - "duration": "22.468414141414137", - "name": "smoothness.tough_webgl_ad_cases/http://localhost:8000/shapes-CK7ptO3F8bi2KxDQAhiYAigBMgij6QBQtD2gyA.swf.webglbeta.html" - }, - { - "duration": "24.956329556818176", - "name": "smoothness.tough_webgl_cases/animometer_webgl" - }, - { - "duration": "47.10743745833332", - "name": "smoothness.tough_webgl_cases/aquarium" - }, - { - "duration": "36.54341416161618", - "name": "smoothness.tough_webgl_cases/aquarium_20k" - }, - { - "duration": "30.523749989583333", - "name": "smoothness.tough_webgl_cases/blob" - }, - { - "duration": "35.631468718750014", - "name": "smoothness.tough_webgl_cases/dynamic_cube_map" - }, - { - "duration": "26.37016666666666", - "name": "smoothness.tough_webgl_cases/earth" - }, - { - "duration": "25.428262616161618", - "name": "smoothness.tough_webgl_cases/http://kenrussell.github.io/webgl-animometer/Animometer/tests/3d/webgl.html" - }, - { - "duration": "43.850616202020184", - "name": "smoothness.tough_webgl_cases/http://webglsamples.org/aquarium/aquarium.html" - }, - { - "duration": "30.08251516161617", - "name": "smoothness.tough_webgl_cases/http://webglsamples.org/blob/blob.html" - }, - { - "duration": "35.0531313030303", - "name": "smoothness.tough_webgl_cases/http://webglsamples.org/dynamic-cubemap/dynamic-cubemap.html" - }, - { - "duration": "33.52522223232324", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/nvidia-vertex-buffer-object/index.html" - }, - { - "duration": "33.97593938383838", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/particles/index.html" - }, - { - "duration": "46.56916157575757", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/google/san-angeles/index.html" - }, - { - "duration": "27.34525251515151", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/Earth.html" - }, - { - "duration": "29.813434343434345", - "name": "smoothness.tough_webgl_cases/http://www.khronos.org/registry/webgl/sdk/demos/webkit/ManyPlanetsDeep.html" - }, - { - "duration": "24.656249875", - "name": "smoothness.tough_webgl_cases/ken_russell" - }, - { - "duration": "30.129749999999987", - "name": "smoothness.tough_webgl_cases/many_planets_deep" - }, - { - "duration": "32.15954162499998", - "name": "smoothness.tough_webgl_cases/nvidia_vertex_buffer_object" - }, - { - "duration": "35.22150002083331", - "name": "smoothness.tough_webgl_cases/particles" - }, - { - "duration": "50.90487490909091", - "name": "smoothness.tough_webgl_cases/san_angeles" - }, - { - "duration": "51.5895", - "name": "smoothness.tough_webgl_cases/sans_angeles" - }, - { - "duration": "61.063929313131325", - "name": "speedometer-future/http://browserbench.org/Speedometer/" - }, - { - "duration": "60.110767696969724", - "name": "speedometer/http://browserbench.org/Speedometer/" - }, - { - "duration": "121.68721216161619", - "name": "speedometer2-future/Speedometer2" - }, - { - "duration": "118.82542424242429", - "name": "speedometer2/Speedometer2" - }, - { - "duration": "9.999275E-4", - "name": "system_health.common_desktop/browse:media:flickr_infinite_scroll" - }, - { - "duration": "165.83420202020199", - "name": "system_health.common_desktop/browse:media:imgur" - }, - { - "duration": "113.11167684848482", - "name": "system_health.common_desktop/browse:media:pinterest" - }, - { - "duration": "9.999275E-4", - "name": "system_health.common_desktop/browse:media:tumblr" - }, - { - "duration": "125.78155545454544", - "name": "system_health.common_desktop/browse:media:youtube" - }, - { - "duration": "143.6480909090909", - "name": "system_health.common_desktop/browse:news:cnn" - }, - { - "duration": "91.15842424242426", - "name": "system_health.common_desktop/browse:news:flipboard" - }, - { - "duration": "0.0010000069666666665", - "name": "system_health.common_desktop/browse:news:hackernews" - }, - { - "duration": "154.34921212121208", - "name": "system_health.common_desktop/browse:news:nytimes" - }, - { - "duration": "115.4843030707071", - "name": "system_health.common_desktop/browse:news:reddit" - }, - { - "duration": "9.999275E-4", - "name": "system_health.common_desktop/browse:search:google" - }, - { - "duration": "66.23915151515153", - "name": "system_health.common_desktop/browse:search:google_india" - }, - { - "duration": "117.25576763636366", - "name": "system_health.common_desktop/browse:social:facebook_infinite_scroll" - }, - { - "duration": "138.31473737373736", - "name": "system_health.common_desktop/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "80.96009090909095", - "name": "system_health.common_desktop/browse:social:twitter" - }, - { - "duration": "134.326", - "name": "system_health.common_desktop/browse:social:twitter_infinite_scroll" - }, - { - "duration": "120.55096979797987", - "name": "system_health.common_desktop/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "116.02421204040398", - "name": "system_health.common_desktop/browse:tools:earth" - }, - { - "duration": "99.99894949494943", - "name": "system_health.common_desktop/browse:tools:maps" - }, - { - "duration": "42.81786868686867", - "name": "system_health.common_desktop/browse_accessibility:tech:codesearch" - }, - { - "duration": "9.999275E-4", - "name": "system_health.common_desktop/browse_accessibility:tools:gmail_compose" - }, - { - "duration": "34.96280804040405", - "name": "system_health.common_desktop/load:chrome:blank" - }, - { - "duration": "38.633787878787885", - "name": "system_health.common_desktop/load:games:alphabetty" - }, - { - "duration": "50.945939434343465", - "name": "system_health.common_desktop/load:games:bubbles" - }, - { - "duration": "36.7742222020202", - "name": "system_health.common_desktop/load:games:lazors" - }, - { - "duration": "49.47175757575758", - "name": "system_health.common_desktop/load:games:miniclip" - }, - { - "duration": "51.63056567676768", - "name": "system_health.common_desktop/load:games:spychase" - }, - { - "duration": "58.15473737373735", - "name": "system_health.common_desktop/load:media:9gag" - }, - { - "duration": "42.136596020202006", - "name": "system_health.common_desktop/load:media:dailymotion" - }, - { - "duration": "40.31307070707072", - "name": "system_health.common_desktop/load:media:google_images" - }, - { - "duration": "50.82486868686868", - "name": "system_health.common_desktop/load:media:imgur" - }, - { - "duration": "54.77246462626261", - "name": "system_health.common_desktop/load:media:soundcloud" - }, - { - "duration": "42.53483838383839", - "name": "system_health.common_desktop/load:media:youtube" - }, - { - "duration": "41.46797979797981", - "name": "system_health.common_desktop/load:news:bbc" - }, - { - "duration": "52.36899997979796", - "name": "system_health.common_desktop/load:news:cnn" - }, - { - "duration": "41.5370505050505", - "name": "system_health.common_desktop/load:news:flipboard" - }, - { - "duration": "36.03512123232325", - "name": "system_health.common_desktop/load:news:hackernews" - }, - { - "duration": "50.06537371717172", - "name": "system_health.common_desktop/load:news:nytimes" - }, - { - "duration": "59.24611119191916", - "name": "system_health.common_desktop/load:news:qq" - }, - { - "duration": "39.33218181818184", - "name": "system_health.common_desktop/load:news:reddit" - }, - { - "duration": "39.96905048484851", - "name": "system_health.common_desktop/load:news:wikipedia" - }, - { - "duration": "40.80807068686868", - "name": "system_health.common_desktop/load:search:amazon" - }, - { - "duration": "37.41196967676768", - "name": "system_health.common_desktop/load:search:baidu" - }, - { - "duration": "42.61930301010101", - "name": "system_health.common_desktop/load:search:ebay" - }, - { - "duration": "38.97145448484849", - "name": "system_health.common_desktop/load:search:google" - }, - { - "duration": "41.087575757575756", - "name": "system_health.common_desktop/load:search:taobao" - }, - { - "duration": "37.76853535353535", - "name": "system_health.common_desktop/load:search:yahoo" - }, - { - "duration": "37.62425254545455", - "name": "system_health.common_desktop/load:search:yandex" - }, - { - "duration": "41.90877781818181", - "name": "system_health.common_desktop/load:social:instagram" - }, - { - "duration": "43.41620195959595", - "name": "system_health.common_desktop/load:social:pinterest" - }, - { - "duration": "40.392808101010104", - "name": "system_health.common_desktop/load:social:vk" - }, - { - "duration": "71.10068690909092", - "name": "system_health.common_desktop/load:tools:docs" - }, - { - "duration": "65.29509086868691", - "name": "system_health.common_desktop/load:tools:drive" - }, - { - "duration": "42.341575676767675", - "name": "system_health.common_desktop/load:tools:dropbox" - }, - { - "duration": "52.2469494949495", - "name": "system_health.common_desktop/load:tools:gmail" - }, - { - "duration": "41.760797979797964", - "name": "system_health.common_desktop/load:tools:stackoverflow" - }, - { - "duration": "47.433181797979806", - "name": "system_health.common_desktop/load:tools:weather" - }, - { - "duration": "39.468191898989886", - "name": "system_health.common_desktop/load_accessibility:media:wikipedia" - }, - { - "duration": "44.216555575757596", - "name": "system_health.common_desktop/load_accessibility:shopping:amazon" - }, - { - "duration": "202.90589898989893", - "name": "system_health.common_desktop/long_running:tools:gmail-background" - }, - { - "duration": "419.0509494949496", - "name": "system_health.common_desktop/long_running:tools:gmail-foreground" - }, - { - "duration": "263.47167676767685", - "name": "system_health.common_desktop/multitab:misc:typical24" - }, - { - "duration": "9.999275E-4", - "name": "system_health.common_desktop/play:media:google_play_music" - }, - { - "duration": "0.0010000069666666665", - "name": "system_health.common_desktop/play:media:soundcloud" - }, - { - "duration": "0.00150001045", - "name": "system_health.memory_desktop/browse:media:flickr_infinite_scroll" - }, - { - "duration": "236.25115151515146", - "name": "system_health.memory_desktop/browse:media:imgur" - }, - { - "duration": "208.9163635555555", - "name": "system_health.memory_desktop/browse:media:pinterest" - }, - { - "duration": "224.63004032323227", - "name": "system_health.memory_desktop/browse:media:tumblr" - }, - { - "duration": "202.04582820202018", - "name": "system_health.memory_desktop/browse:media:youtube" - }, - { - "duration": "213.24481830303029", - "name": "system_health.memory_desktop/browse:news:cnn" - }, - { - "duration": "153.6479495353535", - "name": "system_health.memory_desktop/browse:news:flipboard" - }, - { - "duration": "0.0010000467", - "name": "system_health.memory_desktop/browse:news:hackernews" - }, - { - "duration": "217.12996961616153", - "name": "system_health.memory_desktop/browse:news:nytimes" - }, - { - "duration": "194.98735343434342", - "name": "system_health.memory_desktop/browse:news:reddit" - }, - { - "duration": "0.00139999386", - "name": "system_health.memory_desktop/browse:search:google" - }, - { - "duration": "122.51760597979793", - "name": "system_health.memory_desktop/browse:search:google_india" - }, - { - "duration": "206.32337381818184", - "name": "system_health.memory_desktop/browse:social:facebook_infinite_scroll" - }, - { - "duration": "216.03179785858583", - "name": "system_health.memory_desktop/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "148.18784850505054", - "name": "system_health.memory_desktop/browse:social:twitter" - }, - { - "duration": "0.001249968975", - "name": "system_health.memory_desktop/browse:social:twitter_infinite_scroll" - }, - { - "duration": "205.08421216161614", - "name": "system_health.memory_desktop/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "183.17530303030313", - "name": "system_health.memory_desktop/browse:tools:earth" - }, - { - "duration": "165.7054039595959", - "name": "system_health.memory_desktop/browse:tools:maps" - }, - { - "duration": "75.1309091212121", - "name": "system_health.memory_desktop/browse_accessibility:tech:codesearch" - }, - { - "duration": "0.00150001045", - "name": "system_health.memory_desktop/browse_accessibility:tools:gmail_compose" - }, - { - "duration": "63.14180799999999", - "name": "system_health.memory_desktop/load:chrome:blank" - }, - { - "duration": "69.44443436363636", - "name": "system_health.memory_desktop/load:games:alphabetty" - }, - { - "duration": "106.31801018181818", - "name": "system_health.memory_desktop/load:games:bubbles" - }, - { - "duration": "66.44978783838387", - "name": "system_health.memory_desktop/load:games:lazors" - }, - { - "duration": "84.52073740404037", - "name": "system_health.memory_desktop/load:games:miniclip" - }, - { - "duration": "88.48814136363639", - "name": "system_health.memory_desktop/load:games:spychase" - }, - { - "duration": "97.9264444747475", - "name": "system_health.memory_desktop/load:media:9gag" - }, - { - "duration": "73.98255559595961", - "name": "system_health.memory_desktop/load:media:dailymotion" - }, - { - "duration": "72.9342323434343", - "name": "system_health.memory_desktop/load:media:google_images" - }, - { - "duration": "88.1901716969697", - "name": "system_health.memory_desktop/load:media:imgur" - }, - { - "duration": "90.35386863636361", - "name": "system_health.memory_desktop/load:media:soundcloud" - }, - { - "duration": "75.94429292929289", - "name": "system_health.memory_desktop/load:media:youtube" - }, - { - "duration": "73.39986865656567", - "name": "system_health.memory_desktop/load:news:bbc" - }, - { - "duration": "86.88694950505052", - "name": "system_health.memory_desktop/load:news:cnn" - }, - { - "duration": "71.92084851515149", - "name": "system_health.memory_desktop/load:news:flipboard" - }, - { - "duration": "64.84997974747473", - "name": "system_health.memory_desktop/load:news:hackernews" - }, - { - "duration": "84.31750513131311", - "name": "system_health.memory_desktop/load:news:nytimes" - }, - { - "duration": "100.38616164646463", - "name": "system_health.memory_desktop/load:news:qq" - }, - { - "duration": "70.12904039393939", - "name": "system_health.memory_desktop/load:news:reddit" - }, - { - "duration": "72.30864643434343", - "name": "system_health.memory_desktop/load:news:wikipedia" - }, - { - "duration": "71.25581818181816", - "name": "system_health.memory_desktop/load:search:amazon" - }, - { - "duration": "66.45161616161617", - "name": "system_health.memory_desktop/load:search:baidu" - }, - { - "duration": "73.90593941414143", - "name": "system_health.memory_desktop/load:search:ebay" - }, - { - "duration": "68.55540403030301", - "name": "system_health.memory_desktop/load:search:google" - }, - { - "duration": "73.35386866666664", - "name": "system_health.memory_desktop/load:search:taobao" - }, - { - "duration": "68.41280807070706", - "name": "system_health.memory_desktop/load:search:yahoo" - }, - { - "duration": "67.77723234343435", - "name": "system_health.memory_desktop/load:search:yandex" - }, - { - "duration": "74.91384859595958", - "name": "system_health.memory_desktop/load:social:instagram" - }, - { - "duration": "78.32028277777776", - "name": "system_health.memory_desktop/load:social:pinterest" - }, - { - "duration": "72.37321208080806", - "name": "system_health.memory_desktop/load:social:vk" - }, - { - "duration": "97.93266673737376", - "name": "system_health.memory_desktop/load:tools:docs" - }, - { - "duration": "96.85987875757577", - "name": "system_health.memory_desktop/load:tools:drive" - }, - { - "duration": "72.57529293939396", - "name": "system_health.memory_desktop/load:tools:dropbox" - }, - { - "duration": "88.39255551515147", - "name": "system_health.memory_desktop/load:tools:gmail" - }, - { - "duration": "73.60488888888892", - "name": "system_health.memory_desktop/load:tools:stackoverflow" - }, - { - "duration": "80.1809999393939", - "name": "system_health.memory_desktop/load:tools:weather" - }, - { - "duration": "68.4851414040404", - "name": "system_health.memory_desktop/load_accessibility:media:wikipedia" - }, - { - "duration": "72.7581312828283", - "name": "system_health.memory_desktop/load_accessibility:shopping:amazon" - }, - { - "duration": "508.0542624242424", - "name": "system_health.memory_desktop/long_running:tools:gmail-background" - }, - { - "duration": "523.956787979798", - "name": "system_health.memory_desktop/long_running:tools:gmail-foreground" - }, - { - "duration": "385.40735359595953", - "name": "system_health.memory_desktop/multitab:misc:typical24" - }, - { - "duration": "0.0014444721666666664", - "name": "system_health.memory_desktop/play:media:google_play_music" - }, - { - "duration": "0.0013333426222222223", - "name": "system_health.memory_desktop/play:media:pandora" - }, - { - "duration": "0.00119996068", - "name": "system_health.memory_desktop/play:media:soundcloud" - }, - { - "duration": "123.30164646464648", - "name": "tab_switching.typical_25/multitab:misc:typical24" - }, - { - "duration": "66.81692923232326", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/beqojupo/1/quiet?JS_FULL_SCREEN_INVALIDATION" - }, - { - "duration": "41.662737353535334", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/covoqi/1/quiet?NEW_TILINGS" - }, - { - "duration": "28.991717202020205", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/falefice/1/quiet?CC_POSTER_CIRCLE" - }, - { - "duration": "31.326676747474743", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/giqafofe/1/quiet?JS_POSTER_CIRCLE" - }, - { - "duration": "24.11573735353535", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/jevibahi/4/quiet?JS_SCROLL_200_LAYER_GRID" - }, - { - "duration": "20.636646464646464", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/pixavefe/1/quiet?CC_SCROLL_TEXT_ONLY" - }, - { - "duration": "24.556989929292946", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/wixadinu/2/quiet?JS_SCROLL_TEXT_ONLY" - }, - { - "duration": "24.01974749494948", - "name": "thread_times.tough_compositor_cases/http://jsbin.com/yakagevo/1/quiet?CC_SCROLL_200_LAYER_GRID" - }, - { - "duration": "29.946020181818174", - "name": "thread_times.tough_scrolling_cases/canvas_05000_pixels_per_second" - }, - { - "duration": "29.458040414141408", - "name": "thread_times.tough_scrolling_cases/canvas_10000_pixels_per_second" - }, - { - "duration": "25.707363646464636", - "name": "thread_times.tough_scrolling_cases/canvas_15000_pixels_per_second" - }, - { - "duration": "24.193919212121212", - "name": "thread_times.tough_scrolling_cases/canvas_20000_pixels_per_second" - }, - { - "duration": "22.750040383838375", - "name": "thread_times.tough_scrolling_cases/canvas_30000_pixels_per_second" - }, - { - "duration": "22.045939383838384", - "name": "thread_times.tough_scrolling_cases/canvas_40000_pixels_per_second" - }, - { - "duration": "21.70447477777778", - "name": "thread_times.tough_scrolling_cases/canvas_50000_pixels_per_second" - }, - { - "duration": "21.297535333333332", - "name": "thread_times.tough_scrolling_cases/canvas_60000_pixels_per_second" - }, - { - "duration": "20.865888898989894", - "name": "thread_times.tough_scrolling_cases/canvas_75000_pixels_per_second" - }, - { - "duration": "20.64072726262626", - "name": "thread_times.tough_scrolling_cases/canvas_90000_pixels_per_second" - }, - { - "duration": "21.012656545454544", - "name": "thread_times.tough_scrolling_cases/text_05000_pixels_per_second" - }, - { - "duration": "19.18247472727273", - "name": "thread_times.tough_scrolling_cases/text_10000_pixels_per_second" - }, - { - "duration": "16.36590913131313", - "name": "thread_times.tough_scrolling_cases/text_15000_pixels_per_second" - }, - { - "duration": "14.926747429292925", - "name": "thread_times.tough_scrolling_cases/text_20000_pixels_per_second" - }, - { - "duration": "13.584626267676764", - "name": "thread_times.tough_scrolling_cases/text_30000_pixels_per_second" - }, - { - "duration": "12.876393914141426", - "name": "thread_times.tough_scrolling_cases/text_40000_pixels_per_second" - }, - { - "duration": "12.440222222222225", - "name": "thread_times.tough_scrolling_cases/text_50000_pixels_per_second" - }, - { - "duration": "12.03338381313131", - "name": "thread_times.tough_scrolling_cases/text_60000_pixels_per_second" - }, - { - "duration": "11.706303020202014", - "name": "thread_times.tough_scrolling_cases/text_75000_pixels_per_second" - }, - { - "duration": "11.508666681818179", - "name": "thread_times.tough_scrolling_cases/text_90000_pixels_per_second" - }, - { - "duration": "35.87558585858584", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_05000_pixels_per_second" - }, - { - "duration": "36.41063636363636", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_10000_pixels_per_second" - }, - { - "duration": "32.8108787979798", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_15000_pixels_per_second" - }, - { - "duration": "30.806373696969693", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_20000_pixels_per_second" - }, - { - "duration": "28.99339393939394", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_30000_pixels_per_second" - }, - { - "duration": "27.79323232323232", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_40000_pixels_per_second" - }, - { - "duration": "27.076808070707067", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_50000_pixels_per_second" - }, - { - "duration": "26.51019192929292", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_60000_pixels_per_second" - }, - { - "duration": "26.273191949494947", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_75000_pixels_per_second" - }, - { - "duration": "25.914595979797973", - "name": "thread_times.tough_scrolling_cases/text_constant_full_page_raster_90000_pixels_per_second" - }, - { - "duration": "19.432797969696974", - "name": "thread_times.tough_scrolling_cases/text_hover_05000_pixels_per_second" - }, - { - "duration": "18.965242434343427", - "name": "thread_times.tough_scrolling_cases/text_hover_10000_pixels_per_second" - }, - { - "duration": "16.321272737373743", - "name": "thread_times.tough_scrolling_cases/text_hover_15000_pixels_per_second" - }, - { - "duration": "14.841939424242428", - "name": "thread_times.tough_scrolling_cases/text_hover_20000_pixels_per_second" - }, - { - "duration": "13.453888823232319", - "name": "thread_times.tough_scrolling_cases/text_hover_30000_pixels_per_second" - }, - { - "duration": "12.675080828282827", - "name": "thread_times.tough_scrolling_cases/text_hover_40000_pixels_per_second" - }, - { - "duration": "12.259858611111111", - "name": "thread_times.tough_scrolling_cases/text_hover_50000_pixels_per_second" - }, - { - "duration": "11.91769695959596", - "name": "thread_times.tough_scrolling_cases/text_hover_60000_pixels_per_second" - }, - { - "duration": "11.68744437878788", - "name": "thread_times.tough_scrolling_cases/text_hover_75000_pixels_per_second" - }, - { - "duration": "11.448606075757576", - "name": "thread_times.tough_scrolling_cases/text_hover_90000_pixels_per_second" - }, - { - "duration": "15.119060601010101", - "name": "tracing.tracing_with_background_memory_infra/Facebook" - }, - { - "duration": "15.495262671717168", - "name": "tracing.tracing_with_background_memory_infra/Wikipedia" - }, - { - "duration": "12.997333333333332", - "name": "tracing.tracing_with_background_memory_infra/http://www.amazon.com" - }, - { - "duration": "13.77578793939394", - "name": "tracing.tracing_with_background_memory_infra/http://www.ask.com/" - }, - { - "duration": "13.233191878787887", - "name": "tracing.tracing_with_background_memory_infra/http://www.bing.com/" - }, - { - "duration": "14.379202030303036", - "name": "tracing.tracing_with_background_memory_infra/http://www.yahoo.com/" - }, - { - "duration": "15.17669696464646", - "name": "tracing.tracing_with_background_memory_infra/http://www.youtube.com" - }, - { - "duration": "15.622646484848488", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/#hl=en&q=barack+obama" - }, - { - "duration": "15.701929333333332", - "name": "tracing.tracing_with_background_memory_infra/https://www.google.com/calendar/" - }, - { - "duration": "9.999615571428572E-4", - "name": "v8.browsing_desktop-future/browse:media:flickr_infinite_scroll" - }, - { - "duration": "468.0823636363638", - "name": "v8.browsing_desktop-future/browse:media:imgur" - }, - { - "duration": "104.49812121212123", - "name": "v8.browsing_desktop-future/browse:media:pinterest" - }, - { - "duration": "135.6159493535354", - "name": "v8.browsing_desktop-future/browse:media:tumblr" - }, - { - "duration": "137.37729296969692", - "name": "v8.browsing_desktop-future/browse:media:youtube" - }, - { - "duration": "180.64040404040412", - "name": "v8.browsing_desktop-future/browse:news:cnn" - }, - { - "duration": "9.999275E-4", - "name": "v8.browsing_desktop-future/browse:news:flipboard" - }, - { - "duration": "0.0010000467", - "name": "v8.browsing_desktop-future/browse:news:hackernews" - }, - { - "duration": "185.32583828282822", - "name": "v8.browsing_desktop-future/browse:news:nytimes" - }, - { - "duration": "110.84565656565655", - "name": "v8.browsing_desktop-future/browse:news:reddit" - }, - { - "duration": "71.56818181818184", - "name": "v8.browsing_desktop-future/browse:search:google" - }, - { - "duration": "53.0928383838384", - "name": "v8.browsing_desktop-future/browse:search:google_india" - }, - { - "duration": "123.64869696969699", - "name": "v8.browsing_desktop-future/browse:social:facebook_infinite_scroll" - }, - { - "duration": "140.79785858585856", - "name": "v8.browsing_desktop-future/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "69.21239402020203", - "name": "v8.browsing_desktop-future/browse:social:twitter" - }, - { - "duration": "138.420703125", - "name": "v8.browsing_desktop-future/browse:social:twitter_infinite_scroll" - }, - { - "duration": "132.83286864646468", - "name": "v8.browsing_desktop-future/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "124.29252521212122", - "name": "v8.browsing_desktop-future/browse:tools:earth" - }, - { - "duration": "103.67870703030309", - "name": "v8.browsing_desktop-future/browse:tools:maps" - }, - { - "duration": "0.0010000069666666665", - "name": "v8.browsing_desktop/browse:media:flickr_infinite_scroll" - }, - { - "duration": "472.0866464646464", - "name": "v8.browsing_desktop/browse:media:imgur" - }, - { - "duration": "104.03253535353535", - "name": "v8.browsing_desktop/browse:media:pinterest" - }, - { - "duration": "134.88141418181823", - "name": "v8.browsing_desktop/browse:media:tumblr" - }, - { - "duration": "135.82681818181817", - "name": "v8.browsing_desktop/browse:media:youtube" - }, - { - "duration": "179.8623636363635", - "name": "v8.browsing_desktop/browse:news:cnn" - }, - { - "duration": "9.999871E-4", - "name": "v8.browsing_desktop/browse:news:flipboard" - }, - { - "duration": "0.0011428424142857143", - "name": "v8.browsing_desktop/browse:news:hackernews" - }, - { - "duration": "185.03500010101007", - "name": "v8.browsing_desktop/browse:news:nytimes" - }, - { - "duration": "110.62355555555561", - "name": "v8.browsing_desktop/browse:news:reddit" - }, - { - "duration": "71.48817171717172", - "name": "v8.browsing_desktop/browse:search:google" - }, - { - "duration": "53.10665652525254", - "name": "v8.browsing_desktop/browse:search:google_india" - }, - { - "duration": "124.86323232323235", - "name": "v8.browsing_desktop/browse:social:facebook_infinite_scroll" - }, - { - "duration": "140.9457877777777", - "name": "v8.browsing_desktop/browse:social:tumblr_infinite_scroll" - }, - { - "duration": "69.2398888888889", - "name": "v8.browsing_desktop/browse:social:twitter" - }, - { - "duration": "140.501", - "name": "v8.browsing_desktop/browse:social:twitter_infinite_scroll" - }, - { - "duration": "134.33149509090913", - "name": "v8.browsing_desktop/browse:tech:discourse_infinite_scroll" - }, - { - "duration": "123.75258585858585", - "name": "v8.browsing_desktop/browse:tools:earth" - }, - { - "duration": "103.45835353535348", - "name": "v8.browsing_desktop/browse:tools:maps" - }, - { - "duration": "9.999275E-4", - "name": "wasm/AsmJsZenGarden" - }, - { - "duration": "233.62181816161612", - "name": "wasm/WasmSpaceBuggy" - }, - { - "duration": "478.31656595959583", - "name": "wasm/WasmStylizedRenderer" - }, - { - "duration": "469.2246060606063", - "name": "wasm/WasmSunTemple" - }, - { - "duration": "132.99508089898993", - "name": "wasm/WasmTanks" - }, - { - "duration": "444.72331323232305", - "name": "wasm/WasmZenGarden" - }, - { - "duration": "83.8624848080808", - "name": "webrtc/10s_datachannel_transfer" - }, - { - "duration": "31.83834342424242", - "name": "webrtc/canvas_capture_peer_connection" - }, - { - "duration": "38.58837375757576", - "name": "webrtc/codec_constraints_h264" - }, - { - "duration": "38.91298987878789", - "name": "webrtc/codec_constraints_vp8" - }, - { - "duration": "38.68032325252526", - "name": "webrtc/codec_constraints_vp9" - }, - { - "duration": "25.756191888888882", - "name": "webrtc/hd_local_stream_10s" - }, - { - "duration": "192.94522222222224", - "name": "webrtc/multiple_peerconnections" - }, - { - "duration": "114.28617175757579", - "name": "webrtc/pause_play_peerconnections" - } -] \ No newline at end of file
diff --git a/ui/accessibility/ax_position.h b/ui/accessibility/ax_position.h index aed4869..e439ce0 100644 --- a/ui/accessibility/ax_position.h +++ b/ui/accessibility/ax_position.h
@@ -270,6 +270,11 @@ return GetNodeInTree(tree_id_, anchor_id_); } + bool IsIgnored() const { + AXNodeType* anchor = GetAnchor(); + return anchor && anchor->IsIgnored(); + } + AXPositionKind kind() const { return kind_; } int child_index() const { return child_index_; } int text_offset() const { return text_offset_; } @@ -1306,11 +1311,11 @@ // not visible to a specific platform's APIs. AXPositionInstance AsPositionBeforeCharacter() const { AXPositionInstance text_position = AsTextPosition(); - if (!text_position->AtEndOfAnchor()) + if (!text_position->AtEndOfAnchor() && !text_position->IsIgnored()) return text_position; AXPositionInstance tree_position = CreateNextLeafTreePosition(); - while (!tree_position->MaxTextOffset()) + while (!tree_position->MaxTextOffset() || tree_position->IsIgnored()) tree_position = tree_position->CreateNextLeafTreePosition(); return tree_position->AsTextPosition(); } @@ -1320,11 +1325,11 @@ // See `AsPositionBeforeCharacter`, as this is its "reversed" version. AXPositionInstance AsPositionAfterCharacter() const { AXPositionInstance text_position = AsTextPosition(); - if (!text_position->AtStartOfAnchor()) + if (!text_position->AtStartOfAnchor() && !text_position->IsIgnored()) return text_position; AXPositionInstance tree_position = CreatePreviousLeafTreePosition(); - while (!tree_position->MaxTextOffset()) + while (!tree_position->MaxTextOffset() || tree_position->IsIgnored()) tree_position = tree_position->CreatePreviousLeafTreePosition(); return tree_position->CreatePositionAtEndOfAnchor()->AsTextPosition(); } @@ -1432,7 +1437,8 @@ text_position = std::move(next_position); } while (!text_position->MaxTextOffset() || - text_position->GetWordStartOffsets().empty()); + text_position->GetWordStartOffsets().empty() || + (text_position->IsIgnored())); if (at_last_anchor_boundary) break; @@ -1513,7 +1519,8 @@ text_position = std::move(previous_position); } while (!text_position->MaxTextOffset() || - text_position->GetWordStartOffsets().empty()); + text_position->GetWordStartOffsets().empty() || + text_position->IsIgnored()); if (at_last_anchor_boundary) break; @@ -1600,7 +1607,8 @@ text_position = std::move(next_position); } while (!text_position->MaxTextOffset() || - text_position->GetWordEndOffsets().empty()); + text_position->GetWordEndOffsets().empty() || + text_position->IsIgnored()); if (at_last_anchor_boundary) break; @@ -1688,7 +1696,8 @@ text_position = std::move(previous_position); } while (!text_position->MaxTextOffset() || - text_position->GetWordStartOffsets().empty()); + text_position->GetWordStartOffsets().empty() || + text_position->IsIgnored()); if (at_last_anchor_boundary) break; @@ -2599,19 +2608,19 @@ } static bool AtStartOfPagePredicate(const AXPositionInstance& position) { - return position->AtStartOfPage(); + return !position->IsIgnored() && position->AtStartOfPage(); } static bool AtEndOfPagePredicate(const AXPositionInstance& position) { - return position->AtEndOfPage(); + return !position->IsIgnored() && position->AtEndOfPage(); } static bool AtStartOfLinePredicate(const AXPositionInstance& position) { - return position->AtStartOfLine(); + return !position->IsIgnored() && position->AtStartOfLine(); } static bool AtEndOfLinePredicate(const AXPositionInstance& position) { - return position->AtEndOfLine(); + return !position->IsIgnored() && position->AtEndOfLine(); } // Default behavior is to never abort.
diff --git a/ui/accessibility/ax_range.h b/ui/accessibility/ax_range.h index e6199bf59..80f0c0df 100644 --- a/ui/accessibility/ax_range.h +++ b/ui/accessibility/ax_range.h
@@ -243,7 +243,8 @@ // Pass -1 for max_count to retrieve all text. base::string16 GetText(AXTextConcatenationBehavior concatenation_behavior = AXTextConcatenationBehavior::kAsTextContent, - int max_count = -1) const { + int max_count = -1, + bool include_ignored = false) const { base::string16 range_text; bool should_append_newline = false; bool found_trailing_newline = false; @@ -271,8 +272,10 @@ start->IsInLineBreak() || (found_trailing_newline && start->IsInWhiteSpace()); - range_text += current_anchor_text.substr(start->text_offset(), - characters_to_append); + if (!include_ignored && !start->IsIgnored()) { + range_text += current_anchor_text.substr(start->text_offset(), + characters_to_append); + } } DCHECK(max_count < 0 || int{range_text.length()} <= max_count);
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc index 8e52e8ec..bcff2a5 100644 --- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc +++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win.cc
@@ -598,6 +598,14 @@ &end_units_moved); succeeded_move = SUCCEEDED(hr) && end_units_moved == 1; } + + // Because Windows ATs behave undesirably when the start and end endpoints + // are not in the same anchor (for character and word navigation), make + // sure to bring back the end endpoint to the end of the start's anchor. + if (start_->anchor_id() != end_->anchor_id() && + (unit == TextUnit_Character || unit == TextUnit_Word)) { + ExpandToEnclosingUnit(unit); + } } }
diff --git a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc index 169cedb..e3eca56 100644 --- a/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc +++ b/ui/accessibility/platform/ax_platform_node_textrangeprovider_win_unittest.cc
@@ -504,16 +504,24 @@ ax::mojom::IntListAttribute::kWordEnds, word_end_offsets); paragraph1_data.AddBoolAttribute( ax::mojom::BoolAttribute::kIsLineBreakingObject, true); - paragraph1_data.child_ids = {10}; + + ui::AXNodeData ignored_text_data; + ignored_text_data.id = 11; + ignored_text_data.role = ax::mojom::Role::kStaticText; + ignored_text_data.AddState(ax::mojom::State::kIgnored); + text_content = "ignored text"; + ignored_text_data.SetName(text_content); + + paragraph1_data.child_ids = {10, 11}; ui::AXNodeData paragraph2_data; - paragraph2_data.id = 11; + paragraph2_data.id = 12; paragraph2_data.role = ax::mojom::Role::kParagraph; paragraph2_data.AddBoolAttribute( ax::mojom::BoolAttribute::kIsLineBreakingObject, true); ui::AXNodeData paragraph2_text_data; - paragraph2_text_data.id = 12; + paragraph2_text_data.id = 13; paragraph2_text_data.role = ax::mojom::Role::kStaticText; text_content = "Paragraph 2"; paragraph2_text_data.SetName(text_content); @@ -525,22 +533,23 @@ ax::mojom::IntListAttribute::kWordEnds, word_end_offsets); paragraph1_data.AddBoolAttribute( ax::mojom::BoolAttribute::kIsLineBreakingObject, true); - paragraph2_data.child_ids = {12}; + paragraph2_data.child_ids = {13}; ui::AXNodeData root_data; root_data.id = 1; root_data.role = ax::mojom::Role::kRootWebArea; - root_data.child_ids = {2, 4, 8, 9, 11}; + root_data.child_ids = {2, 4, 8, 9, 12}; ui::AXTreeUpdate update; update.has_tree_data = true; update.root_id = root_data.id; - update.nodes = {root_data, group1_data, - text_data, group2_data, - line_break1_data, standalone_text_data, - line_break2_data, bold_text_data, - paragraph1_data, paragraph1_text_data, - paragraph2_data, paragraph2_text_data}; + update.nodes = {root_data, group1_data, + text_data, group2_data, + line_break1_data, standalone_text_data, + line_break2_data, bold_text_data, + paragraph1_data, paragraph1_text_data, + ignored_text_data, paragraph2_data, + paragraph2_text_data}; update.tree_data.tree_id = ui::AXTreeID::CreateNewAXTreeID(); return update; } @@ -1425,11 +1434,11 @@ /*expected_count*/ 1); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Character, /*count*/ 18, - /*expected_text*/ L"\nS", + /*expected_text*/ L"S", /*expected_count*/ 18); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Character, /*count*/ 16, - /*expected_text*/ L"\nb", + /*expected_text*/ L"b", /*expected_count*/ 16); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Character, /*count*/ 60, @@ -1723,11 +1732,11 @@ /*expected_count*/ 1); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word, /*count*/ 2, - /*expected_text*/ L"text\n", + /*expected_text*/ L"text", /*expected_count*/ 2); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word, /*count*/ 2, - /*expected_text*/ L"line\n", + /*expected_text*/ L"line", /*expected_count*/ 2); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word, /*count*/ 3, @@ -1751,11 +1760,11 @@ /*expected_count*/ -3); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word, /*count*/ -3, - /*expected_text*/ L"line\n", + /*expected_text*/ L"line", /*expected_count*/ -3); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word, /*count*/ -2, - /*expected_text*/ L"text\n", + /*expected_text*/ L"text", /*expected_count*/ -2); EXPECT_UIA_MOVE(text_range_provider, TextUnit_Word, /*count*/ -6, @@ -4430,6 +4439,7 @@ tree_update.nodes[11].id = 12; tree_update.nodes[11].role = ax::mojom::Role::kStaticText; + tree_update.nodes[11].AddState(ax::mojom::State::kIgnored); tree_update.nodes[11].SetName(".12."); tree_update.nodes[12].id = 13; @@ -4457,11 +4467,38 @@ EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 11), GetNodeFromTree(tree_id, 11)); EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 12), - GetNodeFromTree(tree_id, 12)); + GetNodeFromTree(tree_id, 6)); EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 13), GetNodeFromTree(tree_id, 13)); EXPECT_ENCLOSING_ELEMENT(GetNodeFromTree(tree_id, 14), GetNodeFromTree(tree_id, 14)); -} // namespace ui + + // Test movement and GetText() + ComPtr<ITextRangeProvider> text_range_provider; + GetTextRangeProviderFromTextNode(text_range_provider, + GetNodeFromTree(tree_id, 1)); + + ASSERT_HRESULT_SUCCEEDED( + text_range_provider->ExpandToEnclosingUnit(TextUnit_Character)); + EXPECT_UIA_TEXTRANGE_EQ(text_range_provider, L"."); + + EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT( + text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character, + /*count*/ 2, + /*expected_text*/ L".3.", + /*expected_count*/ 2); + + EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT( + text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character, + /*count*/ 6, + /*expected_text*/ L".3..4..5.", + /*expected_count*/ 6); + + EXPECT_UIA_MOVE_ENDPOINT_BY_UNIT( + text_range_provider, TextPatternRangeEndpoint_End, TextUnit_Character, + /*count*/ 12, + /*expected_text*/ L".3..4..5..13..14..11.", + /*expected_count*/ 12); +} } // namespace ui
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn index d49f0a0..d36f559 100644 --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn
@@ -317,6 +317,7 @@ "java/src/org/chromium/ui/text/SpanApplier.java", "java/src/org/chromium/ui/touchless/CursorObserver.java", "java/src/org/chromium/ui/touchless/TouchlessEventHandler.java", + "java/src/org/chromium/ui/util/TokenHolder.java", "java/src/org/chromium/ui/widget/AnchoredPopupWindow.java", "java/src/org/chromium/ui/widget/ButtonCompat.java", "java/src/org/chromium/ui/widget/CheckableImageView.java", @@ -397,6 +398,7 @@ "junit/src/org/chromium/ui/shadows/ShadowAppCompatResourcesTest.java", "junit/src/org/chromium/ui/shadows/ShadowAnimatedStateListDrawable.java", "junit/src/org/chromium/ui/text/SpanApplierTest.java", + "junit/src/org/chromium/ui/util/TokenHolderTest.java", "junit/src/org/chromium/ui/widget/AnchoredPopupWindowTest.java", "junit/src/org/chromium/ui/widget/ViewLookupCachingFrameLayoutTest.java", ]
diff --git a/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java b/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java index 8dd62b7..ff4b931 100644 --- a/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java +++ b/ui/android/java/src/org/chromium/ui/modaldialog/ModalDialogManager.java
@@ -16,12 +16,15 @@ import org.chromium.base.VisibleForTesting; import org.chromium.ui.UiSwitches; import org.chromium.ui.modelutil.PropertyModel; +import org.chromium.ui.util.TokenHolder; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -49,7 +52,7 @@ /** * Present a {@link PropertyModel} in a container. */ - public static abstract class Presenter { + public abstract static class Presenter { private Callback<Integer> mDismissCallback; private PropertyModel mDialogModel; @@ -160,6 +163,9 @@ /** Observers of this manager. */ private final ObserverList<ModalDialogManagerObserver> mObserverList = new ObserverList<>(); + /** Tokens for features temporarily suppressing dialogs. */ + private final Map<Integer, TokenHolder> mTokenHolders = new HashMap<>(); + /** * Constructor for initializing default {@link Presenter}. * @param defaultPresenter The default presenter to be used when no presenter specified. @@ -169,6 +175,11 @@ @NonNull Presenter defaultPresenter, @ModalDialogType int defaultType) { mDefaultPresenter = defaultPresenter; registerPresenter(defaultPresenter, defaultType); + + mTokenHolders.put(ModalDialogType.APP, + new TokenHolder(() -> resumeTypeInternal(ModalDialogType.APP))); + mTokenHolders.put(ModalDialogType.TAB, + new TokenHolder(() -> resumeTypeInternal(ModalDialogType.TAB))); } /** Clears any dependencies on the showing or pending dialogs. */ @@ -336,24 +347,37 @@ /** * Suspend all dialogs of the specified type, including the one currently shown. These dialogs - * will be prevented from showing unless {@link #resumeType(int)} is called after the + * will be prevented from showing unless {@link #resumeType(int, int)} is called after the * suspension. If the current dialog is suspended, it will be moved back to the first dialog * in the pending list. Any dialogs of the specified type in the pending list will be skipped. * @param dialogType The specified type of dialogs to be suspended. + * @return A token to use when resuming the suspended type. */ - public void suspendType(@ModalDialogType int dialogType) { + public int suspendType(@ModalDialogType int dialogType) { mSuspendedTypes.add(dialogType); if (isShowing() && dialogType == mCurrentType) { suspendCurrentDialog(); showNextDialog(); } + return mTokenHolders.get(dialogType).acquireToken(); } /** - * Resume the specified type of dialogs after suspension. + * Resume the specified type of dialogs after suspension. This method does not resume showing + * the dialog until after all held tokens are released. + * @param dialogType The specified type of dialogs to be resumed. + * @param token The token generated from suspending the dialog type. + */ + public void resumeType(@ModalDialogType int dialogType, int token) { + mTokenHolders.get(dialogType).releaseToken(token); + } + + /** + * Actually resumes showing the type of dialog after all tokens are released. * @param dialogType The specified type of dialogs to be resumed. */ - public void resumeType(@ModalDialogType int dialogType) { + private void resumeTypeInternal(@ModalDialogType int dialogType) { + if (mTokenHolders.get(dialogType).hasTokens()) return; mSuspendedTypes.remove(dialogType); if (!isShowing()) showNextDialog(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java b/ui/android/java/src/org/chromium/ui/util/TokenHolder.java similarity index 72% rename from chrome/android/java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java rename to ui/android/java/src/org/chromium/ui/util/TokenHolder.java index d07674c..b5124e62 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/fullscreen/TokenHolder.java +++ b/ui/android/java/src/org/chromium/ui/util/TokenHolder.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.browser.fullscreen; +package org.chromium.ui.util; import java.util.HashSet; import java.util.Set; @@ -11,7 +11,10 @@ * Helper class for holding tokens, useful when multiple entities need to manipulate the same * boolean state, e.g. visibility of a view. */ -class TokenHolder { +public class TokenHolder { + /** An invalid token; this can be used to indicate no token is being held. */ + public static final int INVALID_TOKEN = -1; + private int mNextToken; private final Set<Integer> mAcquiredTokens = new HashSet<>(); @@ -20,28 +23,28 @@ /** * @param callback is run when the token set becomes empty or non-empty. */ - TokenHolder(Runnable callback) { + public TokenHolder(Runnable callback) { mCallback = callback; } - int acquireToken() { + public int acquireToken() { int token = mNextToken++; mAcquiredTokens.add(token); if (mAcquiredTokens.size() == 1) mCallback.run(); return token; } - void releaseToken(int token) { + public void releaseToken(int token) { if (mAcquiredTokens.remove(token) && mAcquiredTokens.isEmpty()) { mCallback.run(); } } - boolean hasTokens() { + public boolean hasTokens() { return !mAcquiredTokens.isEmpty(); } - boolean containsOnly(int token) { + public boolean containsOnly(int token) { return mAcquiredTokens.size() == 1 && mAcquiredTokens.contains(token); } }
diff --git a/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java b/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java index 3980d5b..0e7e800f 100644 --- a/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java +++ b/ui/android/junit/src/org/chromium/ui/modaldialog/ModalDialogManagerTest.java
@@ -369,12 +369,12 @@ mModalDialogManager.showDialog(mDialogModels.get(2), ModalDialogType.TAB); // Suspend all tab modal dialogs. - mModalDialogManager.suspendType(ModalDialogType.TAB); + int token = mModalDialogManager.suspendType(ModalDialogType.TAB); assertFalse(mModalDialogManager.isShowing()); assertEquals(3, mModalDialogManager.getPendingDialogsForTest(ModalDialogType.TAB).size()); // Resume tab modal dialogs. - mModalDialogManager.resumeType(ModalDialogType.TAB); + mModalDialogManager.resumeType(ModalDialogType.TAB, token); assertEquals(mDialogModels.get(0), mModalDialogManager.getCurrentDialogForTest()); assertEquals(2, mModalDialogManager.getPendingDialogsForTest(ModalDialogType.TAB).size()); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java b/ui/android/junit/src/org/chromium/ui/util/TokenHolderTest.java similarity index 97% rename from chrome/android/junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java rename to ui/android/junit/src/org/chromium/ui/util/TokenHolderTest.java index 0d70c13..f278466 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/fullscreen/TokenHolderTest.java +++ b/ui/android/junit/src/org/chromium/ui/util/TokenHolderTest.java
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -package org.chromium.chrome.browser.fullscreen; +package org.chromium.ui.util; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue;
diff --git a/ui/base/clipboard/BUILD.gn b/ui/base/clipboard/BUILD.gn index 838a4e3..3e3752a 100644 --- a/ui/base/clipboard/BUILD.gn +++ b/ui/base/clipboard/BUILD.gn
@@ -72,6 +72,7 @@ deps = [ "//base", + "//mojo/public/cpp/base", "//net", "//skia", "//ui/events/platform",
diff --git a/ui/base/clipboard/DEPS b/ui/base/clipboard/DEPS index a7ba89bc..0560dac4 100644 --- a/ui/base/clipboard/DEPS +++ b/ui/base/clipboard/DEPS
@@ -1,7 +1,8 @@ include_rules = [ - "-ui/ozone/*", - "+ui/base/ui_base_jni_headers", + "+mojo/public/cpp/base", "+third_party/mozilla", + "+ui/base/ui_base_jni_headers", + "-ui/ozone/*", "+ui/ozone/buildflags.h", "+ui/ozone/public/ozone_platform.h", "+ui/ozone/public/platform_clipboard.h",
diff --git a/ui/base/clipboard/clipboard.cc b/ui/base/clipboard/clipboard.cc index 9ac9299d..a123197 100644 --- a/ui/base/clipboard/clipboard.cc +++ b/ui/base/clipboard/clipboard.cc
@@ -99,19 +99,23 @@ void Clipboard::ClearLastModifiedTime() {} -void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) { +Clipboard::Clipboard() = default; +Clipboard::~Clipboard() = default; + +void Clipboard::DispatchPortableRepresentation(PortableFormat format, + const ObjectMapParams& params) { // Ignore writes with empty parameters. for (const auto& param : params) { if (param.empty()) return; } - switch (type) { - case ObjectType::kText: + switch (format) { + case PortableFormat::kText: WriteText(&(params[0].front()), params[0].size()); break; - case ObjectType::kHtml: + case PortableFormat::kHtml: if (params.size() == 2) { if (params[1].empty()) return; @@ -122,20 +126,20 @@ } break; - case ObjectType::kRtf: + case PortableFormat::kRtf: WriteRTF(&(params[0].front()), params[0].size()); break; - case ObjectType::kBookmark: + case PortableFormat::kBookmark: WriteBookmark(&(params[0].front()), params[0].size(), &(params[1].front()), params[1].size()); break; - case ObjectType::kWebkit: + case PortableFormat::kWebkit: WriteWebSmartPaste(); break; - case ObjectType::kBitmap: { + case PortableFormat::kBitmap: { // Usually, the params are just UTF-8 strings. However, for images, // ScopedClipboardWriter actually sizes the buffer to sizeof(SkBitmap*), // aliases the contents of the vector to a SkBitmap**, and writes the @@ -145,7 +149,7 @@ break; } - case ObjectType::kData: + case PortableFormat::kData: WriteData(ClipboardFormatType::Deserialize( std::string(&(params[0].front()), params[0].size())), &(params[1].front()), params[1].size()); @@ -156,6 +160,15 @@ } } +void Clipboard::DispatchPlatformRepresentations( + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + for (const auto& representation : platform_representations) { + WriteData(ClipboardFormatType::GetType(representation.format), + reinterpret_cast<const char*>(representation.data.data()), + representation.data.size()); + } +} + base::PlatformThreadId Clipboard::GetAndValidateThreadID() { ClipboardMapLock().AssertAcquired();
diff --git a/ui/base/clipboard/clipboard.h b/ui/base/clipboard/clipboard.h index 5857b7d..6e1d1d1 100644 --- a/ui/base/clipboard/clipboard.h +++ b/ui/base/clipboard/clipboard.h
@@ -24,6 +24,7 @@ #include "base/threading/thread_checker.h" #include "base/time/time.h" #include "build/build_config.h" +#include "mojo/public/cpp/base/big_buffer.h" #include "ui/base/clipboard/clipboard_buffer.h" #include "ui/base/clipboard/clipboard_format_type.h" @@ -36,7 +37,7 @@ // Clipboard: // - reads from and writes to the system clipboard. // - specifies an ordering in which to write types to the clipboard -// (see |ObjectType|). +// (see PortableFormat). // - is generalized for all targets/operating systems. class COMPONENT_EXPORT(BASE_CLIPBOARD) Clipboard : public base::ThreadChecker { public: @@ -157,17 +158,12 @@ virtual void ClearLastModifiedTime(); protected: - static Clipboard* Create(); - - Clipboard() = default; - virtual ~Clipboard() = default; - - // ObjectType designates the type of data to be stored in the clipboard. This - // designation is shared across all OSes. The system-specific designation - // is defined by ClipboardFormatType. A single ObjectType might be represented - // by several system-specific ClipboardFormatTypes. For example, on Linux the - // kText ObjectType maps to "text/plain", "STRING", and several other - // formats. On windows it maps to CF_UNICODETEXT. + // PortableFormat designates the type of data to be stored in the clipboard. + // This designation is shared across all OSes. The system-specific designation + // is defined by ClipboardFormatType. A single PortableFormat might be + // represented by several system-specific ClipboardFormatTypes. For example, + // on Linux the kText PortableFormat maps to "text/plain", "STRING", and + // several other formats. On windows it maps to CF_UNICODETEXT. // // The order below is the order in which data will be written to the // clipboard, so more specific types must be listed before less specific @@ -175,7 +171,7 @@ // clipboard to contain a bitmap, HTML markup representing the image, a URL to // the image, and the image's alt text. Having the types follow this order // maximizes the amount of data that can be extracted by various programs. - enum class ObjectType { + enum class PortableFormat { kBitmap, // Bitmap from shared memory. kHtml, kRtf, @@ -185,8 +181,9 @@ kData, // Arbitrary block of bytes. }; - // ObjectMap is a map from ObjectType to associated data. - // The data is organized differently for each ObjectType. The following + // TODO (https://crbug.com/994928): Rename ObjectMap-related types. + // ObjectMap is a map from PortableFormat to associated data. + // The data is organized differently for each PortableFormat. The following // table summarizes what kind of data is stored for each key. // * indicates an optional argument. // @@ -194,7 +191,7 @@ // ------------------------------------- // kBitmap bitmap A pointer to a SkBitmap. The caller must ensure // the SkBitmap remains live for the duration of - // the WriteObjects call. + // the WritePortableRepresentations call. // kHtml html char array // url* char array // kRtf data byte array @@ -206,14 +203,42 @@ // data byte array using ObjectMapParam = std::vector<char>; using ObjectMapParams = std::vector<ObjectMapParam>; - using ObjectMap = base::flat_map<ObjectType, ObjectMapParams>; + using ObjectMap = base::flat_map<PortableFormat, ObjectMapParams>; + + // PlatformRepresentation is used for DispatchPlatformRepresentations, and + // supports writing directly to the system clipboard, without custom type + // mapping per platform. + struct PlatformRepresentation { + std::string format; + // BigBuffer shared memory is still writable from the renderer when backed + // by shared memory, so PlatformRepresentation's data.data() must not be + // branched on, and *data.data() must not be accessed, except to copy it + // into private memory. + mojo_base::BigBuffer data; + }; + + static Clipboard* Create(); + + Clipboard(); + virtual ~Clipboard(); // Write a bunch of objects to the system clipboard. Copies are made of the // contents of |objects|. - virtual void WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) = 0; + virtual void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) = 0; + // Write |platform_representations|, in the order of their appearance in + // |platform_representations|. + virtual void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> + platform_representations) = 0; - void DispatchObject(ObjectType type, const ObjectMapParams& params); + void DispatchPortableRepresentation(PortableFormat format, + const ObjectMapParams& params); + + // Write directly to the system clipboard. + void DispatchPlatformRepresentations( + std::vector<Clipboard::PlatformRepresentation> platform_representations); virtual void WriteText(const char* text_data, size_t text_len) = 0; @@ -233,12 +258,15 @@ virtual void WriteBitmap(const SkBitmap& bitmap) = 0; + // |data_data| is shared memory, and is still writable from the renderer. + // Therefore, |data_data| must not be branched on, and *|data_data| must not + // be accessed, except to copy it into private memory. virtual void WriteData(const ClipboardFormatType& format, const char* data_data, size_t data_len) = 0; private: - // For access to WriteObjects(). + // For access to WritePortableRepresentations(). friend class ForwardingTestingClipboard; friend class ScopedClipboardWriter; friend class TestClipboard;
diff --git a/ui/base/clipboard/clipboard_android.cc b/ui/base/clipboard/clipboard_android.cc index 8b62e3a..1568d04 100644 --- a/ui/base/clipboard/clipboard_android.cc +++ b/ui/base/clipboard/clipboard_android.cc
@@ -175,6 +175,7 @@ Java_Clipboard_setText(env, clipboard_manager_, str); } else { Java_Clipboard_clear(env, clipboard_manager_); + // TODO(huangdarwin): Implement raw clipboard support for arbitrary formats. NOTIMPLEMENTED(); } map_state_ = MapState::kUpToDate; @@ -431,14 +432,26 @@ } // Main entry point used to write several values in the clipboard. -void ClipboardAndroid::WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) { +void ClipboardAndroid::WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) { DCHECK(CalledOnValidThread()); DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste); g_map.Get().Clear(); for (const auto& object : objects) - DispatchObject(object.first, object.second); + DispatchPortableRepresentation(object.first, object.second); + + g_map.Get().CommitToAndroidClipboard(); +} + +void ClipboardAndroid::WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + DCHECK(CalledOnValidThread()); + DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste); + g_map.Get().Clear(); + + DispatchPlatformRepresentations(std::move(platform_representations)); g_map.Get().CommitToAndroidClipboard(); }
diff --git a/ui/base/clipboard/clipboard_android.h b/ui/base/clipboard/clipboard_android.h index c127416..cc149697 100644 --- a/ui/base/clipboard/clipboard_android.h +++ b/ui/base/clipboard/clipboard_android.h
@@ -83,7 +83,12 @@ std::string* result) const override; base::Time GetLastModifiedTime() const override; void ClearLastModifiedTime() override; - void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override; + void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_aura.cc b/ui/base/clipboard/clipboard_aura.cc index 9437c38..f592bbfa 100644 --- a/ui/base/clipboard/clipboard_aura.cc +++ b/ui/base/clipboard/clipboard_aura.cc
@@ -543,12 +543,23 @@ clipboard_internal_->ReadData(format.ToString(), result); } -void ClipboardAura::WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) { +void ClipboardAura::WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) { DCHECK(CalledOnValidThread()); DCHECK(IsSupportedClipboardBuffer(buffer)); for (const auto& object : objects) - DispatchObject(object.first, object.second); + DispatchPortableRepresentation(object.first, object.second); + ClipboardDataBuilder::CommitToClipboard(clipboard_internal_.get()); +} + +void ClipboardAura::WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + DCHECK(CalledOnValidThread()); + DCHECK(IsSupportedClipboardBuffer(buffer)); + + DispatchPlatformRepresentations(std::move(platform_representations)); + ClipboardDataBuilder::CommitToClipboard(clipboard_internal_.get()); }
diff --git a/ui/base/clipboard/clipboard_aura.h b/ui/base/clipboard/clipboard_aura.h index 1d879f0..39718a3 100644 --- a/ui/base/clipboard/clipboard_aura.h +++ b/ui/base/clipboard/clipboard_aura.h
@@ -46,7 +46,12 @@ void ReadBookmark(base::string16* title, std::string* url) const override; void ReadData(const ClipboardFormatType& format, std::string* result) const override; - void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override; + void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_format_type_win.cc b/ui/base/clipboard/clipboard_format_type_win.cc index 84404d1..8b3d0ee 100644 --- a/ui/base/clipboard/clipboard_format_type_win.cc +++ b/ui/base/clipboard/clipboard_format_type_win.cc
@@ -52,6 +52,8 @@ ClipboardFormatType ClipboardFormatType::Deserialize( const std::string& serialization) { int clipboard_format = -1; + // |serialization| is expected to be a string representing the Windows + // data_.cfFormat (format number) returned by GetType. if (!base::StringToInt(serialization, &clipboard_format)) { NOTREACHED(); return ClipboardFormatType();
diff --git a/ui/base/clipboard/clipboard_mac.h b/ui/base/clipboard/clipboard_mac.h index a33445f..a5f86e28 100644 --- a/ui/base/clipboard/clipboard_mac.h +++ b/ui/base/clipboard/clipboard_mac.h
@@ -54,7 +54,12 @@ void ReadBookmark(base::string16* title, std::string* url) const override; void ReadData(const ClipboardFormatType& format, std::string* result) const override; - void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override; + void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_mac.mm b/ui/base/clipboard/clipboard_mac.mm index ba36331..10c9480 100644 --- a/ui/base/clipboard/clipboard_mac.mm +++ b/ui/base/clipboard/clipboard_mac.mm
@@ -273,18 +273,28 @@ result->assign(static_cast<const char*>([data bytes]), [data length]); } -void ClipboardMac::WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) { +void ClipboardMac::WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) { DCHECK(CalledOnValidThread()); DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste); NSPasteboard* pb = GetPasteboard(); [pb declareTypes:@[] owner:nil]; - for (ObjectMap::const_iterator iter = objects.begin(); iter != objects.end(); - ++iter) { - DispatchObject(iter->first, iter->second); - } + for (const auto& object : objects) + DispatchPortableRepresentation(object.first, object.second); +} + +void ClipboardMac::WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + DCHECK(CalledOnValidThread()); + DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste); + + NSPasteboard* pb = GetPasteboard(); + [pb declareTypes:@[] owner:nil]; + + DispatchPlatformRepresentations(std::move(platform_representations)); } void ClipboardMac::WriteText(const char* text_data, size_t text_len) {
diff --git a/ui/base/clipboard/clipboard_ozone.cc b/ui/base/clipboard/clipboard_ozone.cc index 096e98e..f24c5cf 100644 --- a/ui/base/clipboard/clipboard_ozone.cc +++ b/ui/base/clipboard/clipboard_ozone.cc
@@ -458,19 +458,19 @@ result->assign(clipboard_data.begin(), clipboard_data.end()); } -void ClipboardOzone::WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) { +void ClipboardOzone::WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) { DCHECK(CalledOnValidThread()); for (const auto& object : objects) - DispatchObject(static_cast<ObjectType>(object.first), object.second); + DispatchPortableRepresentation(object.first, object.second); async_clipboard_ozone_->OfferData(buffer); // Just like Aura/X11 implementation does, copy text data from the copy/paste // selection to the primary selection. if (buffer == ClipboardBuffer::kCopyPaste) { - auto text_iter = objects.find(ObjectType::kText); + auto text_iter = objects.find(PortableFormat::kText); if (text_iter != objects.end()) { const ObjectMapParams& params_vector = text_iter->second; if (params_vector.size()) { @@ -488,6 +488,15 @@ } } +void ClipboardOzone::WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + DCHECK(CalledOnValidThread()); + DispatchPlatformRepresentations(std::move(platform_representations)); + + async_clipboard_ozone_->OfferData(buffer); +} + void ClipboardOzone::WriteText(const char* text_data, size_t text_len) { std::vector<uint8_t> data(text_data, text_data + text_len); async_clipboard_ozone_->InsertData(std::move(data), kMimeTypeText); @@ -537,7 +546,7 @@ const char* data_data, size_t data_len) { std::vector<uint8_t> data(data_data, data_data + data_len); - async_clipboard_ozone_->InsertData(data, format.ToString()); + async_clipboard_ozone_->InsertData(std::move(data), format.ToString()); } } // namespace ui
diff --git a/ui/base/clipboard/clipboard_ozone.h b/ui/base/clipboard/clipboard_ozone.h index 56c1ebd..8dcdddb3 100644 --- a/ui/base/clipboard/clipboard_ozone.h +++ b/ui/base/clipboard/clipboard_ozone.h
@@ -48,7 +48,12 @@ void ReadBookmark(base::string16* title, std::string* url) const override; void ReadData(const ClipboardFormatType& format, std::string* result) const override; - void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override; + void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len,
diff --git a/ui/base/clipboard/clipboard_test_template.h b/ui/base/clipboard/clipboard_test_template.h index f93d31f..59d4591 100644 --- a/ui/base/clipboard/clipboard_test_template.h +++ b/ui/base/clipboard/clipboard_test_template.h
@@ -522,7 +522,7 @@ } // namespace -TYPED_TEST(ClipboardTest, DataTest) { +TYPED_TEST(ClipboardTest, PickleTest) { const ui::ClipboardFormatType kFormat = ui::ClipboardFormatType::GetType("chromium/x-test-format"); std::string payload("test string"); @@ -547,7 +547,7 @@ EXPECT_EQ(payload, unpickled_string); } -TYPED_TEST(ClipboardTest, MultipleDataTest) { +TYPED_TEST(ClipboardTest, MultiplePickleTest) { const ui::ClipboardFormatType kFormat1 = ui::ClipboardFormatType::GetType("chromium/x-test-format1"); std::string payload1("test string1"); @@ -567,6 +567,8 @@ clipboard_writer.WritePickledData(write_pickle2, kFormat2); } + ASSERT_FALSE(this->clipboard().IsFormatAvailable( + kFormat1, ClipboardBuffer::kCopyPaste)); ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat2, ClipboardBuffer::kCopyPaste)); @@ -590,6 +592,8 @@ ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat1, ClipboardBuffer::kCopyPaste)); + ASSERT_FALSE(this->clipboard().IsFormatAvailable( + kFormat2, ClipboardBuffer::kCopyPaste)); // Check string 1. std::string output1; @@ -603,6 +607,74 @@ EXPECT_EQ(payload1, unpickled_string1); } +TYPED_TEST(ClipboardTest, DataTest) { + const std::string kFormatString = "chromium/x-test-format"; + const ui::ClipboardFormatType kFormat = + ui::ClipboardFormatType::GetType(kFormatString); + const std::string payload = "test string"; + base::span<const uint8_t> payload_span( + reinterpret_cast<const uint8_t*>(payload.data()), payload.size()); + + { + ScopedClipboardWriter clipboard_writer(ClipboardBuffer::kCopyPaste); + clipboard_writer.WriteData(UTF8ToUTF16(kFormatString), + mojo_base::BigBuffer(payload_span)); + } + + ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat, + ClipboardBuffer::kCopyPaste)); + std::string output; + this->clipboard().ReadData(kFormat, &output); + + EXPECT_EQ(payload, output); +} + +// TODO(huangdarwin): Implement multiple raw types for AuraClipboard. This test +// currently doesn't run on AuraClipboard because AuraClipboard only supports +// one raw type. +#if (!defined(USE_AURA) || defined(OS_WIN) || defined(USE_OZONE) || \ + defined(USE_X11)) && \ + !defined(OS_CHROMEOS) +TYPED_TEST(ClipboardTest, MultipleDataTest) { + const std::string kFormatString1 = "chromium/x-test-format1"; + const ui::ClipboardFormatType kFormat1 = + ui::ClipboardFormatType::GetType(kFormatString1); + const std::string payload1("test string1"); + base::span<const uint8_t> payload_span1( + reinterpret_cast<const uint8_t*>(payload1.data()), payload1.size()); + + const std::string kFormatString2 = "chromium/x-test-format2"; + const ui::ClipboardFormatType kFormat2 = + ui::ClipboardFormatType::GetType(kFormatString2); + const std::string payload2("test string2"); + base::span<const uint8_t> payload_span2( + reinterpret_cast<const uint8_t*>(payload2.data()), payload2.size()); + + { + ScopedClipboardWriter clipboard_writer(ClipboardBuffer::kCopyPaste); + // Both payloads should write successfully and not overwrite one another. + clipboard_writer.WriteData(UTF8ToUTF16(kFormatString1), + mojo_base::BigBuffer(payload_span1)); + clipboard_writer.WriteData(UTF8ToUTF16(kFormatString2), + mojo_base::BigBuffer(payload_span2)); + } + + // Check format 1. + ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat1, + ClipboardBuffer::kCopyPaste)); + std::string output1; + this->clipboard().ReadData(kFormat1, &output1); + EXPECT_EQ(payload1, output1); + + // Check format 2. + ASSERT_TRUE(this->clipboard().IsFormatAvailable(kFormat2, + ClipboardBuffer::kCopyPaste)); + std::string output2; + this->clipboard().ReadData(kFormat2, &output2); + EXPECT_EQ(payload2, output2); +} +#endif + #if !defined(OS_MACOSX) && !defined(OS_ANDROID) TYPED_TEST(ClipboardTest, HyperlinkTest) { const std::string kTitle("The <Example> Company's \"home page\"");
diff --git a/ui/base/clipboard/clipboard_win.cc b/ui/base/clipboard/clipboard_win.cc index 34c13c2..00a096c 100644 --- a/ui/base/clipboard/clipboard_win.cc +++ b/ui/base/clipboard/clipboard_win.cc
@@ -557,8 +557,8 @@ ::GlobalUnlock(data); } -void ClipboardWin::WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) { +void ClipboardWin::WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) { DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste); ScopedClipboard clipboard; @@ -568,7 +568,21 @@ ::EmptyClipboard(); for (const auto& object : objects) - DispatchObject(object.first, object.second); + DispatchPortableRepresentation(object.first, object.second); +} + +void ClipboardWin::WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + DCHECK_EQ(buffer, ClipboardBuffer::kCopyPaste); + + ScopedClipboard clipboard; + if (!clipboard.Acquire(GetClipboardWindow())) + return; + + ::EmptyClipboard(); + + DispatchPlatformRepresentations(std::move(platform_representations)); } void ClipboardWin::WriteText(const char* text_data, size_t text_len) {
diff --git a/ui/base/clipboard/clipboard_win.h b/ui/base/clipboard/clipboard_win.h index c9fe938a..a6ae530 100644 --- a/ui/base/clipboard/clipboard_win.h +++ b/ui/base/clipboard/clipboard_win.h
@@ -57,7 +57,12 @@ void ReadBookmark(base::string16* title, std::string* url) const override; void ReadData(const ClipboardFormatType& format, std::string* result) const override; - void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override; + void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len, @@ -73,7 +78,6 @@ void WriteData(const ClipboardFormatType& format, const char* data_data, size_t data_len) override; - void WriteBitmapFromHandle(HBITMAP source_hbitmap, const gfx::Size& size); // Safely write to system clipboard. Free |handle| on failure.
diff --git a/ui/base/clipboard/clipboard_x11.cc b/ui/base/clipboard/clipboard_x11.cc index 6870873a..7a1155d 100644 --- a/ui/base/clipboard/clipboard_x11.cc +++ b/ui/base/clipboard/clipboard_x11.cc
@@ -679,18 +679,18 @@ data.AssignTo(result); } -void ClipboardX11::WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) { +void ClipboardX11::WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) { DCHECK(CalledOnValidThread()); DCHECK(IsSupportedClipboardBuffer(buffer)); x11_details_->CreateNewClipboardData(); for (const auto& object : objects) - DispatchObject(object.first, object.second); + DispatchPortableRepresentation(object.first, object.second); x11_details_->TakeOwnershipOfSelection(buffer); if (buffer == ClipboardBuffer::kCopyPaste) { - auto text_iter = objects.find(ObjectType::kText); + auto text_iter = objects.find(PortableFormat::kText); if (text_iter != objects.end()) { x11_details_->CreateNewClipboardData(); const ObjectMapParams& params_vector = text_iter->second; @@ -704,6 +704,17 @@ } } +void ClipboardX11::WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + DCHECK(CalledOnValidThread()); + DCHECK(IsSupportedClipboardBuffer(buffer)); + + x11_details_->CreateNewClipboardData(); + DispatchPlatformRepresentations(std::move(platform_representations)); + x11_details_->TakeOwnershipOfSelection(buffer); +} + void ClipboardX11::WriteText(const char* text_data, size_t text_len) { std::string str(text_data, text_len); scoped_refptr<base::RefCountedMemory> mem(
diff --git a/ui/base/clipboard/clipboard_x11.h b/ui/base/clipboard/clipboard_x11.h index 32e16c3..f348eff 100644 --- a/ui/base/clipboard/clipboard_x11.h +++ b/ui/base/clipboard/clipboard_x11.h
@@ -47,7 +47,12 @@ void ReadBookmark(base::string16* title, std::string* url) const override; void ReadData(const ClipboardFormatType& format, std::string* result) const override; - void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override; + void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len,
diff --git a/ui/base/clipboard/scoped_clipboard_writer.cc b/ui/base/clipboard/scoped_clipboard_writer.cc index f64398c..aea904e 100644 --- a/ui/base/clipboard/scoped_clipboard_writer.cc +++ b/ui/base/clipboard/scoped_clipboard_writer.cc
@@ -18,8 +18,19 @@ : buffer_(buffer) {} ScopedClipboardWriter::~ScopedClipboardWriter() { - if (!objects_.empty()) - Clipboard::GetForCurrentThread()->WriteObjects(buffer_, objects_); + static constexpr size_t kMaxRepresentations = 1 << 12; + DCHECK(objects_.empty() || platform_representations_.empty()) + << "Portable and Platform representations should not be written on the " + "same write."; + DCHECK(platform_representations_.size() < kMaxRepresentations); + if (!objects_.empty()) { + Clipboard::GetForCurrentThread()->WritePortableRepresentations(buffer_, + objects_); + } + if (!platform_representations_.empty()) { + Clipboard::GetForCurrentThread()->WritePlatformRepresentations( + buffer_, std::move(platform_representations_)); + } } void ScopedClipboardWriter::WriteText(const base::string16& text) { @@ -28,7 +39,7 @@ Clipboard::ObjectMapParams parameters; parameters.push_back( Clipboard::ObjectMapParam(utf8_text.begin(), utf8_text.end())); - objects_[Clipboard::ObjectType::kText] = parameters; + objects_[Clipboard::PortableFormat::kText] = parameters; } void ScopedClipboardWriter::WriteHTML(const base::string16& markup, @@ -44,14 +55,14 @@ source_url.end())); } - objects_[Clipboard::ObjectType::kHtml] = parameters; + objects_[Clipboard::PortableFormat::kHtml] = parameters; } void ScopedClipboardWriter::WriteRTF(const std::string& rtf_data) { Clipboard::ObjectMapParams parameters; parameters.push_back(Clipboard::ObjectMapParam(rtf_data.begin(), rtf_data.end())); - objects_[Clipboard::ObjectType::kRtf] = parameters; + objects_[Clipboard::PortableFormat::kRtf] = parameters; } void ScopedClipboardWriter::WriteBookmark(const base::string16& bookmark_title, @@ -65,7 +76,7 @@ parameters.push_back(Clipboard::ObjectMapParam(utf8_markup.begin(), utf8_markup.end())); parameters.push_back(Clipboard::ObjectMapParam(url.begin(), url.end())); - objects_[Clipboard::ObjectType::kBookmark] = parameters; + objects_[Clipboard::PortableFormat::kBookmark] = parameters; } void ScopedClipboardWriter::WriteHyperlink(const base::string16& anchor_text, @@ -83,7 +94,7 @@ } void ScopedClipboardWriter::WriteWebSmartPaste() { - objects_[Clipboard::ObjectType::kWebkit] = Clipboard::ObjectMapParams(); + objects_[Clipboard::PortableFormat::kWebkit] = Clipboard::ObjectMapParams(); } void ScopedClipboardWriter::WriteImage(const SkBitmap& bitmap) { @@ -100,7 +111,7 @@ *reinterpret_cast<SkBitmap**>(&*packed_pointer.begin()) = bitmap_pointer; Clipboard::ObjectMapParams parameters; parameters.push_back(packed_pointer); - objects_[Clipboard::ObjectType::kBitmap] = parameters; + objects_[Clipboard::PortableFormat::kBitmap] = parameters; } void ScopedClipboardWriter::WritePickledData( @@ -118,21 +129,26 @@ Clipboard::ObjectMapParams parameters; parameters.push_back(format_parameter); parameters.push_back(data_parameter); - objects_[Clipboard::ObjectType::kData] = parameters; + objects_[Clipboard::PortableFormat::kData] = parameters; } -void ScopedClipboardWriter::WriteData(const std::string& type, - const std::string& data) { - Clipboard::ObjectMapParam type_parameter(type.begin(), type.end()); - Clipboard::ObjectMapParam data_parameter(data.begin(), data.end()); - Clipboard::ObjectMapParams parameters; - parameters.push_back(type_parameter); - parameters.push_back(data_parameter); - objects_[Clipboard::ObjectType::kData] = parameters; +void ScopedClipboardWriter::WriteData(const base::string16& format, + mojo_base::BigBuffer data) { + // Conservative limit to maximum format and data string size, to avoid + // potential attacks with long strings. Callers should implement similar + // checks. + constexpr size_t kMaxFormatSize = 1024; + constexpr size_t kMaxDataSize = 1 << 30; // 1 GB + DCHECK_LT(format.size(), kMaxFormatSize); + DCHECK_LT(data.size(), kMaxDataSize); + + platform_representations_.push_back( + {base::UTF16ToUTF8(format), std::move(data)}); } void ScopedClipboardWriter::Reset() { objects_.clear(); + platform_representations_.clear(); bitmap_.reset(); }
diff --git a/ui/base/clipboard/scoped_clipboard_writer.h b/ui/base/clipboard/scoped_clipboard_writer.h index 506ee4d..741de36 100644 --- a/ui/base/clipboard/scoped_clipboard_writer.h +++ b/ui/base/clipboard/scoped_clipboard_writer.h
@@ -61,8 +61,9 @@ void WritePickledData(const base::Pickle& pickle, const ClipboardFormatType& format); - // Adds custom data to clipboard. - void WriteData(const std::string& type, const std::string& data); + // Data is written to the system clipboard in the same order as WriteData + // calls are received. + void WriteData(const base::string16& format, mojo_base::BigBuffer data); void WriteImage(const SkBitmap& bitmap); @@ -71,9 +72,13 @@ private: // We accumulate the data passed to the various targets in the |objects_| - // vector, and pass it to Clipboard::WriteObjects() during object destruction. + // vector, and pass it to Clipboard::WritePortableRepresentations() during + // object destruction. Clipboard::ObjectMap objects_; + std::vector<Clipboard::PlatformRepresentation> platform_representations_; + + // The type is set at construction, and can be changed before committing. const ClipboardBuffer buffer_; SkBitmap bitmap_; @@ -84,4 +89,3 @@ } // namespace ui #endif // UI_BASE_CLIPBOARD_SCOPED_CLIPBOARD_WRITER_H_ -
diff --git a/ui/base/clipboard/test/test_clipboard.cc b/ui/base/clipboard/test/test_clipboard.cc index 55746f6..abe2cb5 100644 --- a/ui/base/clipboard/test/test_clipboard.cc +++ b/ui/base/clipboard/test/test_clipboard.cc
@@ -149,12 +149,21 @@ last_modified_time_ = base::Time(); } -void TestClipboard::WriteObjects(ClipboardBuffer buffer, - const ObjectMap& objects) { +void TestClipboard::WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) { Clear(buffer); default_store_buffer_ = buffer; for (const auto& kv : objects) - DispatchObject(kv.first, kv.second); + DispatchPortableRepresentation(kv.first, kv.second); + default_store_buffer_ = ClipboardBuffer::kCopyPaste; +} + +void TestClipboard::WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) { + Clear(buffer); + default_store_buffer_ = buffer; + DispatchPlatformRepresentations(std::move(platform_representations)); default_store_buffer_ = ClipboardBuffer::kCopyPaste; }
diff --git a/ui/base/clipboard/test/test_clipboard.h b/ui/base/clipboard/test/test_clipboard.h index b89ba4e..4542efc 100644 --- a/ui/base/clipboard/test/test_clipboard.h +++ b/ui/base/clipboard/test/test_clipboard.h
@@ -58,7 +58,12 @@ std::string* result) const override; base::Time GetLastModifiedTime() const override; void ClearLastModifiedTime() override; - void WriteObjects(ClipboardBuffer buffer, const ObjectMap& objects) override; + void WritePortableRepresentations(ClipboardBuffer buffer, + const ObjectMap& objects) override; + void WritePlatformRepresentations( + ClipboardBuffer buffer, + std::vector<Clipboard::PlatformRepresentation> platform_representations) + override; void WriteText(const char* text_data, size_t text_len) override; void WriteHTML(const char* markup_data, size_t markup_len,
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc index 485b881..7431de3b 100644 --- a/ui/views/controls/button/checkbox.cc +++ b/ui/views/controls/button/checkbox.cc
@@ -60,6 +60,8 @@ // Checkboxes always have a focus ring, even when the platform otherwise // doesn't generally use them for buttons. SetInstallFocusRingOnFocus(true); + focus_ring()->SetPathGenerator( + std::make_unique<FocusRingHighlightPathGenerator>()); } Checkbox::~Checkbox() = default;