Home | History | Annotate | Download | only in base
      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 "media/base/keyboard_event_counter.h"
      6 
      7 #include "base/atomicops.h"
      8 #include "base/logging.h"
      9 
     10 namespace media {
     11 
     12 KeyboardEventCounter::KeyboardEventCounter() : total_key_presses_(0) {}
     13 
     14 KeyboardEventCounter::~KeyboardEventCounter() {}
     15 
     16 void KeyboardEventCounter::Reset() {
     17   pressed_keys_.clear();
     18   base::subtle::NoBarrier_Store(
     19       reinterpret_cast<base::subtle::AtomicWord*>(&total_key_presses_), 0);
     20 }
     21 
     22 void KeyboardEventCounter::OnKeyboardEvent(ui::EventType event,
     23                                            ui::KeyboardCode key_code) {
     24   // Updates the pressed keys and the total count of key presses.
     25   if (event == ui::ET_KEY_PRESSED) {
     26     if (pressed_keys_.find(key_code) != pressed_keys_.end())
     27       return;
     28     pressed_keys_.insert(key_code);
     29     base::subtle::NoBarrier_AtomicIncrement(
     30         reinterpret_cast<base::subtle::AtomicWord*>(&total_key_presses_), 1);
     31   } else {
     32     DCHECK_EQ(ui::ET_KEY_RELEASED, event);
     33     pressed_keys_.erase(key_code);
     34   }
     35 }
     36 
     37 size_t KeyboardEventCounter::GetKeyPressCount() const {
     38   return base::subtle::NoBarrier_Load(
     39       reinterpret_cast<const base::subtle::AtomicWord*>(&total_key_presses_));
     40 }
     41 
     42 }  // namespace media
     43