Home | History | Annotate | Download | only in gesture_detection
      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 #ifndef UI_EVENTS_GESTURE_DETECTION_GESTURE_TOUCH_UMA_HISTOGRAM_H_
      6 #define UI_EVENTS_GESTURE_DETECTION_GESTURE_TOUCH_UMA_HISTOGRAM_H_
      7 
      8 #include "base/time/time.h"
      9 #include "ui/events/gesture_detection/gesture_detection_export.h"
     10 #include "ui/events/gesture_detection/gesture_event_data.h"
     11 #include "ui/events/gesture_detection/motion_event.h"
     12 
     13 namespace ui {
     14 
     15 enum UMAEventType {
     16   // WARNING: Do not change the numerical values of any of these types.
     17   // Do not remove deprecated types - just comment them as deprecated.
     18   UMA_ET_UNKNOWN = 0,
     19   UMA_ET_TOUCH_RELEASED = 1,
     20   UMA_ET_TOUCH_PRESSED = 2,
     21   UMA_ET_TOUCH_MOVED = 3,
     22   UMA_ET_TOUCH_STATIONARY = 4,  // Deprecated. Do not remove.
     23   UMA_ET_TOUCH_CANCELLED = 5,
     24   UMA_ET_GESTURE_SCROLL_BEGIN = 6,
     25   UMA_ET_GESTURE_SCROLL_END = 7,
     26   UMA_ET_GESTURE_SCROLL_UPDATE = 8,
     27   UMA_ET_GESTURE_TAP = 9,
     28   UMA_ET_GESTURE_TAP_DOWN = 10,
     29   UMA_ET_GESTURE_BEGIN = 11,
     30   UMA_ET_GESTURE_END = 12,
     31   UMA_ET_GESTURE_DOUBLE_TAP = 13,
     32   UMA_ET_GESTURE_TRIPLE_TAP = 14,
     33   UMA_ET_GESTURE_TWO_FINGER_TAP = 15,
     34   UMA_ET_GESTURE_PINCH_BEGIN = 16,
     35   UMA_ET_GESTURE_PINCH_END = 17,
     36   UMA_ET_GESTURE_PINCH_UPDATE = 18,
     37   UMA_ET_GESTURE_LONG_PRESS = 19,
     38   UMA_ET_GESTURE_SWIPE_2 = 20,  // Swipe with 2 fingers
     39   UMA_ET_SCROLL = 21,
     40   UMA_ET_SCROLL_FLING_START = 22,
     41   UMA_ET_SCROLL_FLING_CANCEL = 23,
     42   UMA_ET_GESTURE_SWIPE_3 = 24,   // Swipe with 3 fingers
     43   UMA_ET_GESTURE_SWIPE_4P = 25,  // Swipe with 4+ fingers
     44   UMA_ET_GESTURE_SCROLL_UPDATE_2 = 26,
     45   UMA_ET_GESTURE_SCROLL_UPDATE_3 = 27,
     46   UMA_ET_GESTURE_SCROLL_UPDATE_4P = 28,
     47   UMA_ET_GESTURE_PINCH_UPDATE_3 = 29,
     48   UMA_ET_GESTURE_PINCH_UPDATE_4P = 30,
     49   UMA_ET_GESTURE_LONG_TAP = 31,
     50   UMA_ET_GESTURE_SHOW_PRESS = 32,
     51   UMA_ET_GESTURE_TAP_CANCEL = 33,
     52   UMA_ET_GESTURE_WIN8_EDGE_SWIPE = 34,
     53   UMA_ET_GESTURE_SWIPE_1 = 35,  // Swipe with 1 finger
     54   UMA_ET_GESTURE_TAP_UNCONFIRMED = 36,
     55   // NOTE: Add new event types only immediately above this line. Make sure to
     56   // update the UIEventType enum in tools/metrics/histograms/histograms.xml
     57   // accordingly.
     58   UMA_ET_COUNT
     59 };
     60 
     61 // Records some touch/gesture event specific details (e.g. what gestures are
     62 // targetted to which components etc.)
     63 class GESTURE_DETECTION_EXPORT GestureTouchUMAHistogram {
     64  public:
     65   GestureTouchUMAHistogram();
     66   ~GestureTouchUMAHistogram();
     67 
     68   static void RecordGestureEvent(const ui::GestureEventData& gesture);
     69   void RecordTouchEvent(const ui::MotionEvent& event);
     70 
     71  private:
     72   static UMAEventType UMAEventTypeFromEvent(const GestureEventData& gesture);
     73 
     74   // The first finger's press time.
     75   base::TimeTicks start_time_;
     76   // The first finger's press location.
     77   gfx::Point start_touch_position_;
     78   // The maximum distance the first touch point travelled from its starting
     79   // location in pixels.
     80   float max_distance_from_start_squared_;
     81   bool is_single_finger_;
     82 };
     83 
     84 }  // namespace ui
     85 
     86 #endif  // UI_EVENTS_GESTURE_DETECTION_GESTURE_TOUCH_UMA_HISTOGRAM_H_
     87