1// Copyright 2013 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 CHROME_BROWSER_CHROMEOS_DEVICE_UMA_H_
6#define CHROME_BROWSER_CHROMEOS_DEVICE_UMA_H_
7
8#include "base/basictypes.h"
9#include "ui/events/platform/platform_event_observer.h"
10
11template <typename T> struct DefaultSingletonTraits;
12
13namespace chromeos {
14
15// A class to record devices' input event details via the UMA system
16class DeviceUMA : public ui::PlatformEventObserver {
17 public:
18  // Getting instance starts the class automatically if it hasn't been
19  // started before.
20  static DeviceUMA* GetInstance();
21
22  void Stop();
23
24 private:
25  friend struct DefaultSingletonTraits<DeviceUMA>;
26
27  DeviceUMA();
28  virtual ~DeviceUMA();
29
30  // ui::PlatformEventObserver:
31  virtual void WillProcessEvent(const ui::PlatformEvent& event) OVERRIDE;
32  virtual void DidProcessEvent(const ui::PlatformEvent& event) OVERRIDE;
33
34  // Check CrOS touchpad events to see if the metrics gesture is present
35  void CheckTouchpadEvent(XEvent* event);
36
37  // Check the incoming events for interesting patterns that we care about.
38  void CheckIncomingEvent(XEvent* event);
39
40  bool stopped_;
41
42  DISALLOW_COPY_AND_ASSIGN(DeviceUMA);
43};
44
45}  // namespace chromeos
46
47#endif  // CHROME_BROWSER_CHROMEOS_DEVICE_UMA_H_
48