OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/touch/touch_uma.h" | 5 #include "ash/touch/touch_uma.h" |
6 | 6 |
7 #include "ash/metrics/user_metrics_recorder.h" | 7 #include "ash/metrics/user_metrics_recorder.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
11 #include "ui/aura/env.h" | 11 #include "ui/aura/env.h" |
12 #include "ui/aura/window.h" | 12 #include "ui/aura/window.h" |
13 #include "ui/aura/window_event_dispatcher.h" | 13 #include "ui/aura/window_event_dispatcher.h" |
14 #include "ui/aura/window_property.h" | 14 #include "ui/aura/window_property.h" |
15 #include "ui/events/event.h" | 15 #include "ui/events/event.h" |
16 #include "ui/events/event_utils.h" | 16 #include "ui/events/event_utils.h" |
17 #include "ui/gfx/point_conversions.h" | 17 #include "ui/gfx/point_conversions.h" |
18 | 18 |
19 #if defined(USE_XI2_MT) | 19 #if defined(USE_XI2_MT) |
20 #include <X11/extensions/XInput2.h> | 20 #include <X11/extensions/XInput2.h> |
21 #include <X11/Xlib.h> | 21 #include <X11/Xlib.h> |
22 #endif | 22 #endif |
23 | 23 |
24 namespace { | 24 namespace { |
25 | 25 |
26 enum UMAEventType { | 26 enum UMAEventType { |
27 UMA_ET_UNKNOWN, | 27 // WARNING: Do not change the numerical values of any of these types. |
28 UMA_ET_TOUCH_RELEASED, | 28 // Do not remove deprecated types - just comment them as deprecated. |
29 UMA_ET_TOUCH_PRESSED, | 29 UMA_ET_UNKNOWN = 0, |
30 UMA_ET_TOUCH_MOVED, | 30 UMA_ET_TOUCH_RELEASED = 1, |
31 UMA_ET_TOUCH_STATIONARY, // Deprecated. Do not remove. | 31 UMA_ET_TOUCH_PRESSED = 2, |
32 UMA_ET_TOUCH_CANCELLED, | 32 UMA_ET_TOUCH_MOVED = 3, |
33 UMA_ET_GESTURE_SCROLL_BEGIN, | 33 UMA_ET_TOUCH_STATIONARY = 4, // Deprecated. Do not remove. |
34 UMA_ET_GESTURE_SCROLL_END, | 34 UMA_ET_TOUCH_CANCELLED = 5, |
35 UMA_ET_GESTURE_SCROLL_UPDATE, | 35 UMA_ET_GESTURE_SCROLL_BEGIN = 6, |
36 UMA_ET_GESTURE_TAP, | 36 UMA_ET_GESTURE_SCROLL_END = 7, |
37 UMA_ET_GESTURE_TAP_DOWN, | 37 UMA_ET_GESTURE_SCROLL_UPDATE = 8, |
38 UMA_ET_GESTURE_BEGIN, | 38 UMA_ET_GESTURE_TAP = 9, |
39 UMA_ET_GESTURE_END, | 39 UMA_ET_GESTURE_TAP_DOWN = 10, |
40 UMA_ET_GESTURE_DOUBLE_TAP, | 40 UMA_ET_GESTURE_BEGIN = 11, |
41 UMA_ET_GESTURE_TRIPLE_TAP, | 41 UMA_ET_GESTURE_END = 12, |
42 UMA_ET_GESTURE_TWO_FINGER_TAP, | 42 UMA_ET_GESTURE_DOUBLE_TAP = 13, |
43 UMA_ET_GESTURE_PINCH_BEGIN, | 43 UMA_ET_GESTURE_TRIPLE_TAP = 14, |
44 UMA_ET_GESTURE_PINCH_END, | 44 UMA_ET_GESTURE_TWO_FINGER_TAP = 15, |
45 UMA_ET_GESTURE_PINCH_UPDATE, | 45 UMA_ET_GESTURE_PINCH_BEGIN = 16, |
46 UMA_ET_GESTURE_LONG_PRESS, | 46 UMA_ET_GESTURE_PINCH_END = 17, |
47 UMA_ET_GESTURE_MULTIFINGER_SWIPE, | 47 UMA_ET_GESTURE_PINCH_UPDATE = 18, |
48 UMA_ET_SCROLL, | 48 UMA_ET_GESTURE_LONG_PRESS = 19, |
49 UMA_ET_SCROLL_FLING_START, | 49 UMA_ET_GESTURE_SWIPE_2 = 20, // Swipe with 2 fingers |
50 UMA_ET_SCROLL_FLING_CANCEL, | 50 UMA_ET_SCROLL = 21, |
51 UMA_ET_GESTURE_MULTIFINGER_SWIPE_3, | 51 UMA_ET_SCROLL_FLING_START = 22, |
52 UMA_ET_GESTURE_MULTIFINGER_SWIPE_4P, // 4+ fingers | 52 UMA_ET_SCROLL_FLING_CANCEL = 23, |
53 UMA_ET_GESTURE_SCROLL_UPDATE_2, | 53 UMA_ET_GESTURE_SWIPE_3 = 24, // Swipe with 3 fingers |
54 UMA_ET_GESTURE_SCROLL_UPDATE_3, | 54 UMA_ET_GESTURE_SWIPE_4P = 25, // Swipe with 4+ fingers |
55 UMA_ET_GESTURE_SCROLL_UPDATE_4P, | 55 UMA_ET_GESTURE_SCROLL_UPDATE_2 = 26, |
56 UMA_ET_GESTURE_PINCH_UPDATE_3, | 56 UMA_ET_GESTURE_SCROLL_UPDATE_3 = 27, |
57 UMA_ET_GESTURE_PINCH_UPDATE_4P, | 57 UMA_ET_GESTURE_SCROLL_UPDATE_4P = 28, |
58 UMA_ET_GESTURE_LONG_TAP, | 58 UMA_ET_GESTURE_PINCH_UPDATE_3 = 29, |
59 UMA_ET_GESTURE_SHOW_PRESS, | 59 UMA_ET_GESTURE_PINCH_UPDATE_4P = 30, |
60 UMA_ET_GESTURE_TAP_CANCEL, | 60 UMA_ET_GESTURE_LONG_TAP = 31, |
61 UMA_ET_GESTURE_WIN8_EDGE_SWIPE, | 61 UMA_ET_GESTURE_SHOW_PRESS = 32, |
| 62 UMA_ET_GESTURE_TAP_CANCEL = 33, |
| 63 UMA_ET_GESTURE_WIN8_EDGE_SWIPE = 34, |
| 64 UMA_ET_GESTURE_SWIPE_1 = 35, // Swipe with 1 finger |
62 // NOTE: Add new event types only immediately above this line. Make sure to | 65 // NOTE: Add new event types only immediately above this line. Make sure to |
63 // update the UIEventType enum in tools/metrics/histograms/histograms.xml | 66 // update the UIEventType enum in tools/metrics/histograms/histograms.xml |
64 // accordingly. | 67 // accordingly. |
65 UMA_ET_COUNT | 68 UMA_ET_COUNT |
66 }; | 69 }; |
67 | 70 |
68 struct WindowTouchDetails { | 71 struct WindowTouchDetails { |
69 WindowTouchDetails() | 72 WindowTouchDetails() |
70 : max_distance_from_start_squared_(0) { | 73 : max_distance_from_start_squared_(0) { |
71 } | 74 } |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 return UMA_ET_TOUCH_MOVED; | 109 return UMA_ET_TOUCH_MOVED; |
107 case ui::ET_TOUCH_CANCELLED: | 110 case ui::ET_TOUCH_CANCELLED: |
108 return UMA_ET_TOUCH_CANCELLED; | 111 return UMA_ET_TOUCH_CANCELLED; |
109 case ui::ET_GESTURE_SCROLL_BEGIN: | 112 case ui::ET_GESTURE_SCROLL_BEGIN: |
110 return UMA_ET_GESTURE_SCROLL_BEGIN; | 113 return UMA_ET_GESTURE_SCROLL_BEGIN; |
111 case ui::ET_GESTURE_SCROLL_END: | 114 case ui::ET_GESTURE_SCROLL_END: |
112 return UMA_ET_GESTURE_SCROLL_END; | 115 return UMA_ET_GESTURE_SCROLL_END; |
113 case ui::ET_GESTURE_SCROLL_UPDATE: { | 116 case ui::ET_GESTURE_SCROLL_UPDATE: { |
114 const ui::GestureEvent& gesture = | 117 const ui::GestureEvent& gesture = |
115 static_cast<const ui::GestureEvent&>(event); | 118 static_cast<const ui::GestureEvent&>(event); |
116 if (gesture.details().touch_points() >= 4) | 119 if (gesture.details().touch_points() == 1) |
117 return UMA_ET_GESTURE_SCROLL_UPDATE_4P; | 120 return UMA_ET_GESTURE_SCROLL_UPDATE; |
| 121 else if (gesture.details().touch_points() == 2) |
| 122 return UMA_ET_GESTURE_SCROLL_UPDATE_2; |
118 else if (gesture.details().touch_points() == 3) | 123 else if (gesture.details().touch_points() == 3) |
119 return UMA_ET_GESTURE_SCROLL_UPDATE_3; | 124 return UMA_ET_GESTURE_SCROLL_UPDATE_3; |
120 else if (gesture.details().touch_points() == 2) | 125 return UMA_ET_GESTURE_SCROLL_UPDATE_4P; |
121 return UMA_ET_GESTURE_SCROLL_UPDATE_2; | |
122 return UMA_ET_GESTURE_SCROLL_UPDATE; | |
123 } | 126 } |
124 case ui::ET_GESTURE_TAP: { | 127 case ui::ET_GESTURE_TAP: { |
125 const ui::GestureEvent& gesture = | 128 const ui::GestureEvent& gesture = |
126 static_cast<const ui::GestureEvent&>(event); | 129 static_cast<const ui::GestureEvent&>(event); |
127 int tap_count = gesture.details().tap_count(); | 130 int tap_count = gesture.details().tap_count(); |
128 if (tap_count == 1) | 131 if (tap_count == 1) |
129 return UMA_ET_GESTURE_TAP; | 132 return UMA_ET_GESTURE_TAP; |
130 if (tap_count == 2) | 133 if (tap_count == 2) |
131 return UMA_ET_GESTURE_DOUBLE_TAP; | 134 return UMA_ET_GESTURE_DOUBLE_TAP; |
132 if (tap_count == 3) | 135 if (tap_count == 3) |
(...skipping 19 matching lines...) Expand all Loading... |
152 if (gesture.details().touch_points() >= 4) | 155 if (gesture.details().touch_points() >= 4) |
153 return UMA_ET_GESTURE_PINCH_UPDATE_4P; | 156 return UMA_ET_GESTURE_PINCH_UPDATE_4P; |
154 else if (gesture.details().touch_points() == 3) | 157 else if (gesture.details().touch_points() == 3) |
155 return UMA_ET_GESTURE_PINCH_UPDATE_3; | 158 return UMA_ET_GESTURE_PINCH_UPDATE_3; |
156 return UMA_ET_GESTURE_PINCH_UPDATE; | 159 return UMA_ET_GESTURE_PINCH_UPDATE; |
157 } | 160 } |
158 case ui::ET_GESTURE_LONG_PRESS: | 161 case ui::ET_GESTURE_LONG_PRESS: |
159 return UMA_ET_GESTURE_LONG_PRESS; | 162 return UMA_ET_GESTURE_LONG_PRESS; |
160 case ui::ET_GESTURE_LONG_TAP: | 163 case ui::ET_GESTURE_LONG_TAP: |
161 return UMA_ET_GESTURE_LONG_TAP; | 164 return UMA_ET_GESTURE_LONG_TAP; |
162 case ui::ET_GESTURE_MULTIFINGER_SWIPE: { | 165 case ui::ET_GESTURE_SWIPE: { |
163 const ui::GestureEvent& gesture = | 166 const ui::GestureEvent& gesture = |
164 static_cast<const ui::GestureEvent&>(event); | 167 static_cast<const ui::GestureEvent&>(event); |
165 if (gesture.details().touch_points() >= 4) | 168 if (gesture.details().touch_points() == 1) |
166 return UMA_ET_GESTURE_MULTIFINGER_SWIPE_4P; | 169 return UMA_ET_GESTURE_SWIPE_1; |
| 170 else if (gesture.details().touch_points() == 2) |
| 171 return UMA_ET_GESTURE_SWIPE_2; |
167 else if (gesture.details().touch_points() == 3) | 172 else if (gesture.details().touch_points() == 3) |
168 return UMA_ET_GESTURE_MULTIFINGER_SWIPE_3; | 173 return UMA_ET_GESTURE_SWIPE_3; |
169 return UMA_ET_GESTURE_MULTIFINGER_SWIPE; | 174 return UMA_ET_GESTURE_SWIPE_4P; |
170 } | 175 } |
171 case ui::ET_GESTURE_WIN8_EDGE_SWIPE: | 176 case ui::ET_GESTURE_WIN8_EDGE_SWIPE: |
172 return UMA_ET_GESTURE_WIN8_EDGE_SWIPE; | 177 return UMA_ET_GESTURE_WIN8_EDGE_SWIPE; |
173 case ui::ET_GESTURE_TAP_CANCEL: | 178 case ui::ET_GESTURE_TAP_CANCEL: |
174 return UMA_ET_GESTURE_TAP_CANCEL; | 179 return UMA_ET_GESTURE_TAP_CANCEL; |
175 case ui::ET_GESTURE_SHOW_PRESS: | 180 case ui::ET_GESTURE_SHOW_PRESS: |
176 return UMA_ET_GESTURE_SHOW_PRESS; | 181 return UMA_ET_GESTURE_SHOW_PRESS; |
177 case ui::ET_SCROLL: | 182 case ui::ET_SCROLL: |
178 return UMA_ET_SCROLL; | 183 return UMA_ET_SCROLL; |
179 case ui::ET_SCROLL_FLING_START: | 184 case ui::ET_SCROLL_FLING_START: |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 return GESTURE_OMNIBOX_SCROLL; | 468 return GESTURE_OMNIBOX_SCROLL; |
464 if (event.type() == ui::ET_GESTURE_PINCH_BEGIN) | 469 if (event.type() == ui::ET_GESTURE_PINCH_BEGIN) |
465 return GESTURE_OMNIBOX_PINCH; | 470 return GESTURE_OMNIBOX_PINCH; |
466 return GESTURE_UNKNOWN; | 471 return GESTURE_UNKNOWN; |
467 } | 472 } |
468 | 473 |
469 return GESTURE_UNKNOWN; | 474 return GESTURE_UNKNOWN; |
470 } | 475 } |
471 | 476 |
472 } // namespace ash | 477 } // namespace ash |
OLD | NEW |