OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 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. | |
4 | |
5 #include "ui/events/gesture_detection/gesture_touch_uma_histogram.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "base/metrics/histogram.h" | |
9 | |
10 namespace ui { | |
11 | |
12 GestureTouchUMAHistogram::GestureTouchUMAHistogram() { | |
13 } | |
14 | |
15 GestureTouchUMAHistogram::~GestureTouchUMAHistogram() { | |
16 } | |
17 | |
18 GestureTouchUMAHistogram::WindowTouchDetails::WindowTouchDetails() | |
19 : max_distance_from_start_squared_(0), is_single_finger_(false) { | |
20 } | |
21 | |
22 GestureTouchUMAHistogram::WindowTouchDetails::WindowTouchDetails( | |
23 const base::TimeTicks& start_time, | |
24 const gfx::Point& start_touch_position) | |
25 : start_time_(start_time), | |
26 start_touch_position_(start_touch_position), | |
27 max_distance_from_start_squared_(0), | |
28 is_single_finger_(true) { | |
29 } | |
30 | |
31 GestureTouchUMAHistogram::WindowTouchDetails::~WindowTouchDetails() { | |
32 } | |
33 | |
34 void GestureTouchUMAHistogram::RecordGestureEvent( | |
35 const GestureEventData& gesture) { | |
36 UMA_HISTOGRAM_ENUMERATION( | |
37 "Event.GestureCreated", UMAEventTypeFromEvent(gesture), UMA_ET_COUNT); | |
38 } | |
39 | |
40 void GestureTouchUMAHistogram::RecordTouchEvent(const MotionEvent& event) { | |
41 EventType eventType = TouchEventTypeFromMotionEvent(event); | |
tdresser
2014/08/27 12:35:39
Just use GetAction() from the MotionEvent directly
lanwei
2014/08/27 23:32:00
Done.
| |
42 if (eventType == ET_TOUCH_PRESSED) { | |
43 details.reset(new WindowTouchDetails( | |
44 event.GetEventTime(), gfx::Point(event.GetX(), event.GetY()))); | |
45 } else if (eventType == ET_TOUCH_MOVED && details->is_single_finger_) { | |
46 float cur_dist = (details->start_touch_position_ - | |
47 gfx::Point(event.GetX(), event.GetY())).LengthSquared(); | |
48 if (cur_dist > details->max_distance_from_start_squared_) | |
49 details->max_distance_from_start_squared_ = cur_dist; | |
50 } else { | |
51 if (eventType == ET_TOUCH_RELEASED && event.GetPointerCount() == 1 && | |
52 details->is_single_finger_) { | |
53 UMA_HISTOGRAM_CUSTOM_COUNTS( | |
54 "Event.TouchMaxDistance", | |
tdresser
2014/08/27 12:35:39
You'll need to modify histograms.xml to deprecate
lanwei
2014/08/27 23:31:59
Done.
| |
55 static_cast<int>(sqrt(details->max_distance_from_start_squared_)), | |
56 0, | |
57 1500, | |
58 50); | |
59 | |
60 base::TimeDelta duration = event.GetEventTime() - details->start_time_; | |
61 UMA_HISTOGRAM_TIMES("Event.TouchDuration2", duration); | |
62 } | |
63 details.reset(new WindowTouchDetails()); | |
64 } | |
65 } | |
66 | |
67 EventType GestureTouchUMAHistogram::TouchEventTypeFromMotionEvent( | |
tdresser
2014/08/27 12:35:39
This is unnecessary.
lanwei
2014/08/27 23:31:59
Done.
| |
68 const MotionEvent& event) { | |
69 switch (event.GetAction()) { | |
70 case MotionEvent::ACTION_DOWN: | |
71 return ET_TOUCH_PRESSED; | |
72 case MotionEvent::ACTION_UP: | |
73 return ET_TOUCH_RELEASED; | |
74 case MotionEvent::ACTION_MOVE: | |
75 return ET_TOUCH_MOVED; | |
76 case MotionEvent::ACTION_CANCEL: | |
77 return ET_TOUCH_CANCELLED; | |
78 default: | |
79 return ET_UNKNOWN; | |
80 } | |
81 } | |
82 | |
83 UMAEventType GestureTouchUMAHistogram::UMAEventTypeFromEvent( | |
84 const GestureEventData& gesture) { | |
85 switch (gesture.type()) { | |
86 case ET_TOUCH_RELEASED: | |
87 return UMA_ET_TOUCH_RELEASED; | |
88 case ET_TOUCH_PRESSED: | |
89 return UMA_ET_TOUCH_PRESSED; | |
90 case ET_TOUCH_MOVED: | |
91 return UMA_ET_TOUCH_MOVED; | |
92 case ET_TOUCH_CANCELLED: | |
93 return UMA_ET_TOUCH_CANCELLED; | |
94 case ET_GESTURE_SCROLL_BEGIN: | |
95 return UMA_ET_GESTURE_SCROLL_BEGIN; | |
96 case ET_GESTURE_SCROLL_END: | |
97 return UMA_ET_GESTURE_SCROLL_END; | |
98 case ET_GESTURE_SCROLL_UPDATE: { | |
99 int touch_points = gesture.details.touch_points(); | |
100 if (touch_points == 1) | |
101 return UMA_ET_GESTURE_SCROLL_UPDATE; | |
102 else if (touch_points == 2) | |
103 return UMA_ET_GESTURE_SCROLL_UPDATE_2; | |
104 else if (touch_points == 3) | |
105 return UMA_ET_GESTURE_SCROLL_UPDATE_3; | |
106 return UMA_ET_GESTURE_SCROLL_UPDATE_4P; | |
107 } | |
108 case ET_GESTURE_TAP: { | |
109 int tap_count = gesture.details.tap_count(); | |
110 if (tap_count == 1) | |
111 return UMA_ET_GESTURE_TAP; | |
112 if (tap_count == 2) | |
113 return UMA_ET_GESTURE_DOUBLE_TAP; | |
114 if (tap_count == 3) | |
115 return UMA_ET_GESTURE_TRIPLE_TAP; | |
116 NOTREACHED() << "Received tap with tapcount " << tap_count; | |
117 return UMA_ET_UNKNOWN; | |
118 } | |
119 case ET_GESTURE_TAP_DOWN: | |
120 return UMA_ET_GESTURE_TAP_DOWN; | |
121 case ET_GESTURE_BEGIN: | |
122 return UMA_ET_GESTURE_BEGIN; | |
123 case ET_GESTURE_END: | |
124 return UMA_ET_GESTURE_END; | |
125 case ET_GESTURE_TWO_FINGER_TAP: | |
126 return UMA_ET_GESTURE_TWO_FINGER_TAP; | |
127 case ET_GESTURE_PINCH_BEGIN: | |
128 return UMA_ET_GESTURE_PINCH_BEGIN; | |
129 case ET_GESTURE_PINCH_END: | |
130 return UMA_ET_GESTURE_PINCH_END; | |
131 case ET_GESTURE_PINCH_UPDATE: { | |
132 int touch_points = gesture.details.touch_points(); | |
133 if (touch_points >= 4) | |
134 return UMA_ET_GESTURE_PINCH_UPDATE_4P; | |
135 else if (touch_points == 3) | |
136 return UMA_ET_GESTURE_PINCH_UPDATE_3; | |
137 return UMA_ET_GESTURE_PINCH_UPDATE; | |
138 } | |
139 case ET_GESTURE_LONG_PRESS: | |
140 return UMA_ET_GESTURE_LONG_PRESS; | |
141 case ET_GESTURE_LONG_TAP: | |
142 return UMA_ET_GESTURE_LONG_TAP; | |
143 case ET_GESTURE_SWIPE: { | |
144 int touch_points = gesture.details.touch_points(); | |
145 if (touch_points == 1) | |
146 return UMA_ET_GESTURE_SWIPE_1; | |
147 else if (touch_points == 2) | |
148 return UMA_ET_GESTURE_SWIPE_2; | |
149 else if (touch_points == 3) | |
150 return UMA_ET_GESTURE_SWIPE_3; | |
151 return UMA_ET_GESTURE_SWIPE_4P; | |
152 } | |
153 case ET_GESTURE_WIN8_EDGE_SWIPE: | |
154 return UMA_ET_GESTURE_WIN8_EDGE_SWIPE; | |
155 case ET_GESTURE_TAP_CANCEL: | |
156 return UMA_ET_GESTURE_TAP_CANCEL; | |
157 case ET_GESTURE_SHOW_PRESS: | |
158 return UMA_ET_GESTURE_SHOW_PRESS; | |
159 case ET_SCROLL: | |
160 return UMA_ET_SCROLL; | |
161 case ET_SCROLL_FLING_START: | |
162 return UMA_ET_SCROLL_FLING_START; | |
163 case ET_SCROLL_FLING_CANCEL: | |
164 return UMA_ET_SCROLL_FLING_CANCEL; | |
165 case ET_GESTURE_TAP_UNCONFIRMED: | |
166 return UMA_ET_GESTURE_TAP_UNCONFIRMED; | |
167 case ET_GESTURE_DOUBLE_TAP: | |
168 return UMA_ET_GESTURE_DOUBLE_TAP; | |
169 default: | |
170 NOTREACHED(); | |
171 return UMA_ET_UNKNOWN; | |
172 } | |
173 } | |
174 | |
175 } // namespace ui | |
OLD | NEW |