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