Index: ash/touch/touch_uma.cc |
diff --git a/ash/touch/touch_uma.cc b/ash/touch/touch_uma.cc |
index 8a0167b8b18d8fa6d8a4cf33f0103b2e852a8bae..9438cce762e8c2ce50bbaf9c6b16fae883d81c13 100644 |
--- a/ash/touch/touch_uma.cc |
+++ b/ash/touch/touch_uma.cc |
@@ -28,6 +28,42 @@ enum GestureActionType { |
GESTURE_ACTION_COUNT |
}; |
+enum UMAEventType { |
+ UMA_ET_UNKNOWN, |
+ UMA_ET_TOUCH_RELEASED, |
+ UMA_ET_TOUCH_PRESSED, |
+ UMA_ET_TOUCH_MOVED, |
+ UMA_ET_TOUCH_STATIONARY, |
+ UMA_ET_TOUCH_CANCELLED, |
+ UMA_ET_GESTURE_SCROLL_BEGIN, |
+ UMA_ET_GESTURE_SCROLL_END, |
+ UMA_ET_GESTURE_SCROLL_UPDATE, |
+ UMA_ET_GESTURE_TAP, |
+ UMA_ET_GESTURE_TAP_DOWN, |
+ UMA_ET_GESTURE_BEGIN, |
+ UMA_ET_GESTURE_END, |
+ UMA_ET_GESTURE_DOUBLE_TAP, |
+ UMA_ET_GESTURE_TWO_FINGER_TAP, |
+ UMA_ET_GESTURE_PINCH_BEGIN, |
+ UMA_ET_GESTURE_PINCH_END, |
+ UMA_ET_GESTURE_PINCH_UPDATE, |
+ UMA_ET_GESTURE_LONG_PRESS, |
+ UMA_ET_GESTURE_MULTIFINGER_SWIPE, |
+ UMA_ET_SCROLL, |
+ UMA_ET_SCROLL_FLING_START, |
+ UMA_ET_SCROLL_FLING_CANCEL, |
+ UMA_ET_GESTURE_MULTIFINGER_SWIPE_3, |
+ UMA_ET_GESTURE_MULTIFINGER_SWIPE_4P, // 4+ fingers |
+ UMA_ET_GESTURE_SCROLL_UPDATE_2, |
+ UMA_ET_GESTURE_SCROLL_UPDATE_3, |
+ UMA_ET_GESTURE_SCROLL_UPDATE_4P, |
+ UMA_ET_GESTURE_PINCH_UPDATE_3, |
+ UMA_ET_GESTURE_PINCH_UPDATE_4P, |
+ // NOTE: Add new event types only immediately above this line. Make sure to |
+ // update the enum list in tools/histogram/histograms.xml accordingly. |
+ UMA_ET_COUNT |
+}; |
+ |
GestureActionType FindGestureActionType(aura::Window* window, |
const aura::GestureEvent& event) { |
if (!window || window->GetRootWindow() == window) { |
@@ -87,37 +123,78 @@ GestureActionType FindGestureActionType(aura::Window* window, |
return GESTURE_UNKNOWN; |
} |
-std::vector<int> GetEventCodes() { |
- // NOTE: Add new events only at the end of this list. Also, make sure the enum |
- // list in tools/histogram/histograms.xml is also updated. |
- int types[] = { |
- ui::ET_UNKNOWN, // This is to make sure that every intersting value |
- // has positive index. |
- ui::ET_TOUCH_RELEASED, |
- ui::ET_TOUCH_PRESSED, |
- ui::ET_TOUCH_MOVED, |
- ui::ET_TOUCH_STATIONARY, |
- ui::ET_TOUCH_CANCELLED, |
- ui::ET_GESTURE_SCROLL_BEGIN, |
- ui::ET_GESTURE_SCROLL_END, |
- ui::ET_GESTURE_SCROLL_UPDATE, |
- ui::ET_GESTURE_TAP, |
- ui::ET_GESTURE_TAP_DOWN, |
- ui::ET_GESTURE_BEGIN, |
- ui::ET_GESTURE_END, |
- ui::ET_GESTURE_DOUBLE_TAP, |
- ui::ET_GESTURE_TWO_FINGER_TAP, |
- ui::ET_GESTURE_PINCH_BEGIN, |
- ui::ET_GESTURE_PINCH_END, |
- ui::ET_GESTURE_PINCH_UPDATE, |
- ui::ET_GESTURE_LONG_PRESS, |
- ui::ET_GESTURE_MULTIFINGER_SWIPE, |
- ui::ET_SCROLL, |
- ui::ET_SCROLL_FLING_START, |
- ui::ET_SCROLL_FLING_CANCEL, |
- }; |
- |
- return std::vector<int>(types, types + arraysize(types)); |
+UMAEventType UMAEventTypeFromEvent(const aura::Event& event) { |
+ switch (event.type()) { |
+ case ui::ET_TOUCH_RELEASED: |
+ return UMA_ET_TOUCH_RELEASED; |
+ case ui::ET_TOUCH_PRESSED: |
+ return UMA_ET_TOUCH_PRESSED; |
+ case ui::ET_TOUCH_MOVED: |
+ return UMA_ET_TOUCH_MOVED; |
+ case ui::ET_TOUCH_STATIONARY: |
+ return UMA_ET_TOUCH_STATIONARY; |
+ case ui::ET_TOUCH_CANCELLED: |
+ return UMA_ET_TOUCH_CANCELLED; |
+ case ui::ET_GESTURE_SCROLL_BEGIN: |
+ return UMA_ET_GESTURE_SCROLL_BEGIN; |
+ case ui::ET_GESTURE_SCROLL_END: |
+ return UMA_ET_GESTURE_SCROLL_END; |
+ case ui::ET_GESTURE_SCROLL_UPDATE: { |
+ const aura::GestureEvent& gesture = |
+ static_cast<const aura::GestureEvent&>(event); |
+ if (gesture.details().touch_points() >= 4) |
+ return UMA_ET_GESTURE_SCROLL_UPDATE_4P; |
+ else if (gesture.details().touch_points() == 3) |
+ return UMA_ET_GESTURE_SCROLL_UPDATE_3; |
+ else if (gesture.details().touch_points() == 2) |
+ return UMA_ET_GESTURE_SCROLL_UPDATE_2; |
+ return UMA_ET_GESTURE_SCROLL_UPDATE; |
+ } |
+ case ui::ET_GESTURE_TAP: |
+ return UMA_ET_GESTURE_TAP; |
+ case ui::ET_GESTURE_TAP_DOWN: |
+ return UMA_ET_GESTURE_TAP_DOWN; |
+ case ui::ET_GESTURE_BEGIN: |
+ return UMA_ET_GESTURE_BEGIN; |
+ case ui::ET_GESTURE_END: |
+ return UMA_ET_GESTURE_END; |
+ case ui::ET_GESTURE_DOUBLE_TAP: |
+ return UMA_ET_GESTURE_DOUBLE_TAP; |
+ case ui::ET_GESTURE_TWO_FINGER_TAP: |
+ return UMA_ET_GESTURE_TWO_FINGER_TAP; |
+ case ui::ET_GESTURE_PINCH_BEGIN: |
+ return UMA_ET_GESTURE_PINCH_BEGIN; |
+ case ui::ET_GESTURE_PINCH_END: |
+ return UMA_ET_GESTURE_PINCH_END; |
+ case ui::ET_GESTURE_PINCH_UPDATE: { |
+ const aura::GestureEvent& gesture = |
+ static_cast<const aura::GestureEvent&>(event); |
+ if (gesture.details().touch_points() >= 4) |
+ return UMA_ET_GESTURE_PINCH_UPDATE_4P; |
+ else if (gesture.details().touch_points() == 3) |
+ return UMA_ET_GESTURE_PINCH_UPDATE_3; |
+ return UMA_ET_GESTURE_PINCH_UPDATE; |
+ } |
+ case ui::ET_GESTURE_LONG_PRESS: |
+ return UMA_ET_GESTURE_LONG_PRESS; |
+ case ui::ET_GESTURE_MULTIFINGER_SWIPE: { |
+ const aura::GestureEvent& gesture = |
+ static_cast<const aura::GestureEvent&>(event); |
+ if (gesture.details().touch_points() >= 4) |
+ return UMA_ET_GESTURE_MULTIFINGER_SWIPE_4P; |
+ else if (gesture.details().touch_points() == 3) |
+ return UMA_ET_GESTURE_MULTIFINGER_SWIPE_3; |
+ return UMA_ET_GESTURE_MULTIFINGER_SWIPE; |
+ } |
+ case ui::ET_SCROLL: |
+ return UMA_ET_SCROLL; |
+ case ui::ET_SCROLL_FLING_START: |
+ return UMA_ET_SCROLL_FLING_START; |
+ case ui::ET_SCROLL_FLING_CANCEL: |
+ return UMA_ET_SCROLL_FLING_CANCEL; |
+ default: |
+ return UMA_ET_UNKNOWN; |
+ } |
} |
} |
@@ -126,13 +203,6 @@ namespace ash { |
namespace internal { |
TouchUMA::TouchUMA() { |
- std::vector<int> types = GetEventCodes(); |
- for (std::vector<int>::iterator iter = types.begin(); |
- iter != types.end(); |
- ++iter) { |
- ui_event_type_map_[static_cast<ui::EventType>(*iter)] = |
- iter - types.begin(); |
- } |
} |
TouchUMA::~TouchUMA() { |
@@ -141,8 +211,8 @@ TouchUMA::~TouchUMA() { |
void TouchUMA::RecordGestureEvent(aura::Window* target, |
const aura::GestureEvent& event) { |
UMA_HISTOGRAM_ENUMERATION("Ash.GestureCreated", |
- ui_event_type_map_[event.type()], |
- ui_event_type_map_.size()); |
+ UMAEventTypeFromEvent(event), |
+ UMA_ET_COUNT); |
GestureActionType action = FindGestureActionType(target, event); |
if (action != GESTURE_UNKNOWN) { |