| // Copyright 2015 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 ASH_SHELF_SHELF_BUTTON_PRESSED_METRIC_TRACKER_H_ |
| #define ASH_SHELF_SHELF_BUTTON_PRESSED_METRIC_TRACKER_H_ |
| |
| #include <memory> |
| |
| #include "ash/ash_export.h" |
| #include "ash/public/interfaces/shelf.mojom.h" |
| #include "base/macros.h" |
| #include "base/time/tick_clock.h" |
| #include "base/time/time.h" |
| #include "ui/events/event.h" |
| |
| namespace views { |
| class Button; |
| } // namespace views |
| |
| namespace ash { |
| |
| // Tracks UMA metrics based on shelf button press actions. More specifically |
| // data is added to the following user actions and histograms: |
| // |
| // User Actions: |
| // - Launcher_ButtonPressed_Mouse |
| // - Launcher_ButtonPressed_Touch |
| // - Launcher_LaunchTask |
| // - Launcher_MinimizeTask |
| // - Launcher_SwitchTask |
| // Histograms: |
| // - Ash.Shelf.TimeBetweenWindowMinimizedAndActivatedActions |
| // |
| class ASH_EXPORT ShelfButtonPressedMetricTracker { |
| public: |
| static const char |
| kTimeBetweenWindowMinimizedAndActivatedActionsHistogramName[]; |
| |
| ShelfButtonPressedMetricTracker(); |
| ~ShelfButtonPressedMetricTracker(); |
| |
| // Records metrics based on the |event|, |sender|, and |performed_action|. |
| void ButtonPressed(const ui::Event& event, |
| const views::Button* sender, |
| ShelfAction performed_action); |
| |
| private: |
| friend class ShelfButtonPressedMetricTrackerTestAPI; |
| |
| // Records UMA metrics for the input source when a button is pressed. |
| void RecordButtonPressedSource(const ui::Event& event); |
| |
| // Records UMA metrics for the action performed when a button is pressed. |
| void RecordButtonPressedAction(ShelfAction performed_action); |
| |
| // Records UMA metrics for the elapsed time since the last window minimize |
| // action. |
| void RecordTimeBetweenMinimizedAndActivated(); |
| |
| // Returns true if a window activation action triggered by |sender| would |
| // be subsequent to the last minimize window action. |
| bool IsSubsequentActivationEvent(const views::Button* sender) const; |
| |
| // Caches state data for a window minimized action. The |sender| is the button |
| // that caused the action. |
| void SetMinimizedData(const views::Button* sender); |
| |
| // Resets the state data associated with the last window minimize action. |
| void ResetMinimizedData(); |
| |
| // Time source for performed action times. |
| const base::TickClock* tick_clock_; |
| |
| // Stores the time of the last window minimize action. |
| base::TimeTicks time_of_last_minimize_; |
| |
| // Stores the source button of the last window minimize action. |
| // NOTE: This may become stale and should not be operated on. Not owned. |
| const views::Button* last_minimized_source_button_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ShelfButtonPressedMetricTracker); |
| }; |
| |
| } // namespace ash |
| |
| #endif // ASH_SHELF_SHELF_BUTTON_PRESSED_METRIC_TRACKER_H_ |