Chromium Code Reviews| 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 |