Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ash / keyboard_uma_event_filter.cc
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 #include "ash/keyboard_uma_event_filter.h"
6
7 #include "base/metrics/histogram.h"
8 #include "ui/events/event.h"
9
10 namespace {
11
12 // This threshold is used to drop keystrokes that are more than some time apart.
13 // These keystrokes are dropped to avoid recording outliers, as well as pauses
14 // between actual segments of typing.
15 const int kKeystrokeThresholdInSeconds = 5;
16
17 }
18
19 namespace ash {
20
21 KeyboardUMAEventFilter::KeyboardUMAEventFilter() {}
22
23 KeyboardUMAEventFilter::~KeyboardUMAEventFilter() {}
24
25 void KeyboardUMAEventFilter::OnKeyEvent(ui::KeyEvent* event) {
26   // This is a rough approximation, so assume that each key release is the
27   // result of a typed key.
28   if (event->type() != ui::ET_KEY_RELEASED)
29     return;
30
31   // Reset the timer on non-character keystrokes.
32   if (!isprint(event->GetCharacter())) {
33     last_keystroke_time_ = base::TimeDelta();
34     return;
35   }
36
37   if (last_keystroke_time_.ToInternalValue() == 0) {
38     last_keystroke_time_ = event->time_stamp();
39     return;
40   }
41
42   base::TimeDelta delta = event->time_stamp() - last_keystroke_time_;
43   if (delta < base::TimeDelta::FromSeconds(kKeystrokeThresholdInSeconds))
44     UMA_HISTOGRAM_TIMES("Keyboard.KeystrokeDeltas", delta);
45
46   last_keystroke_time_ = event->time_stamp();
47 }
48
49 }  // namespace ash