xref: /aosp_15_r20/external/cronet/base/test/metrics/user_action_tester.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 <string_view>
8 
9 #include "base/functional/bind.h"
10 #include "base/functional/callback_helpers.h"
11 #include "base/test/test_simple_task_runner.h"
12 
13 namespace base {
14 
UserActionTester()15 UserActionTester::UserActionTester()
16     : task_runner_(new base::TestSimpleTaskRunner),
17       action_callback_(base::BindRepeating(&UserActionTester::OnUserAction,
18                                            base::Unretained(this))) {
19   base::SetRecordActionTaskRunner(task_runner_);
20   base::AddActionCallback(action_callback_);
21 }
22 
~UserActionTester()23 UserActionTester::~UserActionTester() {
24   base::RemoveActionCallback(action_callback_);
25 }
26 
GetActionCount(std::string_view user_action) const27 int UserActionTester::GetActionCount(std::string_view user_action) const {
28   return times_map_.count(user_action);
29 }
30 
GetActionTimes(std::string_view user_action) const31 std::vector<TimeTicks> UserActionTester::GetActionTimes(
32     std::string_view user_action) const {
33   std::vector<TimeTicks> result;
34   auto range = times_map_.equal_range(user_action);
35   for (auto it = range.first; it != range.second; it++) {
36     result.push_back(it->second);
37   }
38   return result;
39 }
40 
ResetCounts()41 void UserActionTester::ResetCounts() {
42   times_map_.clear();
43 }
44 
OnUserAction(const std::string & user_action,TimeTicks action_time)45 void UserActionTester::OnUserAction(const std::string& user_action,
46                                     TimeTicks action_time) {
47   times_map_.insert({user_action, action_time});
48 }
49 
50 }  // namespace base
51