• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 ASH_TOUCH_TOUCH_OBSERVER_UMA_H_
6 #define ASH_TOUCH_TOUCH_OBSERVER_UMA_H_
7 
8 #include <map>
9 
10 #include "ash/shell.h"
11 #include "base/memory/singleton.h"
12 #include "ui/gfx/point.h"
13 #include "ui/views/widget/widget.h"
14 
15 namespace aura {
16 class Window;
17 }
18 
19 namespace ash {
20 
21 // Records some touch/gesture event specific details (e.g. what gestures are
22 // targetted to which components etc.)
23 class ASH_EXPORT TouchUMA {
24  public:
25   enum GestureActionType {
26     GESTURE_UNKNOWN,
27     GESTURE_OMNIBOX_PINCH,
28     GESTURE_OMNIBOX_SCROLL,
29     GESTURE_TABSTRIP_PINCH,
30     GESTURE_TABSTRIP_SCROLL,
31     GESTURE_BEZEL_SCROLL,
32     GESTURE_DESKTOP_SCROLL,
33     GESTURE_DESKTOP_PINCH,
34     GESTURE_WEBPAGE_PINCH,
35     GESTURE_WEBPAGE_SCROLL,
36     GESTURE_WEBPAGE_TAP,
37     GESTURE_TABSTRIP_TAP,
38     GESTURE_BEZEL_DOWN,
39     GESTURE_TABSWITCH_TAP,
40     GESTURE_TABNOSWITCH_TAP,
41     GESTURE_TABCLOSE_TAP,
42     GESTURE_NEWTAB_TAP,
43     GESTURE_ROOTVIEWTOP_TAP,
44     GESTURE_FRAMEMAXIMIZE_TAP,
45     GESTURE_FRAMEVIEW_TAP,
46     GESTURE_MAXIMIZE_DOUBLETAP,
47     // NOTE: Add new action types only immediately above this line. Also,
48     // make sure the enum list in tools/histogram/histograms.xml is
49     // updated with any change in here.
50     GESTURE_ACTION_COUNT
51   };
52 
53   // Returns the singleton instance.
54   static TouchUMA* GetInstance();
55 
56   void RecordGestureEvent(aura::Window* target,
57                           const ui::GestureEvent& event);
58   void RecordGestureAction(GestureActionType action);
59   void RecordTouchEvent(aura::Window* target,
60                         const ui::TouchEvent& event);
61 
62  private:
63   friend struct DefaultSingletonTraits<TouchUMA>;
64 
65   TouchUMA();
66   ~TouchUMA();
67 
68   void UpdateTouchState(const ui::TouchEvent& event);
69   GestureActionType FindGestureActionType(aura::Window* window,
70                                           const ui::GestureEvent& event);
71 
72   bool is_single_finger_gesture_;
73   // These are used to measure the number of touch-start events we receive in a
74   // quick succession, regardless of the target window.
75   bool touch_in_progress_;
76   int burst_length_;
77   base::TimeDelta last_touch_down_time_;
78 
79   DISALLOW_COPY_AND_ASSIGN(TouchUMA);
80 };
81 
82 }  // namespace ash
83 
84 #endif  // ASH_TOUCH_TOUCH_OBSERVER_UMA_H_
85