15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef ASH_USER_METRICS_RECORDER_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define ASH_USER_METRICS_RECORDER_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/ash_export.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/timer/timer.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace ash {
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)enum UserMetricsAction {
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_KEYBOARD_BRIGHTNESS_DOWN_F6,
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_KEYBOARD_BRIGHTNESS_UP_F7,
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON,
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON,
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_MAXIMIZE_RESTORE_F4,
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_PREVWINDOW_F5,
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_EXIT_FIRST_Q,
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_EXIT_SECOND_Q,
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_ACCEL_SHUT_DOWN_POWER_BUTTON,
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_CLOSE_THROUGH_CONTEXT_MENU,
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_DRAG_MAXIMIZE_LEFT,
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_DRAG_MAXIMIZE_RIGHT,
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_GESTURE_OVERVIEW,
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_LAUNCHER_CLICK_ON_APP,
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_LAUNCHER_CLICK_ON_APPLIST_BUTTON,
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_MOUSE_DOWN,
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_PANEL_MINIMIZE_CAPTION_CLICK,
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_PANEL_MINIMIZE_CAPTION_GESTURE,
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_SHELF_ALIGNMENT_SET_BOTTOM,
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_SHELF_ALIGNMENT_SET_LEFT,
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_SHELF_ALIGNMENT_SET_RIGHT,
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_AUDIO_CURRENT_INPUT_DEVICE,
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_AUDIO_CURRENT_OUTPUT_DEVICE,
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_AUDIO_SWITCH_INPUT_DEVICE,
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_AUDIO_SWITCH_OUTPUT_DEVICE,
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_BRIGHTNESS_CHANGED,
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_BLUETOOTH_CONNECT_KNOWN_DEVICE,
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_BLUETOOTH_CONNECT_UNKNOWN_DEVICE,
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_BLUETOOTH_DISABLED,
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_BLUETOOTH_ENABLED,
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CAPS_LOCK_DETAILED,
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CAPS_LOCK_DISABLED_BY_CLICK,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CAPS_LOCK_ENABLED_BY_CLICK,
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CAPS_LOCK_POPUP,
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CONNECT_TO_CONFIGURED_NETWORK,
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CONNECT_TO_UNCONFIGURED_NETWORK,
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CONNECT_TO_VPN,
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CHANGED_VOLUME_MENU,
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_CHANGED_VOLUME_POPUP,
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DETAILED_ACCESSABILITY,
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DETAILED_AUDIO_VIEW,
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DETAILED_BLUETOOTH_VIEW,
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DETAILED_BRIGHTNESS_VIEW,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DETAILED_DRIVE_VIEW,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DETAILED_NETWORK_VIEW,
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DETAILED_VPN_VIEW,
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DISABLE_AUTO_CLICK,
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DISABLE_HIGH_CONTRAST,
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DISABLE_LARGE_CURSOR,
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DISABLE_MAGNIFIER,
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK,
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DISABLE_WIFI,
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD,
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DRIVE_CANCEL_OPERATION,
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_DRIVE_SETTINGS,
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_ENABLE_AUTO_CLICK,
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_ENABLE_HIGH_CONTRAST,
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_ENABLE_LARGE_CURSOR,
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_ENABLE_MAGNIFIER,
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK,
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_ENABLE_WIFI,
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD,
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_IME_SHOW_DETAILED,
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_IME_SWITCH_MODE,
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_MENU_OPENED,
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_NETWORK_JOIN_OTHER_CLICKED,
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_NETWORK_SETTINGS_CLICKED,
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_SHOW_NETWORK_CONNECTION_DETAILS,
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_SHOW_VPN_CONNECTION_DETAILS,
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_SIGN_OUT,
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_VPN_JOIN_OTHER_CLICKED,
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_STATUS_AREA_VPN_SETTINGS_CLICKED,
865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK,
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TOGGLE_MAXIMIZE_CAPTION_GESTURE,
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TOGGLE_SINGLE_AXIS_MAXIMIZE_BORDER_CLICK,
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TOUCHPAD_GESTURE_OVERVIEW,
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TOUCHSCREEN_TAP_DOWN,
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TRAY_HELP,
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TRAY_LOCK_SCREEN,
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_TRAY_SHUT_DOWN,
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_APP_CLOSE_BUTTON_CLICK,
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_CLOSE_BUTTON_CLICK,
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_EXIT_FULLSCREEN,
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MAXIMIZE,
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MINIMIZE,
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_RESTORE,
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_LEFT,
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_RIGHT,
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Thumbnail sized overview of windows triggered by pressing the overview key.
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UMA_WINDOW_OVERVIEW,
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Selecting a window in overview mode by pressing the enter key.
107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  UMA_WINDOW_OVERVIEW_ENTER_KEY,
108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Window selection started by beginning an alt+tab cycle. This does not count
110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // each step through an alt+tab cycle.
111f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  UMA_WINDOW_CYCLE,
1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// User Metrics Recorder provides a repeating callback (RecordPeriodicMetrics)
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// on a timer to allow recording of state data over time to the UMA records.
1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Any additional states (in ash) that require monitoring can be added to
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// this class. As well calls to record on action metrics
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// (RecordUserMetricsAction) are passed through the UserMetricsRecorder.
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ASH_EXPORT UserMetricsRecorder {
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  UserMetricsRecorder();
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ~UserMetricsRecorder();
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void RecordUserMetricsAction(ash::UserMetricsAction action);
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void RecordPeriodicMetrics();
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::RepeatingTimer<UserMetricsRecorder> timer_;
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace ash
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // ASH_USER_METRICS_RECORDER_H_
134