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 50