Commit 5c7aad22 authored by Xiyuan Xia's avatar Xiyuan Xia Committed by Commit Bot

app_list: Use ThroughputTracker for paging/folder metrics

This wires ThroughputTracker for metrics of apps grid pagination
animation and folder show/hide animation

Bug: 1021774
Change-Id: If731c8d21f6ffd7c75104d4fe75052ccf6909fc8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2241343Reviewed-by: default avatarSammie Quon <sammiequon@chromium.org>
Commit-Queue: Xiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#777519}
parent f9fb418e
...@@ -306,53 +306,17 @@ bool IsCommandIdAnAppLaunch(int command_id_number) { ...@@ -306,53 +306,17 @@ bool IsCommandIdAnAppLaunch(int command_id_number) {
return false; return false;
} }
PaginationTransitionAnimationReporter::PaginationTransitionAnimationReporter() = void ReportPaginationSmoothness(bool is_tablet_mode, int smoothness) {
default; UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothness,
smoothness);
PaginationTransitionAnimationReporter:: if (is_tablet_mode) {
~PaginationTransitionAnimationReporter() = default;
void PaginationTransitionAnimationReporter::Report(int value) {
UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothness, value);
if (is_tablet_mode_) {
UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothnessInTablet, UMA_HISTOGRAM_PERCENTAGE(kPaginationTransitionAnimationSmoothnessInTablet,
value); smoothness);
} else { } else {
UMA_HISTOGRAM_PERCENTAGE( UMA_HISTOGRAM_PERCENTAGE(
kPaginationTransitionAnimationSmoothnessInClamshell, value); kPaginationTransitionAnimationSmoothnessInClamshell, smoothness);
} }
} }
AppListAnimationMetricsRecorder::AppListAnimationMetricsRecorder(
ui::AnimationMetricsReporter* reporter)
: ui::AnimationMetricsRecorder(reporter) {}
AppListAnimationMetricsRecorder::~AppListAnimationMetricsRecorder() = default;
void AppListAnimationMetricsRecorder::OnAnimationStart(
base::TimeDelta expected_duration,
ui::Compositor* compositor) {
if (!compositor)
return;
animation_started_ = true;
ui::AnimationMetricsRecorder::OnAnimationStart(
compositor->activated_frame_count(), base::TimeTicks::Now(),
expected_duration);
}
void AppListAnimationMetricsRecorder::OnAnimationEnd(
ui::Compositor* compositor) {
if (!animation_started_)
return;
animation_started_ = false;
if (!compositor)
return;
ui::AnimationMetricsRecorder::OnAnimationEnd(
compositor->activated_frame_count(), compositor->refresh_rate());
}
} // namespace ash } // namespace ash
...@@ -8,14 +8,8 @@ ...@@ -8,14 +8,8 @@
#include "ash/app_list/app_list_export.h" #include "ash/app_list/app_list_export.h"
#include "ash/public/cpp/app_list/app_list_types.h" #include "ash/public/cpp/app_list/app_list_types.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "ui/compositor/animation_metrics_recorder.h"
#include "ui/compositor/animation_metrics_reporter.h"
#include "ui/events/event.h" #include "ui/events/event.h"
namespace ui {
class Compositor;
}
namespace ash { namespace ash {
class AppListModel; class AppListModel;
...@@ -337,43 +331,8 @@ APP_LIST_EXPORT void RecordAppListAppLaunched(AppListLaunchedFrom launched_from, ...@@ -337,43 +331,8 @@ APP_LIST_EXPORT void RecordAppListAppLaunched(AppListLaunchedFrom launched_from,
APP_LIST_EXPORT bool IsCommandIdAnAppLaunch(int command_id); APP_LIST_EXPORT bool IsCommandIdAnAppLaunch(int command_id);
class PaginationTransitionAnimationReporter APP_LIST_EXPORT void ReportPaginationSmoothness(bool is_tablet_mode,
: public ui::AnimationMetricsReporter { int smoothness);
public:
PaginationTransitionAnimationReporter();
PaginationTransitionAnimationReporter(
PaginationTransitionAnimationReporter&) = delete;
PaginationTransitionAnimationReporter& operator=(
PaginationTransitionAnimationReporter&) = delete;
~PaginationTransitionAnimationReporter() override;
// ui:AnimationMetricsReporter:
void Report(int value) override;
void set_is_tablet_mode(bool val) { is_tablet_mode_ = val; }
private:
bool is_tablet_mode_ = false;
};
// App list specific animation metrics recorder which has a pointer to the
// compositor the app list to simplify things for callsites.
class AppListAnimationMetricsRecorder : public ui::AnimationMetricsRecorder {
public:
explicit AppListAnimationMetricsRecorder(
ui::AnimationMetricsReporter* reporter);
AppListAnimationMetricsRecorder(AppListAnimationMetricsRecorder&) = delete;
AppListAnimationMetricsRecorder& operator=(AppListAnimationMetricsRecorder&) =
delete;
~AppListAnimationMetricsRecorder();
void OnAnimationStart(base::TimeDelta expected_duration,
ui::Compositor* compositor);
void OnAnimationEnd(ui::Compositor* compositor);
private:
bool animation_started_ = false;
};
} // namespace ash } // namespace ash
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "ash/keyboard/ui/keyboard_ui_controller.h" #include "ash/keyboard/ui/keyboard_ui_controller.h"
#include "ash/public/cpp/app_list/app_list_config.h" #include "ash/public/cpp/app_list/app_list_config.h"
#include "ash/public/cpp/app_list/app_list_features.h" #include "ash/public/cpp/app_list/app_list_features.h"
#include "ash/public/cpp/metrics_util.h"
#include "ash/public/cpp/pagination/pagination_model.h" #include "ash/public/cpp/pagination/pagination_model.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "ui/accessibility/ax_node_data.h" #include "ui/accessibility/ax_node_data.h"
...@@ -473,13 +474,6 @@ AppListFolderView::AppListFolderView(AppsContainerView* container_view, ...@@ -473,13 +474,6 @@ AppListFolderView::AppListFolderView(AppsContainerView* container_view,
contents_view_->app_list_view()->is_tablet_mode())); contents_view_->app_list_view()->is_tablet_mode()));
view_model_->Add(page_switcher_, kIndexPageSwitcher); view_model_->Add(page_switcher_, kIndexPageSwitcher);
show_hide_metrics_reporter_ =
std::make_unique<ui::HistogramPercentageMetricsReporter<
kFolderShowHideAnimationSmoothness>>();
show_hide_metrics_recorder_ =
std::make_unique<AppListAnimationMetricsRecorder>(
show_hide_metrics_reporter_.get());
model_->AddObserver(this); model_->AddObserver(this);
} }
...@@ -506,9 +500,13 @@ void AppListFolderView::SetAppListFolderItem(AppListFolderItem* folder) { ...@@ -506,9 +500,13 @@ void AppListFolderView::SetAppListFolderItem(AppListFolderItem* folder) {
void AppListFolderView::ScheduleShowHideAnimation(bool show, void AppListFolderView::ScheduleShowHideAnimation(bool show,
bool hide_for_reparent) { bool hide_for_reparent) {
CreateOpenOrCloseFolderAccessibilityEvent(show); CreateOpenOrCloseFolderAccessibilityEvent(show);
show_hide_metrics_recorder_->OnAnimationStart( show_hide_metrics_tracker_ =
GetAppListConfig().folder_transition_in_duration(), GetWidget()->GetCompositor()->RequestNewThroughputTracker();
GetWidget()->GetCompositor()); show_hide_metrics_tracker_->Start(
metrics_util::ForSmoothness(base::BindRepeating([](int smoothness) {
UMA_HISTOGRAM_PERCENTAGE(kFolderShowHideAnimationSmoothness,
smoothness);
})));
hide_for_reparent_ = hide_for_reparent; hide_for_reparent_ = hide_for_reparent;
...@@ -673,7 +671,12 @@ AppListItemView* AppListFolderView::GetActivatedFolderItemView() { ...@@ -673,7 +671,12 @@ AppListItemView* AppListFolderView::GetActivatedFolderItemView() {
} }
void AppListFolderView::RecordAnimationSmoothness() { void AppListFolderView::RecordAnimationSmoothness() {
show_hide_metrics_recorder_->OnAnimationEnd(GetWidget()->GetCompositor()); // RecordAnimationSmoothness is called when ContentsContainerAnimation
// ends as well. Do not record show/hide metrics for that.
if (show_hide_metrics_tracker_) {
show_hide_metrics_tracker_->Stop();
show_hide_metrics_tracker_.reset();
}
} }
void AppListFolderView::OnTabletModeChanged(bool started) { void AppListFolderView::OnTabletModeChanged(bool started) {
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "ash/app_list/views/folder_header_view_delegate.h" #include "ash/app_list/views/folder_header_view_delegate.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "ui/compositor/throughput_tracker.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/view.h" #include "ui/views/view.h"
#include "ui/views/view_model.h" #include "ui/views/view_model.h"
...@@ -195,8 +196,7 @@ class APP_LIST_EXPORT AppListFolderView : public views::View, ...@@ -195,8 +196,7 @@ class APP_LIST_EXPORT AppListFolderView : public views::View,
std::unique_ptr<Animation> contents_container_animation_; std::unique_ptr<Animation> contents_container_animation_;
// Records smoothness of the folder show/hide animation. // Records smoothness of the folder show/hide animation.
std::unique_ptr<AppListAnimationMetricsRecorder> show_hide_metrics_recorder_; base::Optional<ui::ThroughputTracker> show_hide_metrics_tracker_;
std::unique_ptr<ui::AnimationMetricsReporter> show_hide_metrics_reporter_;
DISALLOW_COPY_AND_ASSIGN(AppListFolderView); DISALLOW_COPY_AND_ASSIGN(AppListFolderView);
}; };
......
...@@ -31,7 +31,9 @@ ...@@ -31,7 +31,9 @@
#include "ash/public/cpp/app_list/app_list_features.h" #include "ash/public/cpp/app_list/app_list_features.h"
#include "ash/public/cpp/app_list/app_list_switches.h" #include "ash/public/cpp/app_list/app_list_switches.h"
#include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/ash_features.h"
#include "ash/public/cpp/metrics_util.h"
#include "ash/public/cpp/pagination/pagination_controller.h" #include "ash/public/cpp/pagination/pagination_controller.h"
#include "base/bind.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/guid.h" #include "base/guid.h"
#include "base/macros.h" #include "base/macros.h"
...@@ -450,12 +452,6 @@ AppsGridView::AppsGridView(ContentsView* contents_view, ...@@ -450,12 +452,6 @@ AppsGridView::AppsGridView(ContentsView* contents_view,
: base::BindRepeating(&AppListRecordPageSwitcherSourceByEventType), : base::BindRepeating(&AppListRecordPageSwitcherSourceByEventType),
IsTabletMode()); IsTabletMode());
bounds_animator_->AddObserver(this); bounds_animator_->AddObserver(this);
pagination_metrics_reporter_ =
std::make_unique<PaginationTransitionAnimationReporter>();
pagination_metrics_recorder_ =
std::make_unique<AppListAnimationMetricsRecorder>(
pagination_metrics_reporter_.get());
} }
AppsGridView::~AppsGridView() { AppsGridView::~AppsGridView() {
...@@ -3066,9 +3062,10 @@ void AppsGridView::TransitionStarted() { ...@@ -3066,9 +3062,10 @@ void AppsGridView::TransitionStarted() {
Layout(); Layout();
} }
pagination_metrics_recorder_->OnAnimationStart( pagination_metrics_tracker_ =
pagination_model_.GetTransitionAnimationSlideDuration(), GetWidget()->GetCompositor()->RequestNewThroughputTracker();
GetWidget()->GetCompositor()); pagination_metrics_tracker_->Start(metrics_util::ForSmoothness(
base::BindRepeating(&ReportPaginationSmoothness, IsTabletMode())));
} }
void AppsGridView::TransitionChanged() { void AppsGridView::TransitionChanged() {
...@@ -3107,8 +3104,7 @@ void AppsGridView::TransitionChanged() { ...@@ -3107,8 +3104,7 @@ void AppsGridView::TransitionChanged() {
} }
void AppsGridView::TransitionEnded() { void AppsGridView::TransitionEnded() {
pagination_metrics_reporter_->set_is_tablet_mode(IsTabletMode()); pagination_metrics_tracker_->Stop();
pagination_metrics_recorder_->OnAnimationEnd(GetWidget()->GetCompositor());
// Gradient mask is no longer necessary once transition is finished. // Gradient mask is no longer necessary once transition is finished.
if (layer()->layer_mask_layer()) if (layer()->layer_mask_layer())
......
...@@ -23,10 +23,12 @@ ...@@ -23,10 +23,12 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/optional.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "ui/base/models/list_model_observer.h" #include "ui/base/models/list_model_observer.h"
#include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/throughput_tracker.h"
#include "ui/events/keycodes/keyboard_codes_posix.h" #include "ui/events/keycodes/keyboard_codes_posix.h"
#include "ui/gfx/image/image_skia_operations.h" #include "ui/gfx/image/image_skia_operations.h"
#include "ui/views/animation/bounds_animator.h" #include "ui/views/animation/bounds_animator.h"
...@@ -875,9 +877,7 @@ class APP_LIST_EXPORT AppsGridView : public views::View, ...@@ -875,9 +877,7 @@ class APP_LIST_EXPORT AppsGridView : public views::View,
bool cardified_state_ = false; bool cardified_state_ = false;
// Records smoothness of pagination animation. // Records smoothness of pagination animation.
std::unique_ptr<AppListAnimationMetricsRecorder> pagination_metrics_recorder_; base::Optional<ui::ThroughputTracker> pagination_metrics_tracker_;
std::unique_ptr<PaginationTransitionAnimationReporter>
pagination_metrics_reporter_;
// Records the presentation time for apps grid dragging. // Records the presentation time for apps grid dragging.
std::unique_ptr<PresentationTimeRecorder> presentation_time_recorder_; std::unique_ptr<PresentationTimeRecorder> presentation_time_recorder_;
......
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/simple_menu_model.h" #include "ui/base/models/simple_menu_model.h"
#include "ui/base/ui_base_features.h" #include "ui/base/ui_base_features.h"
#include "ui/compositor/animation_metrics_reporter.h"
#include "ui/compositor/layer.h" #include "ui/compositor/layer.h"
#include "ui/compositor/layer_animation_observer.h" #include "ui/compositor/layer_animation_observer.h"
#include "ui/compositor/layer_animator.h" #include "ui/compositor/layer_animator.h"
......
...@@ -33,7 +33,11 @@ class PageSwitchWaiter : public ash::PaginationModelObserver { ...@@ -33,7 +33,11 @@ class PageSwitchWaiter : public ash::PaginationModelObserver {
private: private:
// ash::PaginationModelObserver: // ash::PaginationModelObserver:
void TransitionEnded() override { run_loop_.Quit(); } void TransitionEnded() override {
// Needs one frame presented after transition animation ends to get
// the metrics recorded.
ash::ShellTestApi().WaitForNextFrame(run_loop_.QuitClosure());
}
ash::PaginationModel* model_; ash::PaginationModel* model_;
base::RunLoop run_loop_; base::RunLoop run_loop_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment