Add test_runner support for new accessibility event
[chromium-blink-merge.git] / ash / metrics / user_metrics_recorder.cc
blob8cfcdce9bdcb9b7eb2da13ebf1a0b732f5d4e71a
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ash/metrics/user_metrics_recorder.h"
7 #include "ash/shelf/shelf_layout_manager.h"
8 #include "ash/shelf/shelf_view.h"
9 #include "ash/shelf/shelf_widget.h"
10 #include "ash/shell.h"
11 #include "ash/wm/window_state.h"
12 #include "base/metrics/histogram.h"
13 #include "base/metrics/user_metrics.h"
15 namespace ash {
17 // Time in seconds between calls to "RecordPeriodicMetrics".
18 const int kAshPeriodicMetricsTimeInSeconds = 30 * 60;
20 UserMetricsRecorder::UserMetricsRecorder() {
21 timer_.Start(FROM_HERE,
22 base::TimeDelta::FromSeconds(kAshPeriodicMetricsTimeInSeconds),
23 this,
24 &UserMetricsRecorder::RecordPeriodicMetrics);
27 UserMetricsRecorder::~UserMetricsRecorder() {
28 timer_.Stop();
31 void UserMetricsRecorder::RecordUserMetricsAction(UserMetricsAction action) {
32 switch (action) {
33 case ash::UMA_ACCEL_KEYBOARD_BRIGHTNESS_DOWN_F6:
34 base::RecordAction(
35 base::UserMetricsAction("Accel_KeyboardBrightnessDown_F6"));
36 break;
37 case ash::UMA_ACCEL_KEYBOARD_BRIGHTNESS_UP_F7:
38 base::RecordAction(
39 base::UserMetricsAction("Accel_KeyboardBrightnessUp_F7"));
40 break;
41 case ash::UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON:
42 base::RecordAction(
43 base::UserMetricsAction("Accel_LockScreen_LockButton"));
44 break;
45 case ash::UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON:
46 base::RecordAction(
47 base::UserMetricsAction("Accel_LockScreen_PowerButton"));
48 break;
49 case ash::UMA_ACCEL_MAXIMIZE_RESTORE_F4:
50 base::RecordAction(
51 base::UserMetricsAction("Accel_Maximize_Restore_F4"));
52 break;
53 case ash::UMA_ACCEL_PREVWINDOW_F5:
54 base::RecordAction(base::UserMetricsAction("Accel_PrevWindow_F5"));
55 break;
56 case ash::UMA_ACCEL_EXIT_FIRST_Q:
57 base::RecordAction(base::UserMetricsAction("Accel_Exit_First_Q"));
58 break;
59 case ash::UMA_ACCEL_EXIT_SECOND_Q:
60 base::RecordAction(base::UserMetricsAction("Accel_Exit_Second_Q"));
61 break;
62 case ash::UMA_ACCEL_RESTART_POWER_BUTTON:
63 base::RecordAction(
64 base::UserMetricsAction("Accel_Restart_PowerButton"));
65 break;
66 case ash::UMA_ACCEL_SHUT_DOWN_POWER_BUTTON:
67 base::RecordAction(
68 base::UserMetricsAction("Accel_ShutDown_PowerButton"));
69 break;
70 case ash::UMA_CLOSE_THROUGH_CONTEXT_MENU:
71 base::RecordAction(base::UserMetricsAction("CloseFromContextMenu"));
72 break;
73 case ash::UMA_DRAG_MAXIMIZE_LEFT:
74 base::RecordAction(base::UserMetricsAction("WindowDrag_MaximizeLeft"));
75 break;
76 case ash::UMA_DRAG_MAXIMIZE_RIGHT:
77 base::RecordAction(base::UserMetricsAction("WindowDrag_MaximizeRight"));
78 break;
79 case ash::UMA_GESTURE_OVERVIEW:
80 base::RecordAction(base::UserMetricsAction("Gesture_Overview"));
81 break;
82 case ash::UMA_LAUNCHER_CLICK_ON_APP:
83 base::RecordAction(base::UserMetricsAction("Launcher_ClickOnApp"));
84 break;
85 case ash::UMA_LAUNCHER_CLICK_ON_APPLIST_BUTTON:
86 base::RecordAction(
87 base::UserMetricsAction("Launcher_ClickOnApplistButton"));
88 break;
89 case ash::UMA_MOUSE_DOWN:
90 base::RecordAction(base::UserMetricsAction("Mouse_Down"));
91 break;
92 case ash::UMA_PANEL_MINIMIZE_CAPTION_CLICK:
93 base::RecordAction(
94 base::UserMetricsAction("Panel_Minimize_Caption_Click"));
95 break;
96 case ash::UMA_PANEL_MINIMIZE_CAPTION_GESTURE:
97 base::RecordAction(
98 base::UserMetricsAction("Panel_Minimize_Caption_Gesture"));
99 break;
100 case ash::UMA_SHELF_ALIGNMENT_SET_BOTTOM:
101 base::RecordAction(
102 base::UserMetricsAction("Shelf_AlignmentSetBottom"));
103 break;
104 case ash::UMA_SHELF_ALIGNMENT_SET_LEFT:
105 base::RecordAction(
106 base::UserMetricsAction("Shelf_AlignmentSetLeft"));
107 break;
108 case ash::UMA_SHELF_ALIGNMENT_SET_RIGHT:
109 base::RecordAction(
110 base::UserMetricsAction("Shelf_AlignmentSetRight"));
111 break;
112 case ash::UMA_STATUS_AREA_AUDIO_CURRENT_INPUT_DEVICE:
113 base::RecordAction(
114 base::UserMetricsAction("StatusArea_Audio_CurrentInputDevice"));
115 break;
116 case ash::UMA_STATUS_AREA_AUDIO_CURRENT_OUTPUT_DEVICE:
117 base::RecordAction(
118 base::UserMetricsAction("StatusArea_Audio_CurrentOutputDevice"));
119 break;
120 case ash::UMA_STATUS_AREA_AUDIO_SWITCH_INPUT_DEVICE:
121 base::RecordAction(
122 base::UserMetricsAction("StatusArea_Audio_SwitchInputDevice"));
123 break;
124 case ash::UMA_STATUS_AREA_AUDIO_SWITCH_OUTPUT_DEVICE:
125 base::RecordAction(
126 base::UserMetricsAction("StatusArea_Audio_SwitchOutputDevice"));
127 break;
128 case ash::UMA_STATUS_AREA_BRIGHTNESS_CHANGED:
129 base::RecordAction(
130 base::UserMetricsAction("StatusArea_BrightnessChanged"));
131 break;
132 case ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_KNOWN_DEVICE:
133 base::RecordAction(
134 base::UserMetricsAction("StatusArea_Bluetooth_Connect_Known"));
135 break;
136 case ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_UNKNOWN_DEVICE:
137 base::RecordAction(
138 base::UserMetricsAction("StatusArea_Bluetooth_Connect_Unknown"));
139 break;
140 case ash::UMA_STATUS_AREA_BLUETOOTH_DISABLED:
141 base::RecordAction(
142 base::UserMetricsAction("StatusArea_Bluetooth_Disabled"));
143 break;
144 case ash::UMA_STATUS_AREA_BLUETOOTH_ENABLED:
145 base::RecordAction(
146 base::UserMetricsAction("StatusArea_Bluetooth_Enabled"));
147 break;
148 case ash::UMA_STATUS_AREA_CAPS_LOCK_DETAILED:
149 base::RecordAction(
150 base::UserMetricsAction("StatusArea_CapsLock_Detailed"));
151 break;
152 case ash::UMA_STATUS_AREA_CAPS_LOCK_DISABLED_BY_CLICK:
153 base::RecordAction(
154 base::UserMetricsAction("StatusArea_CapsLock_DisabledByClick"));
155 break;
156 case ash::UMA_STATUS_AREA_CAPS_LOCK_ENABLED_BY_CLICK:
157 base::RecordAction(
158 base::UserMetricsAction("StatusArea_CapsLock_EnabledByClick"));
159 break;
160 case ash::UMA_STATUS_AREA_CAPS_LOCK_POPUP:
161 base::RecordAction(
162 base::UserMetricsAction("StatusArea_CapsLock_Popup"));
163 break;
164 case ash::UMA_STATUS_AREA_CONNECT_TO_CONFIGURED_NETWORK:
165 base::RecordAction(
166 base::UserMetricsAction("StatusArea_Network_ConnectConfigured"));
167 break;
168 case ash::UMA_STATUS_AREA_CONNECT_TO_UNCONFIGURED_NETWORK:
169 base::RecordAction(
170 base::UserMetricsAction("StatusArea_Network_ConnectUnconfigured"));
171 break;
172 case ash::UMA_STATUS_AREA_CONNECT_TO_VPN:
173 base::RecordAction(
174 base::UserMetricsAction("StatusArea_VPN_ConnectToNetwork"));
175 break;
176 case ash::UMA_STATUS_AREA_CHANGED_VOLUME_MENU:
177 base::RecordAction(
178 base::UserMetricsAction("StatusArea_Volume_ChangedMenu"));
179 break;
180 case ash::UMA_STATUS_AREA_CHANGED_VOLUME_POPUP:
181 base::RecordAction(
182 base::UserMetricsAction("StatusArea_Volume_ChangedPopup"));
183 break;
184 case ash::UMA_STATUS_AREA_DETAILED_ACCESSABILITY:
185 base::RecordAction(
186 base::UserMetricsAction("StatusArea_Accessability_DetailedView"));
187 break;
188 case ash::UMA_STATUS_AREA_DETAILED_AUDIO_VIEW:
189 base::RecordAction(
190 base::UserMetricsAction("StatusArea_Audio_Detailed"));
191 break;
192 case ash::UMA_STATUS_AREA_DETAILED_BLUETOOTH_VIEW:
193 base::RecordAction(
194 base::UserMetricsAction("StatusArea_Bluetooth_Detailed"));
195 break;
196 case ash::UMA_STATUS_AREA_DETAILED_BRIGHTNESS_VIEW:
197 base::RecordAction(
198 base::UserMetricsAction("StatusArea_Brightness_Detailed"));
199 break;
200 case ash::UMA_STATUS_AREA_DETAILED_DRIVE_VIEW:
201 base::RecordAction(
202 base::UserMetricsAction("StatusArea_Drive_Detailed"));
203 break;
204 case ash::UMA_STATUS_AREA_DETAILED_NETWORK_VIEW:
205 base::RecordAction(
206 base::UserMetricsAction("StatusArea_Network_Detailed"));
207 break;
208 case ash::UMA_STATUS_AREA_DETAILED_VPN_VIEW:
209 base::RecordAction(
210 base::UserMetricsAction("StatusArea_VPN_Detailed"));
211 break;
212 case ash::UMA_STATUS_AREA_DISABLE_AUTO_CLICK:
213 base::RecordAction(
214 base::UserMetricsAction("StatusArea_AutoClickDisabled"));
215 break;
216 case ash::UMA_STATUS_AREA_DISABLE_HIGH_CONTRAST:
217 base::RecordAction(
218 base::UserMetricsAction("StatusArea_HighContrastDisabled"));
219 break;
220 case ash::UMA_STATUS_AREA_DISABLE_LARGE_CURSOR:
221 base::RecordAction(
222 base::UserMetricsAction("StatusArea_LargeCursorDisabled"));
223 break;
224 case ash::UMA_STATUS_AREA_DISABLE_MAGNIFIER:
225 base::RecordAction(
226 base::UserMetricsAction("StatusArea_MagnifierDisabled"));
227 break;
228 case ash::UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK:
229 base::RecordAction(
230 base::UserMetricsAction("StatusArea_SpokenFeedbackDisabled"));
231 break;
232 case ash::UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD:
233 base::RecordAction(
234 base::UserMetricsAction("StatusArea_VirtualKeyboardDisabled"));
235 break;
236 case ash::UMA_STATUS_AREA_DISABLE_WIFI:
237 base::RecordAction(
238 base::UserMetricsAction("StatusArea_Network_WifiDisabled"));
239 break;
240 case ash::UMA_STATUS_AREA_DRIVE_CANCEL_OPERATION:
241 base::RecordAction(
242 base::UserMetricsAction("StatusArea_Drive_CancelOperation"));
243 break;
244 case ash::UMA_STATUS_AREA_DRIVE_SETTINGS:
245 base::RecordAction(
246 base::UserMetricsAction("StatusArea_Drive_Settings"));
247 break;
248 case ash::UMA_STATUS_AREA_ENABLE_AUTO_CLICK:
249 base::RecordAction(
250 base::UserMetricsAction("StatusArea_AutoClickEnabled"));
251 break;
252 case ash::UMA_STATUS_AREA_ENABLE_HIGH_CONTRAST:
253 base::RecordAction(
254 base::UserMetricsAction("StatusArea_HighContrastEnabled"));
255 break;
256 case ash::UMA_STATUS_AREA_ENABLE_LARGE_CURSOR:
257 base::RecordAction(
258 base::UserMetricsAction("StatusArea_LargeCursorEnabled"));
259 break;
260 case ash::UMA_STATUS_AREA_ENABLE_MAGNIFIER:
261 base::RecordAction(
262 base::UserMetricsAction("StatusArea_MagnifierEnabled"));
263 break;
264 case ash::UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK:
265 base::RecordAction(
266 base::UserMetricsAction("StatusArea_SpokenFeedbackEnabled"));
267 break;
268 case ash::UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD:
269 base::RecordAction(
270 base::UserMetricsAction("StatusArea_VirtualKeyboardEnabled"));
271 break;
272 case ash::UMA_STATUS_AREA_ENABLE_WIFI:
273 base::RecordAction(
274 base::UserMetricsAction("StatusArea_Network_WifiEnabled"));
275 break;
276 case ash::UMA_STATUS_AREA_IME_SHOW_DETAILED:
277 base::RecordAction(
278 base::UserMetricsAction("StatusArea_IME_Detailed"));
279 break;
280 case ash::UMA_STATUS_AREA_IME_SWITCH_MODE:
281 base::RecordAction(
282 base::UserMetricsAction("StatusArea_IME_SwitchMode"));
283 break;
284 case ash::UMA_STATUS_AREA_MENU_OPENED:
285 base::RecordAction(
286 base::UserMetricsAction("StatusArea_MenuOpened"));
287 break;
288 case ash::UMA_STATUS_AREA_NETWORK_JOIN_OTHER_CLICKED:
289 base::RecordAction(
290 base::UserMetricsAction("StatusArea_Network_JoinOther"));
291 break;
292 case ash::UMA_STATUS_AREA_NETWORK_SETTINGS_CLICKED:
293 base::RecordAction(
294 base::UserMetricsAction("StatusArea_Network_Settings"));
295 break;
296 case ash::UMA_STATUS_AREA_SHOW_NETWORK_CONNECTION_DETAILS:
297 base::RecordAction(
298 base::UserMetricsAction("StatusArea_Network_ConnectionDetails"));
299 break;
300 case ash::UMA_STATUS_AREA_SHOW_VPN_CONNECTION_DETAILS:
301 base::RecordAction(
302 base::UserMetricsAction("StatusArea_VPN_ConnectionDetails"));
303 break;
304 case ash::UMA_STATUS_AREA_SIGN_OUT:
305 base::RecordAction(
306 base::UserMetricsAction("StatusArea_SignOut"));
307 break;
308 case ash::UMA_STATUS_AREA_VPN_ADD_BUILT_IN_CLICKED:
309 base::RecordAction(base::UserMetricsAction("StatusArea_VPN_AddBuiltIn"));
310 break;
311 case ash::UMA_STATUS_AREA_VPN_ADD_THIRD_PARTY_CLICKED:
312 base::RecordAction(
313 base::UserMetricsAction("StatusArea_VPN_AddThirdParty"));
314 break;
315 case ash::UMA_STATUS_AREA_VPN_DISCONNECT_CLICKED:
316 base::RecordAction(base::UserMetricsAction("StatusArea_VPN_Disconnect"));
317 break;
318 case ash::UMA_STATUS_AREA_VPN_SETTINGS_CLICKED:
319 base::RecordAction(
320 base::UserMetricsAction("StatusArea_VPN_Settings"));
321 break;
322 case ash::UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK:
323 base::RecordAction(
324 base::UserMetricsAction("Caption_ClickTogglesMaximize"));
325 break;
326 case ash::UMA_TOGGLE_MAXIMIZE_CAPTION_GESTURE:
327 base::RecordAction(
328 base::UserMetricsAction("Caption_GestureTogglesMaximize"));
329 break;
330 case ash::UMA_TOGGLE_SINGLE_AXIS_MAXIMIZE_BORDER_CLICK:
331 base::RecordAction(
332 base::UserMetricsAction(
333 "WindowBorder_ClickTogglesSingleAxisMaximize"));
334 break;
335 case ash::UMA_TOUCHPAD_GESTURE_OVERVIEW:
336 base::RecordAction(
337 base::UserMetricsAction("Touchpad_Gesture_Overview"));
338 break;
339 case ash::UMA_TOUCHSCREEN_TAP_DOWN:
340 base::RecordAction(base::UserMetricsAction("Touchscreen_Down"));
341 break;
342 case ash::UMA_TRAY_HELP:
343 base::RecordAction(base::UserMetricsAction("Tray_Help"));
344 break;
345 case ash::UMA_TRAY_LOCK_SCREEN:
346 base::RecordAction(base::UserMetricsAction("Tray_LockScreen"));
347 break;
348 case ash::UMA_TRAY_SHUT_DOWN:
349 base::RecordAction(base::UserMetricsAction("Tray_ShutDown"));
350 break;
351 case ash::UMA_WINDOW_APP_CLOSE_BUTTON_CLICK:
352 base::RecordAction(base::UserMetricsAction("AppCloseButton_Clk"));
353 break;
354 case ash::UMA_WINDOW_CLOSE_BUTTON_CLICK:
355 base::RecordAction(base::UserMetricsAction("CloseButton_Clk"));
356 break;
357 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_EXIT_FULLSCREEN:
358 base::RecordAction(base::UserMetricsAction("MaxButton_Clk_ExitFS"));
359 break;
360 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_RESTORE:
361 base::RecordAction(
362 base::UserMetricsAction("MaxButton_Clk_Restore"));
363 break;
364 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MAXIMIZE:
365 base::RecordAction(
366 base::UserMetricsAction("MaxButton_Clk_Maximize"));
367 break;
368 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MINIMIZE:
369 base::RecordAction(base::UserMetricsAction("MinButton_Clk"));
370 break;
371 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_LEFT:
372 base::RecordAction(base::UserMetricsAction("MaxButton_MaxLeft"));
373 break;
374 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_RIGHT:
375 base::RecordAction(base::UserMetricsAction("MaxButton_MaxRight"));
376 break;
377 case ash::UMA_WINDOW_OVERVIEW:
378 base::RecordAction(
379 base::UserMetricsAction("WindowSelector_Overview"));
380 break;
381 case ash::UMA_WINDOW_OVERVIEW_ENTER_KEY:
382 base::RecordAction(
383 base::UserMetricsAction("WindowSelector_OverviewEnterKey"));
384 break;
385 case ash::UMA_WINDOW_CYCLE:
386 base::RecordAction(
387 base::UserMetricsAction("WindowCycleController_Cycle"));
388 break;
392 void UserMetricsRecorder::RecordPeriodicMetrics() {
393 ShelfLayoutManager* manager =
394 ShelfLayoutManager::ForShelf(Shell::GetPrimaryRootWindow());
395 if (manager) {
396 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentOverTime",
397 manager->SelectValueForShelfAlignment(
398 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM,
399 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT,
400 SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT,
401 -1),
402 SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT);
405 enum ActiveWindowStateType {
406 ACTIVE_WINDOW_STATE_TYPE_NO_ACTIVE_WINDOW,
407 ACTIVE_WINDOW_STATE_TYPE_OTHER,
408 ACTIVE_WINDOW_STATE_TYPE_MAXIMIZED,
409 ACTIVE_WINDOW_STATE_TYPE_FULLSCREEN,
410 ACTIVE_WINDOW_STATE_TYPE_SNAPPED,
411 ACTIVE_WINDOW_STATE_TYPE_DOCKED,
412 ACTIVE_WINDOW_STATE_TYPE_COUNT
415 ActiveWindowStateType active_window_state_type =
416 ACTIVE_WINDOW_STATE_TYPE_NO_ACTIVE_WINDOW;
417 wm::WindowState* active_window_state = ash::wm::GetActiveWindowState();
418 if (active_window_state) {
419 switch (active_window_state->GetStateType()) {
420 case wm::WINDOW_STATE_TYPE_MAXIMIZED:
421 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_MAXIMIZED;
422 break;
423 case wm::WINDOW_STATE_TYPE_FULLSCREEN:
424 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_FULLSCREEN;
425 break;
426 case wm::WINDOW_STATE_TYPE_LEFT_SNAPPED:
427 case wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED:
428 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_SNAPPED;
429 break;
430 case wm::WINDOW_STATE_TYPE_DOCKED:
431 case wm::WINDOW_STATE_TYPE_DOCKED_MINIMIZED:
432 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_DOCKED;
433 break;
434 case wm::WINDOW_STATE_TYPE_DEFAULT:
435 case wm::WINDOW_STATE_TYPE_NORMAL:
436 case wm::WINDOW_STATE_TYPE_MINIMIZED:
437 case wm::WINDOW_STATE_TYPE_INACTIVE:
438 case wm::WINDOW_STATE_TYPE_END:
439 case wm::WINDOW_STATE_TYPE_AUTO_POSITIONED:
440 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_OTHER;
441 break;
444 UMA_HISTOGRAM_ENUMERATION("Ash.ActiveWindowShowTypeOverTime",
445 active_window_state_type,
446 ACTIVE_WINDOW_STATE_TYPE_COUNT);
449 } // namespace ash