shelf_button_pressed_metric_tracker.cc 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. // Copyright 2015 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/shelf/shelf_button_pressed_metric_tracker.h"
  5. #include "ash/metrics/user_metrics_recorder.h"
  6. #include "ash/shell.h"
  7. #include "base/metrics/histogram_macros.h"
  8. #include "base/metrics/user_metrics.h"
  9. #include "base/time/default_tick_clock.h"
  10. #include "ui/views/controls/button/button.h"
  11. namespace ash {
  12. const char ShelfButtonPressedMetricTracker::
  13. kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName[] =
  14. "Ash.Shelf.TimeBetweenWindowMinimizedAndActivatedActions";
  15. ShelfButtonPressedMetricTracker::ShelfButtonPressedMetricTracker()
  16. : tick_clock_(base::DefaultTickClock::GetInstance()) {}
  17. ShelfButtonPressedMetricTracker::~ShelfButtonPressedMetricTracker() = default;
  18. void ShelfButtonPressedMetricTracker::ButtonPressed(
  19. const ui::Event& event,
  20. const views::Button* sender,
  21. ShelfAction performed_action) {
  22. RecordButtonPressedSource(event);
  23. RecordButtonPressedAction(performed_action);
  24. switch (performed_action) {
  25. case SHELF_ACTION_WINDOW_MINIMIZED:
  26. SetMinimizedData(sender);
  27. break;
  28. case SHELF_ACTION_WINDOW_ACTIVATED:
  29. if (IsSubsequentActivationEvent(sender))
  30. RecordTimeBetweenMinimizedAndActivated();
  31. break;
  32. default:
  33. break;
  34. }
  35. if (performed_action != SHELF_ACTION_WINDOW_MINIMIZED)
  36. ResetMinimizedData();
  37. }
  38. void ShelfButtonPressedMetricTracker::RecordButtonPressedSource(
  39. const ui::Event& event) {
  40. // NOTE: These metrics are called "launcher" instead of "shelf" because the
  41. // original name of the shelf UI was "launcher".
  42. if (event.IsMouseEvent()) {
  43. base::RecordAction(base::UserMetricsAction("Launcher_ButtonPressed_Mouse"));
  44. } else if (event.IsGestureEvent()) {
  45. base::RecordAction(base::UserMetricsAction("Launcher_ButtonPressed_Touch"));
  46. }
  47. }
  48. void ShelfButtonPressedMetricTracker::RecordButtonPressedAction(
  49. ShelfAction performed_action) {
  50. switch (performed_action) {
  51. case SHELF_ACTION_NONE:
  52. case SHELF_ACTION_APP_LIST_SHOWN:
  53. case SHELF_ACTION_APP_LIST_DISMISSED:
  54. case SHELF_ACTION_APP_LIST_BACK:
  55. break;
  56. case SHELF_ACTION_NEW_WINDOW_CREATED:
  57. base::RecordAction(base::UserMetricsAction("Launcher_LaunchTask"));
  58. Shell::Get()->metrics()->task_switch_metrics_recorder().OnTaskSwitch(
  59. TaskSwitchSource::SHELF);
  60. break;
  61. case SHELF_ACTION_WINDOW_ACTIVATED:
  62. base::RecordAction(base::UserMetricsAction("Launcher_SwitchTask"));
  63. Shell::Get()->metrics()->task_switch_metrics_recorder().OnTaskSwitch(
  64. TaskSwitchSource::SHELF);
  65. break;
  66. case SHELF_ACTION_WINDOW_MINIMIZED:
  67. base::RecordAction(base::UserMetricsAction("Launcher_MinimizeTask"));
  68. break;
  69. }
  70. }
  71. void ShelfButtonPressedMetricTracker::RecordTimeBetweenMinimizedAndActivated() {
  72. UMA_HISTOGRAM_TIMES(
  73. kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName,
  74. tick_clock_->NowTicks() - time_of_last_minimize_);
  75. }
  76. bool ShelfButtonPressedMetricTracker::IsSubsequentActivationEvent(
  77. const views::Button* sender) const {
  78. return time_of_last_minimize_ != base::TimeTicks() &&
  79. last_minimized_source_button_ == sender;
  80. }
  81. void ShelfButtonPressedMetricTracker::SetMinimizedData(
  82. const views::Button* sender) {
  83. last_minimized_source_button_ = sender;
  84. time_of_last_minimize_ = tick_clock_->NowTicks();
  85. }
  86. void ShelfButtonPressedMetricTracker::ResetMinimizedData() {
  87. last_minimized_source_button_ = nullptr;
  88. time_of_last_minimize_ = base::TimeTicks();
  89. }
  90. } // namespace ash