gesture_touch_uma_histogram.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Copyright 2014 The Chromium Authors. All rights reserved. 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Use of this source code is governed by a BSD-style license that can be 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// found in the LICENSE file. 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "ui/events/gesture_detection/gesture_touch_uma_histogram.h" 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include "base/metrics/histogram.h" 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace ui { 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgGestureTouchUMAHistogram::GestureTouchUMAHistogram() 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org : max_distance_from_start_squared_(0), is_single_finger_(true) { 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgGestureTouchUMAHistogram::~GestureTouchUMAHistogram() { 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid GestureTouchUMAHistogram::RecordGestureEvent( 1959b3a4ca1db1bb16568f4d184c7cd13e9c1f5786fischman@webrtc.org const GestureEventData& gesture) { 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org UMA_HISTOGRAM_ENUMERATION( 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org "Event.GestureCreated", UMAEventTypeFromEvent(gesture), UMA_ET_COUNT); 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid GestureTouchUMAHistogram::RecordTouchEvent(const MotionEvent& event) { 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (event.GetAction() == MotionEvent::ACTION_DOWN) { 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org start_time_ = event.GetEventTime(); 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org start_touch_position_ = gfx::Point(event.GetX(), event.GetY()); 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org is_single_finger_ = true; 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org max_distance_from_start_squared_ = 0; 30 } else if (event.GetAction() == MotionEvent::ACTION_MOVE && 31 is_single_finger_) { 32 float cur_dist = (start_touch_position_ - 33 gfx::Point(event.GetX(), event.GetY())).LengthSquared(); 34 if (cur_dist > max_distance_from_start_squared_) 35 max_distance_from_start_squared_ = cur_dist; 36 } else { 37 if (event.GetAction() == MotionEvent::ACTION_UP && is_single_finger_) { 38 UMA_HISTOGRAM_CUSTOM_COUNTS( 39 "Event.TouchMaxDistance", 40 static_cast<int>(sqrt(max_distance_from_start_squared_)), 41 0, 42 1500, 43 50); 44 45 base::TimeDelta duration = event.GetEventTime() - start_time_; 46 UMA_HISTOGRAM_TIMES("Event.TouchDuration", duration); 47 } 48 is_single_finger_ = false; 49 } 50} 51 52UMAEventType GestureTouchUMAHistogram::UMAEventTypeFromEvent( 53 const GestureEventData& gesture) { 54 switch (gesture.type()) { 55 case ET_TOUCH_RELEASED: 56 return UMA_ET_TOUCH_RELEASED; 57 case ET_TOUCH_PRESSED: 58 return UMA_ET_TOUCH_PRESSED; 59 case ET_TOUCH_MOVED: 60 return UMA_ET_TOUCH_MOVED; 61 case ET_TOUCH_CANCELLED: 62 return UMA_ET_TOUCH_CANCELLED; 63 case ET_GESTURE_SCROLL_BEGIN: 64 return UMA_ET_GESTURE_SCROLL_BEGIN; 65 case ET_GESTURE_SCROLL_END: 66 return UMA_ET_GESTURE_SCROLL_END; 67 case ET_GESTURE_SCROLL_UPDATE: { 68 int touch_points = gesture.details.touch_points(); 69 if (touch_points == 1) 70 return UMA_ET_GESTURE_SCROLL_UPDATE; 71 else if (touch_points == 2) 72 return UMA_ET_GESTURE_SCROLL_UPDATE_2; 73 else if (touch_points == 3) 74 return UMA_ET_GESTURE_SCROLL_UPDATE_3; 75 return UMA_ET_GESTURE_SCROLL_UPDATE_4P; 76 } 77 case ET_GESTURE_TAP: { 78 int tap_count = gesture.details.tap_count(); 79 if (tap_count == 1) 80 return UMA_ET_GESTURE_TAP; 81 if (tap_count == 2) 82 return UMA_ET_GESTURE_DOUBLE_TAP; 83 if (tap_count == 3) 84 return UMA_ET_GESTURE_TRIPLE_TAP; 85 NOTREACHED() << "Received tap with tapcount " << tap_count; 86 return UMA_ET_UNKNOWN; 87 } 88 case ET_GESTURE_TAP_DOWN: 89 return UMA_ET_GESTURE_TAP_DOWN; 90 case ET_GESTURE_BEGIN: 91 return UMA_ET_GESTURE_BEGIN; 92 case ET_GESTURE_END: 93 return UMA_ET_GESTURE_END; 94 case ET_GESTURE_TWO_FINGER_TAP: 95 return UMA_ET_GESTURE_TWO_FINGER_TAP; 96 case ET_GESTURE_PINCH_BEGIN: 97 return UMA_ET_GESTURE_PINCH_BEGIN; 98 case ET_GESTURE_PINCH_END: 99 return UMA_ET_GESTURE_PINCH_END; 100 case ET_GESTURE_PINCH_UPDATE: { 101 int touch_points = gesture.details.touch_points(); 102 if (touch_points >= 4) 103 return UMA_ET_GESTURE_PINCH_UPDATE_4P; 104 else if (touch_points == 3) 105 return UMA_ET_GESTURE_PINCH_UPDATE_3; 106 return UMA_ET_GESTURE_PINCH_UPDATE; 107 } 108 case ET_GESTURE_LONG_PRESS: 109 return UMA_ET_GESTURE_LONG_PRESS; 110 case ET_GESTURE_LONG_TAP: 111 return UMA_ET_GESTURE_LONG_TAP; 112 case ET_GESTURE_SWIPE: { 113 int touch_points = gesture.details.touch_points(); 114 if (touch_points == 1) 115 return UMA_ET_GESTURE_SWIPE_1; 116 else if (touch_points == 2) 117 return UMA_ET_GESTURE_SWIPE_2; 118 else if (touch_points == 3) 119 return UMA_ET_GESTURE_SWIPE_3; 120 return UMA_ET_GESTURE_SWIPE_4P; 121 } 122 case ET_GESTURE_WIN8_EDGE_SWIPE: 123 return UMA_ET_GESTURE_WIN8_EDGE_SWIPE; 124 case ET_GESTURE_TAP_CANCEL: 125 return UMA_ET_GESTURE_TAP_CANCEL; 126 case ET_GESTURE_SHOW_PRESS: 127 return UMA_ET_GESTURE_SHOW_PRESS; 128 case ET_SCROLL: 129 return UMA_ET_SCROLL; 130 case ET_SCROLL_FLING_START: 131 return UMA_ET_SCROLL_FLING_START; 132 case ET_SCROLL_FLING_CANCEL: 133 return UMA_ET_SCROLL_FLING_CANCEL; 134 case ET_GESTURE_TAP_UNCONFIRMED: 135 return UMA_ET_GESTURE_TAP_UNCONFIRMED; 136 case ET_GESTURE_DOUBLE_TAP: 137 return UMA_ET_GESTURE_DOUBLE_TAP; 138 default: 139 NOTREACHED(); 140 return UMA_ET_UNKNOWN; 141 } 142} 143 144} // namespace ui 145