blob: fad0a944fdea2c09f35a5c62a54d5c2bf04ba1ea [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.
#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 {
static const char
// Records metrics based on the |event|, |sender|, and |performed_action|.
void ButtonPressed(const ui::Event& event,
const views::Button* sender,
ShelfAction performed_action);
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.
std::unique_ptr<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_;
} // namespace ash