Chromium Code Reviews| 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", |
|
sky
2012/07/21 00:01:54
Why are these histograms and not UserMetricsAction
sadrul
2012/07/21 00:55:40
We considered using UserMetricsAction, but since w
|
| - 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) { |