xref: /aosp_15_r20/external/cronet/base/metrics/user_metrics.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_METRICS_USER_METRICS_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_METRICS_USER_METRICS_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <string>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/metrics/user_metrics_action.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/task/single_thread_task_runner.h"
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker namespace base {
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker class TimeTicks;
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker // This module provides some helper functions for logging actions tracked by
20*6777b538SAndroid Build Coastguard Worker // the user metrics system.
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker // For best practices on deciding when to emit a user action, see
23*6777b538SAndroid Build Coastguard Worker // https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/actions/README.md
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker // Record that the user performed an action.
26*6777b538SAndroid Build Coastguard Worker // This function must be called after the task runner has been set with
27*6777b538SAndroid Build Coastguard Worker // SetRecordActionTaskRunner().
28*6777b538SAndroid Build Coastguard Worker //
29*6777b538SAndroid Build Coastguard Worker // "Action" here means a user-generated event:
30*6777b538SAndroid Build Coastguard Worker //   good: "Reload", "CloseTab", and "IMEInvoked"
31*6777b538SAndroid Build Coastguard Worker //   not good: "SSLDialogShown", "PageLoaded", "DiskFull"
32*6777b538SAndroid Build Coastguard Worker // We use this to gather anonymized information about how users are
33*6777b538SAndroid Build Coastguard Worker // interacting with the browser.
34*6777b538SAndroid Build Coastguard Worker // WARNING: In calls to this function, UserMetricsAction should be followed by a
35*6777b538SAndroid Build Coastguard Worker // string literal parameter and not a variable e.g.
36*6777b538SAndroid Build Coastguard Worker //   RecordAction(UserMetricsAction("my action name"));
37*6777b538SAndroid Build Coastguard Worker // This ensures that our processing scripts can associate this action's hash
38*6777b538SAndroid Build Coastguard Worker // with its metric name. Therefore, it will be possible to retrieve the metric
39*6777b538SAndroid Build Coastguard Worker // name from the hash later on.
40*6777b538SAndroid Build Coastguard Worker //
41*6777b538SAndroid Build Coastguard Worker // Once a new recorded action is added, run
42*6777b538SAndroid Build Coastguard Worker //   tools/metrics/actions/extract_actions.py
43*6777b538SAndroid Build Coastguard Worker // to add the metric to actions.xml, then update the <owner>s and <description>
44*6777b538SAndroid Build Coastguard Worker // sections. Make sure to include the actions.xml file when you upload your code
45*6777b538SAndroid Build Coastguard Worker // for review!
46*6777b538SAndroid Build Coastguard Worker //
47*6777b538SAndroid Build Coastguard Worker // For more complicated situations (like when there are many different
48*6777b538SAndroid Build Coastguard Worker // possible actions), see RecordComputedAction().
49*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void RecordAction(const UserMetricsAction& action);
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker // This function has identical input and behavior to RecordAction(), but is
52*6777b538SAndroid Build Coastguard Worker // not automatically found by the action-processing scripts.  It can be used
53*6777b538SAndroid Build Coastguard Worker // when it's a pain to enumerate all possible actions, but if you use this
54*6777b538SAndroid Build Coastguard Worker // you need to also update the rules for extracting known actions in
55*6777b538SAndroid Build Coastguard Worker // tools/metrics/actions/extract_actions.py.
56*6777b538SAndroid Build Coastguard Worker // This function must be called after the task runner has been set with
57*6777b538SAndroid Build Coastguard Worker // SetRecordActionTaskRunner().
58*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void RecordComputedAction(const std::string& action);
59*6777b538SAndroid Build Coastguard Worker 
60*6777b538SAndroid Build Coastguard Worker // Similar to RecordComputedAction, but also takes the time at which the action
61*6777b538SAndroid Build Coastguard Worker // was observed.
62*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void RecordComputedActionAt(const std::string& action,
63*6777b538SAndroid Build Coastguard Worker                                         TimeTicks action_time);
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker // Similar to RecordComputedActionAt, but takes the amount of time elasped since
66*6777b538SAndroid Build Coastguard Worker // the action was observed.
67*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void RecordComputedActionSince(const std::string& action,
68*6777b538SAndroid Build Coastguard Worker                                            TimeDelta time_since);
69*6777b538SAndroid Build Coastguard Worker 
70*6777b538SAndroid Build Coastguard Worker // Called with the action string.
71*6777b538SAndroid Build Coastguard Worker using ActionCallback = RepeatingCallback<void(const std::string&, TimeTicks)>;
72*6777b538SAndroid Build Coastguard Worker 
73*6777b538SAndroid Build Coastguard Worker // Add/remove action callbacks (see above).
74*6777b538SAndroid Build Coastguard Worker // These functions must be called after the task runner has been set with
75*6777b538SAndroid Build Coastguard Worker // SetRecordActionTaskRunner().
76*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void AddActionCallback(const ActionCallback& callback);
77*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void RemoveActionCallback(const ActionCallback& callback);
78*6777b538SAndroid Build Coastguard Worker 
79*6777b538SAndroid Build Coastguard Worker // Set the task runner on which to record actions.
80*6777b538SAndroid Build Coastguard Worker BASE_EXPORT void SetRecordActionTaskRunner(
81*6777b538SAndroid Build Coastguard Worker     scoped_refptr<SingleThreadTaskRunner> task_runner);
82*6777b538SAndroid Build Coastguard Worker 
83*6777b538SAndroid Build Coastguard Worker // Returns the task runner used to record actions. Returns null when not set.
84*6777b538SAndroid Build Coastguard Worker // This function is thread safe.
85*6777b538SAndroid Build Coastguard Worker BASE_EXPORT scoped_refptr<SingleThreadTaskRunner> GetRecordActionTaskRunner();
86*6777b538SAndroid Build Coastguard Worker 
87*6777b538SAndroid Build Coastguard Worker }  // namespace base
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker #endif  // BASE_METRICS_USER_METRICS_H_
90