blob: 52876953d0e3d9135f9b44956dba312e7978f6c3 [file] [log] [blame]
James Cookb0bf8e82017-04-09 17:01:441// 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
5#include "ash/shelf/shelf_button_pressed_metric_tracker.h"
6
Scott Violet41562d1c2017-06-26 15:15:487#include "ash/metrics/user_metrics_recorder.h"
8#include "ash/shell.h"
James Cookb0bf8e82017-04-09 17:01:449#include "base/metrics/histogram_macros.h"
10#include "base/time/default_tick_clock.h"
11#include "ui/views/controls/button/button.h"
12
13namespace ash {
14
15const char ShelfButtonPressedMetricTracker::
16 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName[] =
17 "Ash.Shelf.TimeBetweenWindowMinimizedAndActivatedActions";
18
19ShelfButtonPressedMetricTracker::ShelfButtonPressedMetricTracker()
tzik8529bdd82018-02-28 05:47:2120 : tick_clock_(base::DefaultTickClock::GetInstance()),
James Cookb0bf8e82017-04-09 17:01:4421 time_of_last_minimize_(base::TimeTicks()),
22 last_minimized_source_button_(nullptr) {}
23
Chris Watkinsc24daf62017-11-28 03:43:0924ShelfButtonPressedMetricTracker::~ShelfButtonPressedMetricTracker() = default;
James Cookb0bf8e82017-04-09 17:01:4425
26void ShelfButtonPressedMetricTracker::ButtonPressed(
27 const ui::Event& event,
28 const views::Button* sender,
29 ShelfAction performed_action) {
30 RecordButtonPressedSource(event);
31 RecordButtonPressedAction(performed_action);
32
33 switch (performed_action) {
34 case SHELF_ACTION_WINDOW_MINIMIZED:
35 SetMinimizedData(sender);
36 break;
37 case SHELF_ACTION_WINDOW_ACTIVATED:
38 if (IsSubsequentActivationEvent(sender))
39 RecordTimeBetweenMinimizedAndActivated();
40 break;
41 default:
42 break;
43 }
44
45 if (performed_action != SHELF_ACTION_WINDOW_MINIMIZED)
46 ResetMinimizedData();
47}
48
49void ShelfButtonPressedMetricTracker::RecordButtonPressedSource(
50 const ui::Event& event) {
51 if (event.IsMouseEvent()) {
Scott Violet41562d1c2017-06-26 15:15:4852 Shell::Get()->metrics()->RecordUserMetricsAction(
James Cookb0bf8e82017-04-09 17:01:4453 UMA_LAUNCHER_BUTTON_PRESSED_WITH_MOUSE);
54 } else if (event.IsGestureEvent()) {
Scott Violet41562d1c2017-06-26 15:15:4855 Shell::Get()->metrics()->RecordUserMetricsAction(
James Cookb0bf8e82017-04-09 17:01:4456 UMA_LAUNCHER_BUTTON_PRESSED_WITH_TOUCH);
57 }
58}
59
60void ShelfButtonPressedMetricTracker::RecordButtonPressedAction(
61 ShelfAction performed_action) {
62 switch (performed_action) {
63 case SHELF_ACTION_NONE:
64 case SHELF_ACTION_APP_LIST_SHOWN:
Avery Musbach62773662019-01-15 00:16:5665 case SHELF_ACTION_APP_LIST_DISMISSED:
Matthew Mourgos4c287d62019-10-25 22:46:1666 case SHELF_ACTION_APP_LIST_BACK:
James Cookb0bf8e82017-04-09 17:01:4467 break;
68 case SHELF_ACTION_NEW_WINDOW_CREATED:
Scott Violet41562d1c2017-06-26 15:15:4869 Shell::Get()->metrics()->RecordUserMetricsAction(
70 UMA_LAUNCHER_LAUNCH_TASK);
James Cookb0bf8e82017-04-09 17:01:4471 break;
72 case SHELF_ACTION_WINDOW_ACTIVATED:
Scott Violet41562d1c2017-06-26 15:15:4873 Shell::Get()->metrics()->RecordUserMetricsAction(
74 UMA_LAUNCHER_SWITCH_TASK);
James Cookb0bf8e82017-04-09 17:01:4475 break;
76 case SHELF_ACTION_WINDOW_MINIMIZED:
Scott Violet41562d1c2017-06-26 15:15:4877 Shell::Get()->metrics()->RecordUserMetricsAction(
78 UMA_LAUNCHER_MINIMIZE_TASK);
James Cookb0bf8e82017-04-09 17:01:4479 break;
80 }
81}
82
83void ShelfButtonPressedMetricTracker::RecordTimeBetweenMinimizedAndActivated() {
84 UMA_HISTOGRAM_TIMES(
85 kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName,
86 tick_clock_->NowTicks() - time_of_last_minimize_);
87}
88
89bool ShelfButtonPressedMetricTracker::IsSubsequentActivationEvent(
90 const views::Button* sender) const {
91 return time_of_last_minimize_ != base::TimeTicks() &&
92 last_minimized_source_button_ == sender;
93}
94
95void ShelfButtonPressedMetricTracker::SetMinimizedData(
96 const views::Button* sender) {
97 last_minimized_source_button_ = sender;
98 time_of_last_minimize_ = tick_clock_->NowTicks();
99}
100
101void ShelfButtonPressedMetricTracker::ResetMinimizedData() {
102 last_minimized_source_button_ = nullptr;
103 time_of_last_minimize_ = base::TimeTicks();
104}
105
106} // namespace ash