- add sources.
[platform/framework/web/crosswalk.git] / src / ash / touch / touch_uma.h
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 UpdateBurstData(const ui::TouchEvent& event);
69   GestureActionType FindGestureActionType(aura::Window* window,
70                                           const ui::GestureEvent& event);
71
72   // These are used to measure the number of touch-start events we receive in a
73   // quick succession, regardless of the target window.
74   bool touch_in_progress_;
75   int burst_length_;
76   base::TimeDelta last_touch_down_time_;
77
78   DISALLOW_COPY_AND_ASSIGN(TouchUMA);
79 };
80
81 }  // namespace ash
82
83 #endif  // ASH_TOUCH_TOUCH_OBSERVER_UMA_H_