1 // Copyright 2015 The Chromium Authors 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 "base/test/metrics/user_action_tester.h" 6 7 #include "base/functional/bind.h" 8 #include "base/functional/callback_helpers.h" 9 #include "base/test/test_simple_task_runner.h" 10 11 namespace base { 12 UserActionTester()13UserActionTester::UserActionTester() 14 : task_runner_(new base::TestSimpleTaskRunner), 15 action_callback_(base::BindRepeating(&UserActionTester::OnUserAction, 16 base::Unretained(this))) { 17 base::SetRecordActionTaskRunner(task_runner_); 18 base::AddActionCallback(action_callback_); 19 } 20 ~UserActionTester()21UserActionTester::~UserActionTester() { 22 base::RemoveActionCallback(action_callback_); 23 } 24 GetActionCount(base::StringPiece user_action) const25int UserActionTester::GetActionCount(base::StringPiece user_action) const { 26 return times_map_.count(user_action); 27 } 28 GetActionTimes(base::StringPiece user_action) const29std::vector<TimeTicks> UserActionTester::GetActionTimes( 30 base::StringPiece user_action) const { 31 std::vector<TimeTicks> result; 32 auto range = times_map_.equal_range(user_action); 33 for (auto it = range.first; it != range.second; it++) { 34 result.push_back(it->second); 35 } 36 return result; 37 } 38 ResetCounts()39void UserActionTester::ResetCounts() { 40 times_map_.clear(); 41 } 42 OnUserAction(const std::string & user_action,TimeTicks action_time)43void UserActionTester::OnUserAction(const std::string& user_action, 44 TimeTicks action_time) { 45 times_map_.insert({user_action, action_time}); 46 } 47 48 } // namespace base 49