Update frame around SAML IdP pages to new GAIA style
[chromium-blink-merge.git] / ash / metrics / user_metrics_recorder.cc
blobc1c9e631aeaeff5ec581bd8a35b96c74bd6f5340
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/shell_window_ids.h"
12 #include "ash/wm/window_state.h"
13 #include "base/metrics/histogram.h"
14 #include "base/metrics/user_metrics.h"
15 #include "ui/aura/window.h"
17 namespace ash {
19 namespace {
21 // Time in seconds between calls to "RecordPeriodicMetrics".
22 const int kAshPeriodicMetricsTimeInSeconds = 30 * 60;
24 enum ActiveWindowStateType {
25 ACTIVE_WINDOW_STATE_TYPE_NO_ACTIVE_WINDOW,
26 ACTIVE_WINDOW_STATE_TYPE_OTHER,
27 ACTIVE_WINDOW_STATE_TYPE_MAXIMIZED,
28 ACTIVE_WINDOW_STATE_TYPE_FULLSCREEN,
29 ACTIVE_WINDOW_STATE_TYPE_SNAPPED,
30 ACTIVE_WINDOW_STATE_TYPE_DOCKED,
31 ACTIVE_WINDOW_STATE_TYPE_COUNT
34 ActiveWindowStateType GetActiveWindowState() {
35 ActiveWindowStateType active_window_state_type =
36 ACTIVE_WINDOW_STATE_TYPE_NO_ACTIVE_WINDOW;
37 wm::WindowState* active_window_state = ash::wm::GetActiveWindowState();
38 if (active_window_state) {
39 switch (active_window_state->GetStateType()) {
40 case wm::WINDOW_STATE_TYPE_MAXIMIZED:
41 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_MAXIMIZED;
42 break;
43 case wm::WINDOW_STATE_TYPE_FULLSCREEN:
44 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_FULLSCREEN;
45 break;
46 case wm::WINDOW_STATE_TYPE_LEFT_SNAPPED:
47 case wm::WINDOW_STATE_TYPE_RIGHT_SNAPPED:
48 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_SNAPPED;
49 break;
50 case wm::WINDOW_STATE_TYPE_DOCKED:
51 case wm::WINDOW_STATE_TYPE_DOCKED_MINIMIZED:
52 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_DOCKED;
53 break;
54 case wm::WINDOW_STATE_TYPE_DEFAULT:
55 case wm::WINDOW_STATE_TYPE_NORMAL:
56 case wm::WINDOW_STATE_TYPE_MINIMIZED:
57 case wm::WINDOW_STATE_TYPE_INACTIVE:
58 case wm::WINDOW_STATE_TYPE_END:
59 case wm::WINDOW_STATE_TYPE_AUTO_POSITIONED:
60 active_window_state_type = ACTIVE_WINDOW_STATE_TYPE_OTHER;
61 break;
64 return active_window_state_type;
67 // Array of window container ids that contain visible windows to be counted for
68 // UMA statistics. Note the containers are ordered from top most visible
69 // container to the lowest to allow the |GetNumVisibleWindows| method to short
70 // circuit when processing a maximized or fullscreen window.
71 int kVisibleWindowContainerIds[] = {kShellWindowId_PanelContainer,
72 kShellWindowId_DockedContainer,
73 kShellWindowId_AlwaysOnTopContainer,
74 kShellWindowId_DefaultContainer};
76 // Returns an approximate count of how many windows are currently visible in the
77 // primary root window.
78 int GetNumVisibleWindowsInPrimaryDisplay() {
79 int visible_window_count = 0;
80 bool maximized_or_fullscreen_window_present = false;
82 for (const int& current_container_id : kVisibleWindowContainerIds) {
83 if (maximized_or_fullscreen_window_present)
84 break;
86 const aura::Window::Windows& children =
87 Shell::GetContainer(Shell::GetInstance()->GetPrimaryRootWindow(),
88 current_container_id)->children();
89 // Reverse iterate over the child windows so that they are processed in
90 // visible stacking order.
91 for (aura::Window::Windows::const_reverse_iterator it = children.rbegin(),
92 rend = children.rend();
93 it != rend; ++it) {
94 const aura::Window* child_window = *it;
95 const wm::WindowState* child_window_state =
96 wm::GetWindowState(child_window);
98 if (!child_window->IsVisible() || child_window_state->IsMinimized())
99 continue;
101 // Only count activatable windows for 2 reasons:
102 // 1. Ensures that a browser window and its transient, modal child will
103 // only count as 1 visible window.
104 // 2. Prevents counting some windows in the
105 // kShellWindowId_DockedContainer that were not opened by the user.
106 if (child_window_state->CanActivate())
107 ++visible_window_count;
109 // Stop counting windows that will be hidden by maximized or fullscreen
110 // windows. Only windows in the kShellWindowId_DefaultContainer and
111 // kShellWindowId_AlwaysOnTopContainer can be maximized or fullscreened
112 // and completely obscure windows beneath them.
113 if ((kShellWindowId_DefaultContainer == current_container_id ||
114 kShellWindowId_AlwaysOnTopContainer == current_container_id) &&
115 child_window_state->IsMaximizedOrFullscreen()) {
116 maximized_or_fullscreen_window_present = true;
117 break;
121 return visible_window_count;
124 } // namespace
126 UserMetricsRecorder::UserMetricsRecorder() {
127 timer_.Start(FROM_HERE,
128 base::TimeDelta::FromSeconds(kAshPeriodicMetricsTimeInSeconds),
129 this,
130 &UserMetricsRecorder::RecordPeriodicMetrics);
133 UserMetricsRecorder::~UserMetricsRecorder() {
134 timer_.Stop();
137 void UserMetricsRecorder::RecordUserMetricsAction(UserMetricsAction action) {
138 switch (action) {
139 case ash::UMA_ACCEL_KEYBOARD_BRIGHTNESS_DOWN_F6:
140 base::RecordAction(
141 base::UserMetricsAction("Accel_KeyboardBrightnessDown_F6"));
142 break;
143 case ash::UMA_ACCEL_KEYBOARD_BRIGHTNESS_UP_F7:
144 base::RecordAction(
145 base::UserMetricsAction("Accel_KeyboardBrightnessUp_F7"));
146 break;
147 case ash::UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON:
148 base::RecordAction(
149 base::UserMetricsAction("Accel_LockScreen_LockButton"));
150 break;
151 case ash::UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON:
152 base::RecordAction(
153 base::UserMetricsAction("Accel_LockScreen_PowerButton"));
154 break;
155 case ash::UMA_ACCEL_MAXIMIZE_RESTORE_F4:
156 base::RecordAction(
157 base::UserMetricsAction("Accel_Maximize_Restore_F4"));
158 break;
159 case ash::UMA_ACCEL_PREVWINDOW_F5:
160 base::RecordAction(base::UserMetricsAction("Accel_PrevWindow_F5"));
161 break;
162 case ash::UMA_ACCEL_EXIT_FIRST_Q:
163 base::RecordAction(base::UserMetricsAction("Accel_Exit_First_Q"));
164 break;
165 case ash::UMA_ACCEL_EXIT_SECOND_Q:
166 base::RecordAction(base::UserMetricsAction("Accel_Exit_Second_Q"));
167 break;
168 case ash::UMA_ACCEL_RESTART_POWER_BUTTON:
169 base::RecordAction(
170 base::UserMetricsAction("Accel_Restart_PowerButton"));
171 break;
172 case ash::UMA_ACCEL_SHUT_DOWN_POWER_BUTTON:
173 base::RecordAction(
174 base::UserMetricsAction("Accel_ShutDown_PowerButton"));
175 break;
176 case ash::UMA_CLOSE_THROUGH_CONTEXT_MENU:
177 base::RecordAction(base::UserMetricsAction("CloseFromContextMenu"));
178 break;
179 case ash::UMA_DRAG_MAXIMIZE_LEFT:
180 base::RecordAction(base::UserMetricsAction("WindowDrag_MaximizeLeft"));
181 break;
182 case ash::UMA_DRAG_MAXIMIZE_RIGHT:
183 base::RecordAction(base::UserMetricsAction("WindowDrag_MaximizeRight"));
184 break;
185 case ash::UMA_GESTURE_OVERVIEW:
186 base::RecordAction(base::UserMetricsAction("Gesture_Overview"));
187 break;
188 case ash::UMA_LAUNCHER_BUTTON_PRESSED_WITH_MOUSE:
189 base::RecordAction(
190 base::UserMetricsAction("Launcher_ButtonPressed_Mouse"));
191 break;
192 case ash::UMA_LAUNCHER_BUTTON_PRESSED_WITH_TOUCH:
193 base::RecordAction(
194 base::UserMetricsAction("Launcher_ButtonPressed_Touch"));
195 break;
196 case ash::UMA_LAUNCHER_CLICK_ON_APP:
197 base::RecordAction(base::UserMetricsAction("Launcher_ClickOnApp"));
198 break;
199 case ash::UMA_LAUNCHER_CLICK_ON_APPLIST_BUTTON:
200 base::RecordAction(
201 base::UserMetricsAction("Launcher_ClickOnApplistButton"));
202 break;
203 case ash::UMA_LAUNCHER_LAUNCH_TASK:
204 base::RecordAction(base::UserMetricsAction("Launcher_LaunchTask"));
205 break;
206 case UMA_MAXIMIZE_MODE_DISABLED:
207 base::RecordAction(base::UserMetricsAction("Touchview_Disabled"));
208 break;
209 case UMA_MAXIMIZE_MODE_ENABLED:
210 base::RecordAction(base::UserMetricsAction("Touchview_Enabled"));
211 break;
212 case UMA_MAXIMIZE_MODE_INITIALLY_DISABLED:
213 base::RecordAction(
214 base::UserMetricsAction("Touchview_Initially_Disabled"));
215 break;
216 case ash::UMA_MOUSE_DOWN:
217 base::RecordAction(base::UserMetricsAction("Mouse_Down"));
218 break;
219 case ash::UMA_PANEL_MINIMIZE_CAPTION_CLICK:
220 base::RecordAction(
221 base::UserMetricsAction("Panel_Minimize_Caption_Click"));
222 break;
223 case ash::UMA_PANEL_MINIMIZE_CAPTION_GESTURE:
224 base::RecordAction(
225 base::UserMetricsAction("Panel_Minimize_Caption_Gesture"));
226 break;
227 case ash::UMA_SHELF_ALIGNMENT_SET_BOTTOM:
228 base::RecordAction(
229 base::UserMetricsAction("Shelf_AlignmentSetBottom"));
230 break;
231 case ash::UMA_SHELF_ALIGNMENT_SET_LEFT:
232 base::RecordAction(
233 base::UserMetricsAction("Shelf_AlignmentSetLeft"));
234 break;
235 case ash::UMA_SHELF_ALIGNMENT_SET_RIGHT:
236 base::RecordAction(
237 base::UserMetricsAction("Shelf_AlignmentSetRight"));
238 break;
239 case ash::UMA_STATUS_AREA_AUDIO_CURRENT_INPUT_DEVICE:
240 base::RecordAction(
241 base::UserMetricsAction("StatusArea_Audio_CurrentInputDevice"));
242 break;
243 case ash::UMA_STATUS_AREA_AUDIO_CURRENT_OUTPUT_DEVICE:
244 base::RecordAction(
245 base::UserMetricsAction("StatusArea_Audio_CurrentOutputDevice"));
246 break;
247 case ash::UMA_STATUS_AREA_AUDIO_SWITCH_INPUT_DEVICE:
248 base::RecordAction(
249 base::UserMetricsAction("StatusArea_Audio_SwitchInputDevice"));
250 break;
251 case ash::UMA_STATUS_AREA_AUDIO_SWITCH_OUTPUT_DEVICE:
252 base::RecordAction(
253 base::UserMetricsAction("StatusArea_Audio_SwitchOutputDevice"));
254 break;
255 case ash::UMA_STATUS_AREA_BRIGHTNESS_CHANGED:
256 base::RecordAction(
257 base::UserMetricsAction("StatusArea_BrightnessChanged"));
258 break;
259 case ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_KNOWN_DEVICE:
260 base::RecordAction(
261 base::UserMetricsAction("StatusArea_Bluetooth_Connect_Known"));
262 break;
263 case ash::UMA_STATUS_AREA_BLUETOOTH_CONNECT_UNKNOWN_DEVICE:
264 base::RecordAction(
265 base::UserMetricsAction("StatusArea_Bluetooth_Connect_Unknown"));
266 break;
267 case ash::UMA_STATUS_AREA_BLUETOOTH_DISABLED:
268 base::RecordAction(
269 base::UserMetricsAction("StatusArea_Bluetooth_Disabled"));
270 break;
271 case ash::UMA_STATUS_AREA_BLUETOOTH_ENABLED:
272 base::RecordAction(
273 base::UserMetricsAction("StatusArea_Bluetooth_Enabled"));
274 break;
275 case ash::UMA_STATUS_AREA_CAPS_LOCK_DETAILED:
276 base::RecordAction(
277 base::UserMetricsAction("StatusArea_CapsLock_Detailed"));
278 break;
279 case ash::UMA_STATUS_AREA_CAPS_LOCK_DISABLED_BY_CLICK:
280 base::RecordAction(
281 base::UserMetricsAction("StatusArea_CapsLock_DisabledByClick"));
282 break;
283 case ash::UMA_STATUS_AREA_CAPS_LOCK_ENABLED_BY_CLICK:
284 base::RecordAction(
285 base::UserMetricsAction("StatusArea_CapsLock_EnabledByClick"));
286 break;
287 case ash::UMA_STATUS_AREA_CAPS_LOCK_POPUP:
288 base::RecordAction(
289 base::UserMetricsAction("StatusArea_CapsLock_Popup"));
290 break;
291 case ash::UMA_STATUS_AREA_CONNECT_TO_CONFIGURED_NETWORK:
292 base::RecordAction(
293 base::UserMetricsAction("StatusArea_Network_ConnectConfigured"));
294 break;
295 case ash::UMA_STATUS_AREA_CONNECT_TO_UNCONFIGURED_NETWORK:
296 base::RecordAction(
297 base::UserMetricsAction("StatusArea_Network_ConnectUnconfigured"));
298 break;
299 case ash::UMA_STATUS_AREA_CONNECT_TO_VPN:
300 base::RecordAction(
301 base::UserMetricsAction("StatusArea_VPN_ConnectToNetwork"));
302 break;
303 case ash::UMA_STATUS_AREA_CHANGED_VOLUME_MENU:
304 base::RecordAction(
305 base::UserMetricsAction("StatusArea_Volume_ChangedMenu"));
306 break;
307 case ash::UMA_STATUS_AREA_CHANGED_VOLUME_POPUP:
308 base::RecordAction(
309 base::UserMetricsAction("StatusArea_Volume_ChangedPopup"));
310 break;
311 case ash::UMA_STATUS_AREA_DETAILED_ACCESSABILITY:
312 base::RecordAction(
313 base::UserMetricsAction("StatusArea_Accessability_DetailedView"));
314 break;
315 case ash::UMA_STATUS_AREA_DETAILED_AUDIO_VIEW:
316 base::RecordAction(
317 base::UserMetricsAction("StatusArea_Audio_Detailed"));
318 break;
319 case ash::UMA_STATUS_AREA_DETAILED_BLUETOOTH_VIEW:
320 base::RecordAction(
321 base::UserMetricsAction("StatusArea_Bluetooth_Detailed"));
322 break;
323 case ash::UMA_STATUS_AREA_DETAILED_BRIGHTNESS_VIEW:
324 base::RecordAction(
325 base::UserMetricsAction("StatusArea_Brightness_Detailed"));
326 break;
327 case ash::UMA_STATUS_AREA_DETAILED_DRIVE_VIEW:
328 base::RecordAction(
329 base::UserMetricsAction("StatusArea_Drive_Detailed"));
330 break;
331 case ash::UMA_STATUS_AREA_DETAILED_NETWORK_VIEW:
332 base::RecordAction(
333 base::UserMetricsAction("StatusArea_Network_Detailed"));
334 break;
335 case ash::UMA_STATUS_AREA_DETAILED_VPN_VIEW:
336 base::RecordAction(
337 base::UserMetricsAction("StatusArea_VPN_Detailed"));
338 break;
339 case ash::UMA_STATUS_AREA_DISABLE_AUTO_CLICK:
340 base::RecordAction(
341 base::UserMetricsAction("StatusArea_AutoClickDisabled"));
342 break;
343 case ash::UMA_STATUS_AREA_DISABLE_HIGH_CONTRAST:
344 base::RecordAction(
345 base::UserMetricsAction("StatusArea_HighContrastDisabled"));
346 break;
347 case ash::UMA_STATUS_AREA_DISABLE_LARGE_CURSOR:
348 base::RecordAction(
349 base::UserMetricsAction("StatusArea_LargeCursorDisabled"));
350 break;
351 case ash::UMA_STATUS_AREA_DISABLE_MAGNIFIER:
352 base::RecordAction(
353 base::UserMetricsAction("StatusArea_MagnifierDisabled"));
354 break;
355 case ash::UMA_STATUS_AREA_DISABLE_SPOKEN_FEEDBACK:
356 base::RecordAction(
357 base::UserMetricsAction("StatusArea_SpokenFeedbackDisabled"));
358 break;
359 case ash::UMA_STATUS_AREA_DISABLE_VIRTUAL_KEYBOARD:
360 base::RecordAction(
361 base::UserMetricsAction("StatusArea_VirtualKeyboardDisabled"));
362 break;
363 case ash::UMA_STATUS_AREA_DISABLE_WIFI:
364 base::RecordAction(
365 base::UserMetricsAction("StatusArea_Network_WifiDisabled"));
366 break;
367 case ash::UMA_STATUS_AREA_DRIVE_CANCEL_OPERATION:
368 base::RecordAction(
369 base::UserMetricsAction("StatusArea_Drive_CancelOperation"));
370 break;
371 case ash::UMA_STATUS_AREA_DRIVE_SETTINGS:
372 base::RecordAction(
373 base::UserMetricsAction("StatusArea_Drive_Settings"));
374 break;
375 case ash::UMA_STATUS_AREA_ENABLE_AUTO_CLICK:
376 base::RecordAction(
377 base::UserMetricsAction("StatusArea_AutoClickEnabled"));
378 break;
379 case ash::UMA_STATUS_AREA_ENABLE_HIGH_CONTRAST:
380 base::RecordAction(
381 base::UserMetricsAction("StatusArea_HighContrastEnabled"));
382 break;
383 case ash::UMA_STATUS_AREA_ENABLE_LARGE_CURSOR:
384 base::RecordAction(
385 base::UserMetricsAction("StatusArea_LargeCursorEnabled"));
386 break;
387 case ash::UMA_STATUS_AREA_ENABLE_MAGNIFIER:
388 base::RecordAction(
389 base::UserMetricsAction("StatusArea_MagnifierEnabled"));
390 break;
391 case ash::UMA_STATUS_AREA_ENABLE_SPOKEN_FEEDBACK:
392 base::RecordAction(
393 base::UserMetricsAction("StatusArea_SpokenFeedbackEnabled"));
394 break;
395 case ash::UMA_STATUS_AREA_ENABLE_VIRTUAL_KEYBOARD:
396 base::RecordAction(
397 base::UserMetricsAction("StatusArea_VirtualKeyboardEnabled"));
398 break;
399 case ash::UMA_STATUS_AREA_ENABLE_WIFI:
400 base::RecordAction(
401 base::UserMetricsAction("StatusArea_Network_WifiEnabled"));
402 break;
403 case ash::UMA_STATUS_AREA_IME_SHOW_DETAILED:
404 base::RecordAction(
405 base::UserMetricsAction("StatusArea_IME_Detailed"));
406 break;
407 case ash::UMA_STATUS_AREA_IME_SWITCH_MODE:
408 base::RecordAction(
409 base::UserMetricsAction("StatusArea_IME_SwitchMode"));
410 break;
411 case ash::UMA_STATUS_AREA_MENU_OPENED:
412 base::RecordAction(
413 base::UserMetricsAction("StatusArea_MenuOpened"));
414 break;
415 case ash::UMA_STATUS_AREA_NETWORK_JOIN_OTHER_CLICKED:
416 base::RecordAction(
417 base::UserMetricsAction("StatusArea_Network_JoinOther"));
418 break;
419 case ash::UMA_STATUS_AREA_NETWORK_SETTINGS_CLICKED:
420 base::RecordAction(
421 base::UserMetricsAction("StatusArea_Network_Settings"));
422 break;
423 case ash::UMA_STATUS_AREA_SHOW_NETWORK_CONNECTION_DETAILS:
424 base::RecordAction(
425 base::UserMetricsAction("StatusArea_Network_ConnectionDetails"));
426 break;
427 case ash::UMA_STATUS_AREA_SHOW_VPN_CONNECTION_DETAILS:
428 base::RecordAction(
429 base::UserMetricsAction("StatusArea_VPN_ConnectionDetails"));
430 break;
431 case ash::UMA_STATUS_AREA_SIGN_OUT:
432 base::RecordAction(
433 base::UserMetricsAction("StatusArea_SignOut"));
434 break;
435 case ash::UMA_STATUS_AREA_VPN_ADD_BUILT_IN_CLICKED:
436 base::RecordAction(base::UserMetricsAction("StatusArea_VPN_AddBuiltIn"));
437 break;
438 case ash::UMA_STATUS_AREA_VPN_ADD_THIRD_PARTY_CLICKED:
439 base::RecordAction(
440 base::UserMetricsAction("StatusArea_VPN_AddThirdParty"));
441 break;
442 case ash::UMA_STATUS_AREA_VPN_DISCONNECT_CLICKED:
443 base::RecordAction(base::UserMetricsAction("StatusArea_VPN_Disconnect"));
444 break;
445 case ash::UMA_STATUS_AREA_VPN_SETTINGS_CLICKED:
446 base::RecordAction(
447 base::UserMetricsAction("StatusArea_VPN_Settings"));
448 break;
449 case ash::UMA_TOGGLE_MAXIMIZE_CAPTION_CLICK:
450 base::RecordAction(
451 base::UserMetricsAction("Caption_ClickTogglesMaximize"));
452 break;
453 case ash::UMA_TOGGLE_MAXIMIZE_CAPTION_GESTURE:
454 base::RecordAction(
455 base::UserMetricsAction("Caption_GestureTogglesMaximize"));
456 break;
457 case ash::UMA_TOGGLE_SINGLE_AXIS_MAXIMIZE_BORDER_CLICK:
458 base::RecordAction(
459 base::UserMetricsAction(
460 "WindowBorder_ClickTogglesSingleAxisMaximize"));
461 break;
462 case ash::UMA_TOUCHPAD_GESTURE_OVERVIEW:
463 base::RecordAction(
464 base::UserMetricsAction("Touchpad_Gesture_Overview"));
465 break;
466 case ash::UMA_TOUCHSCREEN_TAP_DOWN:
467 base::RecordAction(base::UserMetricsAction("Touchscreen_Down"));
468 break;
469 case ash::UMA_TRAY_HELP:
470 base::RecordAction(base::UserMetricsAction("Tray_Help"));
471 break;
472 case ash::UMA_TRAY_LOCK_SCREEN:
473 base::RecordAction(base::UserMetricsAction("Tray_LockScreen"));
474 break;
475 case ash::UMA_TRAY_SHUT_DOWN:
476 base::RecordAction(base::UserMetricsAction("Tray_ShutDown"));
477 break;
478 case ash::UMA_WINDOW_APP_CLOSE_BUTTON_CLICK:
479 base::RecordAction(base::UserMetricsAction("AppCloseButton_Clk"));
480 break;
481 case ash::UMA_WINDOW_CLOSE_BUTTON_CLICK:
482 base::RecordAction(base::UserMetricsAction("CloseButton_Clk"));
483 break;
484 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_EXIT_FULLSCREEN:
485 base::RecordAction(base::UserMetricsAction("MaxButton_Clk_ExitFS"));
486 break;
487 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_RESTORE:
488 base::RecordAction(
489 base::UserMetricsAction("MaxButton_Clk_Restore"));
490 break;
491 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MAXIMIZE:
492 base::RecordAction(
493 base::UserMetricsAction("MaxButton_Clk_Maximize"));
494 break;
495 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_CLICK_MINIMIZE:
496 base::RecordAction(base::UserMetricsAction("MinButton_Clk"));
497 break;
498 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_LEFT:
499 base::RecordAction(base::UserMetricsAction("MaxButton_MaxLeft"));
500 break;
501 case ash::UMA_WINDOW_MAXIMIZE_BUTTON_MAXIMIZE_RIGHT:
502 base::RecordAction(base::UserMetricsAction("MaxButton_MaxRight"));
503 break;
504 case ash::UMA_WINDOW_OVERVIEW:
505 base::RecordAction(
506 base::UserMetricsAction("WindowSelector_Overview"));
507 break;
508 case ash::UMA_WINDOW_OVERVIEW_ENTER_KEY:
509 base::RecordAction(
510 base::UserMetricsAction("WindowSelector_OverviewEnterKey"));
511 break;
512 case ash::UMA_WINDOW_CYCLE:
513 base::RecordAction(
514 base::UserMetricsAction("WindowCycleController_Cycle"));
515 break;
519 void UserMetricsRecorder::RecordPeriodicMetrics() {
520 ShelfLayoutManager* manager =
521 ShelfLayoutManager::ForShelf(Shell::GetPrimaryRootWindow());
522 if (manager) {
523 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentOverTime",
524 manager->SelectValueForShelfAlignment(
525 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM,
526 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT,
527 SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT,
528 -1),
529 SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT);
532 UMA_HISTOGRAM_COUNTS_100("Ash.NumberOfVisibleWindowsInPrimaryDisplay",
533 GetNumVisibleWindowsInPrimaryDisplay());
535 UMA_HISTOGRAM_ENUMERATION("Ash.ActiveWindowShowTypeOverTime",
536 GetActiveWindowState(),
537 ACTIVE_WINDOW_STATE_TYPE_COUNT);
540 } // namespace ash