blob: 6c29a1bb590e2626ac20550261cddd3c0b6daa25 [file] [log] [blame]
// 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_