summaryrefslogtreecommitdiff
path: root/chromium/ash/metrics/user_metrics_recorder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ash/metrics/user_metrics_recorder.cc')
-rw-r--r--chromium/ash/metrics/user_metrics_recorder.cc415
1 files changed, 415 insertions, 0 deletions
diff --git a/chromium/ash/metrics/user_metrics_recorder.cc b/chromium/ash/metrics/user_metrics_recorder.cc
new file mode 100644
index 00000000000..b0c384f91a2
--- /dev/null
+++ b/chromium/ash/metrics/user_metrics_recorder.cc
@@ -0,0 +1,415 @@
+// Copyright 2013 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 "ash/metrics/user_metrics_recorder.h"
+
+#include "ash/shelf/shelf_layout_manager.h"
+#include "ash/shelf/shelf_view.h"
+#include "ash/shelf/shelf_widget.h"
+#include "ash/shell.h"
+#include "ash/wm/window_state.h"
+#include "base/metrics/histogram.h"
+#include "content/public/browser/user_metrics.h"
+
+namespace ash {
+
+// Time in seconds between calls to "RecordPeriodicMetrics".
+const int kAshPeriodicMetricsTimeInSeconds = 30 * 60;
+
+UserMetricsRecorder::UserMetricsRecorder() {
+ timer_.Start(FROM_HERE,
+ base::TimeDelta::FromSeconds(kAshPeriodicMetricsTimeInSeconds),
+ this,
+ &UserMetricsRecorder::RecordPeriodicMetrics);
+}
+
+UserMetricsRecorder::~UserMetricsRecorder() {
+ timer_.Stop();
+}
+
+void UserMetricsRecorder::RecordUserMetricsAction(UserMetricsAction action) {
+ switch (action) {
+ case ash::UMA_ACCEL_KEYBOARD_BRIGHTNESS_DOWN_F6:
+ content::RecordAction(
+ content::UserMetricsAction("Accel_KeyboardBrightnessDown_F6"));
+ break;
+ case ash::UMA_ACCEL_KEYBOARD_BRIGHTNESS_UP_F7:
+ content::RecordAction(
+ content::UserMetricsAction("Accel_KeyboardBrightnessUp_F7"));
+ break;
+ case ash::UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON:
+ content::RecordAction(
+ content::UserMetricsAction("Accel_LockScreen_LockButton"));
+ break;
+ case ash::UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON:
+ content::RecordAction(
+ content::UserMetricsAction("Accel_LockScreen_PowerButton"));
+ break;
+ case ash::UMA_ACCEL_MAXIMIZE_RESTORE_F4:
+ content::RecordAction(
+ content::UserMetricsAction("Accel_Maximize_Restore_F4"));
+ break;
+ case ash::UMA_ACCEL_PREVWINDOW_F5:
+ content::RecordAction(content::UserMetricsAction("Accel_PrevWindow_F5"));
+ break;
+ case ash::UMA_ACCEL_EXIT_FIRST_Q:
+ content::RecordAction(content::UserMetricsAction("Accel_Exit_First_Q"));
+ break;
+ case ash::UMA_ACCEL_EXIT_SECOND_Q:
+ content::RecordAction(content::UserMetricsAction("Accel_Exit_Second_Q"));
+ break;
+ case ash::UMA_ACCEL_SHUT_DOWN_POWER_BUTTON:
+ content::RecordAction(
+ content::UserMetricsAction("Accel_ShutDown_PowerButton"));
+ break;
+ case ash::UMA_CLOSE_THROUGH_CONTEXT_MENU:
+ content::RecordAction(content::UserMetricsAction("CloseFromContextMenu"));
+ break;
+ case ash::UMA_GESTURE_OVERVIEW:
+ content::RecordAction(content::UserMetricsAction("Gesture_Overview"));
+ break;
+ case ash::UMA_LAUNCHER_CLICK_ON_APP:
+ content::RecordAction(content::UserMetricsAction("Launcher_ClickOnApp"));
+ break;
+ case ash::UMA_LAUNCHER_CLICK_ON_APPLIST_BUTTON:
+ content::RecordAction(
+ content::UserMetricsAction("Launcher_ClickOnApplistButton"));
+ break;
+ case ash::UMA_MOUSE_DOWN:
+ content::RecordAction(content::UserMetricsAction("Mouse_Down"));
+ break;
+ case ash::UMA_SHELF_ALIGNMENT_SET_BOTTOM:
+ content::RecordAction(
+ content::UserMetricsAction("Shelf_AlignmentSetBottom"));
+ break;
+ case ash::UMA_SHELF_ALIGNMENT_SET_LEFT:
+ content::RecordAction(
+ content::UserMetricsAction("Shelf_AlignmentSetLeft"));
+ break;
+ case ash::UMA_SHELF_ALIGNMENT_SET_RIGHT:
+ content::RecordAction(
+ content::UserMetricsAction("Shelf_AlignmentSetRight"));
+ case ash::UMA_STATUS_AREA_AUDIO_CURRENT_INPUT_DEVICE:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Audio_CurrentInputDevice"));
+ break;
+ case ash::UMA_STATUS_AREA_AUDIO_CURRENT_OUTPUT_DEVICE:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Audio_CurrentOutputDevice"));
+ break;
+ case ash::UMA_STATUS_AREA_AUDIO_SWITCH_INPUT_DEVICE:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Audio_SwitchInputDevice"));
+ break;
+ case ash::UMA_STATUS_AREA_AUDIO_SWITCH_OUTPUT_DEVICE:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Audio_SwitchOutputDevice"));
+ break;
+ case ash::UMA_STATUS_AREA_BRIGHTNESS_CHANGED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_BrightnessChanged"));
+ break;
+ case ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_KNOWN_DEVICE:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Bluetooth_Connect_Known"));
+ break;
+ case ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_UNKNOWN_DEVICE:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Bluetooth_Connect_Unknown"));
+ break;
+ case ash::UMA_STATUS_AREA_BLUETOOTH_DISABLED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Bluetooth_Disabled"));
+ break;
+ case ash::UMA_STATUS_AREA_BLUETOOTH_ENABLED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Bluetooth_Enabled"));
+ break;
+ case ash::UMA_STATUS_AREA_CAPS_LOCK_DETAILED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_CapsLock_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_CAPS_LOCK_DISABLED_BY_CLICK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_CapsLock_DisabledByClick"));
+ break;
+ case ash::UMA_STATUS_AREA_CAPS_LOCK_ENABLED_BY_CLICK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_CapsLock_EnabledByClick"));
+ break;
+ case ash::UMA_STATUS_AREA_CAPS_LOCK_POPUP:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_CapsLock_Popup"));
+ break;
+ case ash::UMA_STATUS_AREA_CONNECT_TO_CONFIGURED_NETWORK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_ConnectConfigured"));
+ break;
+ case ash::UMA_STATUS_AREA_CONNECT_TO_UNCONFIGURED_NETWORK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_ConnectUnconfigured"));
+ break;
+ case ash::UMA_STATUS_AREA_CONNECT_TO_VPN:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_VPN_ConnectToNetwork"));
+ break;
+ case ash::UMA_STATUS_AREA_CHANGED_VOLUME_MENU:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Volume_ChangedMenu"));
+ break;
+ case ash::UMA_STATUS_AREA_CHANGED_VOLUME_POPUP:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Volume_ChangedPopup"));
+ break;
+ case ash::UMA_STATUS_AREA_DETAILED_ACCESSABILITY:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Accessability_DetailedView"));
+ break;
+ case ash::UMA_STATUS_AREA_DETAILED_AUDIO_VIEW:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Audio_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_DETAILED_BLUETOOTH_VIEW:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Bluetooth_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_DETAILED_BRIGHTNESS_VIEW:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Brightness_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_DETAILED_DRIVE_VIEW:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Drive_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_DETAILED_NETWORK_VIEW:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_DETAILED_VPN_VIEW:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_VPN_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_DISABLE_AUTO_CLICK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_AutoClickDisabled"));
+ break;
+ case ash::UMA_STATUS_AREA_DISABLE_HIGH_CONTRAST:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_HighContrastDisabled"));
+ break;
+ case ash::UMA_STATUS_AREA_DISABLE_LARGE_CURSOR:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_LargeCursorDisabled"));
+ break;
+ case ash::UMA_STATUS_AREA_DISABLE_MAGNIFIER:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_MagnifierDisabled"));
+ break;
+ case ash::UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_SpokenFeedbackDisabled"));
+ break;
+ case ash::UMA_STATUS_AREA_DISABLE_WIFI:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_WifiDisabled"));
+ break;
+ case ash::UMA_STATUS_AREA_DRIVE_CANCEL_OPERATION:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Drive_CancelOperation"));
+ break;
+ case ash::UMA_STATUS_AREA_DRIVE_SETTINGS:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Drive_Settings"));
+ break;
+ case ash::UMA_STATUS_AREA_ENABLE_AUTO_CLICK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_AutoClickEnabled"));
+ break;
+ case ash::UMA_STATUS_AREA_ENABLE_HIGH_CONTRAST:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_HighContrastEnabled"));
+ break;
+ case ash::UMA_STATUS_AREA_ENABLE_LARGE_CURSOR:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_LargeCursorEnabled"));
+ break;
+ case ash::UMA_STATUS_AREA_ENABLE_MAGNIFIER:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_MagnifierEnabled"));
+ break;
+ case ash::UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_SpokenFeedbackEnabled"));
+ break;
+ case ash::UMA_STATUS_AREA_ENABLE_WIFI:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_WifiEnabled"));
+ break;
+ case ash::UMA_STATUS_AREA_IME_SHOW_DETAILED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_IME_Detailed"));
+ break;
+ case ash::UMA_STATUS_AREA_IME_SWITCH_MODE:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_IME_SwitchMode"));
+ break;
+ case ash::UMA_STATUS_AREA_MENU_OPENED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_MenuOpened"));
+ break;
+ case ash::UMA_STATUS_AREA_NETWORK_JOIN_OTHER_CLICKED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_JoinOther"));
+ break;
+ case ash::UMA_STATUS_AREA_NETWORK_SETTINGS_CLICKED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_Settings"));
+ break;
+ case ash::UMA_STATUS_AREA_SHOW_NETWORK_CONNECTION_DETAILS:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_Network_ConnectionDetails"));
+ break;
+ case ash::UMA_STATUS_AREA_SHOW_VPN_CONNECTION_DETAILS:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_VPN_ConnectionDetails"));
+ break;
+ case ash::UMA_STATUS_AREA_SIGN_OUT:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_SignOut"));
+ break;
+ case ash::UMA_STATUS_AREA_VPN_JOIN_OTHER_CLICKED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_VPN_JoinOther"));
+ break;
+ case ash::UMA_STATUS_AREA_VPN_SETTINGS_CLICKED:
+ content::RecordAction(
+ content::UserMetricsAction("StatusArea_VPN_Settings"));
+ break;
+ case ash::UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK:
+ content::RecordAction(
+ content::UserMetricsAction("Caption_ClickTogglesMaximize"));
+ break;
+ case ash::UMA_TOGGLE_MAXIMIZE_CAPTION_GESTURE:
+ content::RecordAction(
+ content::UserMetricsAction("Caption_GestureTogglesMaximize"));
+ break;
+ case ash::UMA_TOUCHPAD_GESTURE_OVERVIEW:
+ content::RecordAction(
+ content::UserMetricsAction("Touchpad_Gesture_Overview"));
+ break;
+ case ash::UMA_TOUCHSCREEN_TAP_DOWN:
+ content::RecordAction(content::UserMetricsAction("Touchscreen_Down"));
+ break;
+ case ash::UMA_TRAY_HELP:
+ content::RecordAction(content::UserMetricsAction("Tray_Help"));
+ break;
+ case ash::UMA_TRAY_LOCK_SCREEN:
+ content::RecordAction(content::UserMetricsAction("Tray_LockScreen"));
+ break;
+ case ash::UMA_TRAY_SHUT_DOWN:
+ content::RecordAction(content::UserMetricsAction("Tray_ShutDown"));
+ break;
+ case ash::UMA_WINDOW_APP_CLOSE_BUTTON_CLICK:
+ content::RecordAction(content::UserMetricsAction("AppCloseButton_Clk"));
+ break;
+ case ash::UMA_WINDOW_CLOSE_BUTTON_CLICK:
+ content::RecordAction(content::UserMetricsAction("CloseButton_Clk"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_EXIT_FULLSCREEN:
+ content::RecordAction(content::UserMetricsAction("MaxButton_Clk_ExitFS"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_RESTORE:
+ content::RecordAction(
+ content::UserMetricsAction("MaxButton_Clk_Restore"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MAXIMIZE:
+ content::RecordAction(
+ content::UserMetricsAction("MaxButton_Clk_Maximize"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MINIMIZE:
+ content::RecordAction(content::UserMetricsAction("MinButton_Clk"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE:
+ content::RecordAction(content::UserMetricsAction("MaxButton_Maximize"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_LEFT:
+ content::RecordAction(content::UserMetricsAction("MaxButton_MaxLeft"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_RIGHT:
+ content::RecordAction(content::UserMetricsAction("MaxButton_MaxRight"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MINIMIZE:
+ content::RecordAction(content::UserMetricsAction("MaxButton_Minimize"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_RESTORE:
+ content::RecordAction(content::UserMetricsAction("MaxButton_Restore"));
+ break;
+ case ash::UMA_WINDOW_MAXIMIZE_BUTTON_SHOW_BUBBLE:
+ content::RecordAction(content::UserMetricsAction("MaxButton_ShowBubble"));
+ break;
+ case ash::UMA_WINDOW_OVERVIEW:
+ content::RecordAction(
+ content::UserMetricsAction("WindowSelector_Overview"));
+ break;
+ case ash::UMA_WINDOW_SELECTION:
+ content::RecordAction(
+ content::UserMetricsAction("WindowSelector_Selection"));
+ break;
+ }
+}
+
+void UserMetricsRecorder::RecordPeriodicMetrics() {
+ internal::ShelfLayoutManager* manager =
+ internal::ShelfLayoutManager::ForLauncher(Shell::GetPrimaryRootWindow());
+ if (manager) {
+ UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentOverTime",
+ manager->SelectValueForShelfAlignment(
+ internal::SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM,
+ internal::SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT,
+ internal::SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT,
+ -1),
+ internal::SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT);
+ }
+
+ enum ActiveWindowShowType {
+ ACTIVE_WINDOW_SHOW_TYPE_NO_ACTIVE_WINDOW,
+ ACTIVE_WINDOW_SHOW_TYPE_OTHER,
+ ACTIVE_WINDOW_SHOW_TYPE_MAXIMIZED,
+ ACTIVE_WINDOW_SHOW_TYPE_FULLSCREEN,
+ ACTIVE_WINDOW_SHOW_TYPE_SNAPPED,
+ ACTIVE_WINDOW_SHOW_TYPE_COUNT
+ };
+
+ ActiveWindowShowType active_window_show_type =
+ ACTIVE_WINDOW_SHOW_TYPE_NO_ACTIVE_WINDOW;
+ wm::WindowState* active_window_state = ash::wm::GetActiveWindowState();
+ if (active_window_state) {
+ switch(active_window_state->window_show_type()) {
+ case wm::SHOW_TYPE_MAXIMIZED:
+ active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_MAXIMIZED;
+ break;
+ case wm::SHOW_TYPE_FULLSCREEN:
+ active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_FULLSCREEN;
+ break;
+ case wm::SHOW_TYPE_LEFT_SNAPPED:
+ case wm::SHOW_TYPE_RIGHT_SNAPPED:
+ active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_SNAPPED;
+ break;
+ case wm::SHOW_TYPE_DEFAULT:
+ case wm::SHOW_TYPE_NORMAL:
+ case wm::SHOW_TYPE_MINIMIZED:
+ case wm::SHOW_TYPE_INACTIVE:
+ case wm::SHOW_TYPE_DETACHED:
+ case wm::SHOW_TYPE_END:
+ case wm::SHOW_TYPE_AUTO_POSITIONED:
+ active_window_show_type = ACTIVE_WINDOW_SHOW_TYPE_OTHER;
+ break;
+ }
+ }
+ UMA_HISTOGRAM_ENUMERATION("Ash.ActiveWindowShowTypeOverTime",
+ active_window_show_type,
+ ACTIVE_WINDOW_SHOW_TYPE_COUNT);
+}
+
+} // namespace ash