1*6777b538SAndroid Build Coastguard Worker // Copyright 2015 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_TRACE_EVENT_TRACE_CONFIG_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TRACE_EVENT_TRACE_CONFIG_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <stdint.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include <memory> 11*6777b538SAndroid Build Coastguard Worker #include <set> 12*6777b538SAndroid Build Coastguard Worker #include <string> 13*6777b538SAndroid Build Coastguard Worker #include <string_view> 14*6777b538SAndroid Build Coastguard Worker #include <unordered_set> 15*6777b538SAndroid Build Coastguard Worker #include <vector> 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 18*6777b538SAndroid Build Coastguard Worker #include "base/gtest_prod_util.h" 19*6777b538SAndroid Build Coastguard Worker #include "base/trace_event/memory_dump_request_args.h" 20*6777b538SAndroid Build Coastguard Worker #include "base/trace_event/trace_config_category_filter.h" 21*6777b538SAndroid Build Coastguard Worker #include "base/values.h" 22*6777b538SAndroid Build Coastguard Worker 23*6777b538SAndroid Build Coastguard Worker namespace base::trace_event { 24*6777b538SAndroid Build Coastguard Worker 25*6777b538SAndroid Build Coastguard Worker class ConvertableToTraceFormat; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker // Options determines how the trace buffer stores data. 28*6777b538SAndroid Build Coastguard Worker // A Java counterpart will be generated for this enum. 29*6777b538SAndroid Build Coastguard Worker // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.base 30*6777b538SAndroid Build Coastguard Worker enum TraceRecordMode { 31*6777b538SAndroid Build Coastguard Worker // Record until the trace buffer is full. 32*6777b538SAndroid Build Coastguard Worker RECORD_UNTIL_FULL, 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker // Record until the user ends the trace. The trace buffer is a fixed size 35*6777b538SAndroid Build Coastguard Worker // and we use it as a ring buffer during recording. 36*6777b538SAndroid Build Coastguard Worker RECORD_CONTINUOUSLY, 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // Record until the trace buffer is full, but with a huge buffer size. 39*6777b538SAndroid Build Coastguard Worker RECORD_AS_MUCH_AS_POSSIBLE, 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker // Echo to console. Events are discarded. 42*6777b538SAndroid Build Coastguard Worker ECHO_TO_CONSOLE, 43*6777b538SAndroid Build Coastguard Worker }; 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT TraceConfig { 46*6777b538SAndroid Build Coastguard Worker public: 47*6777b538SAndroid Build Coastguard Worker using StringList = std::vector<std::string>; 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker // Specifies the memory dump config for tracing. 50*6777b538SAndroid Build Coastguard Worker // Used only when "memory-infra" category is enabled. 51*6777b538SAndroid Build Coastguard Worker struct BASE_EXPORT MemoryDumpConfig { 52*6777b538SAndroid Build Coastguard Worker MemoryDumpConfig(); 53*6777b538SAndroid Build Coastguard Worker MemoryDumpConfig(const MemoryDumpConfig& other); 54*6777b538SAndroid Build Coastguard Worker ~MemoryDumpConfig(); 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker // Specifies the triggers in the memory dump config. 57*6777b538SAndroid Build Coastguard Worker struct Trigger { 58*6777b538SAndroid Build Coastguard Worker friend bool operator==(const Trigger&, const Trigger&) = default; 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker uint32_t min_time_between_dumps_ms; 61*6777b538SAndroid Build Coastguard Worker MemoryDumpLevelOfDetail level_of_detail; 62*6777b538SAndroid Build Coastguard Worker MemoryDumpType trigger_type; 63*6777b538SAndroid Build Coastguard Worker }; 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker // Specifies the configuration options for the heap profiler. 66*6777b538SAndroid Build Coastguard Worker struct HeapProfiler { 67*6777b538SAndroid Build Coastguard Worker // Default value for |breakdown_threshold_bytes|. 68*6777b538SAndroid Build Coastguard Worker enum { kDefaultBreakdownThresholdBytes = 1024 }; 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker HeapProfiler(); 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker // Reset the options to default. 73*6777b538SAndroid Build Coastguard Worker void Clear(); 74*6777b538SAndroid Build Coastguard Worker 75*6777b538SAndroid Build Coastguard Worker friend bool operator==(const HeapProfiler&, 76*6777b538SAndroid Build Coastguard Worker const HeapProfiler&) = default; 77*6777b538SAndroid Build Coastguard Worker 78*6777b538SAndroid Build Coastguard Worker uint32_t breakdown_threshold_bytes; 79*6777b538SAndroid Build Coastguard Worker }; 80*6777b538SAndroid Build Coastguard Worker 81*6777b538SAndroid Build Coastguard Worker friend bool operator==(const MemoryDumpConfig&, 82*6777b538SAndroid Build Coastguard Worker const MemoryDumpConfig&) = default; 83*6777b538SAndroid Build Coastguard Worker 84*6777b538SAndroid Build Coastguard Worker // Reset the values in the config. 85*6777b538SAndroid Build Coastguard Worker void Clear(); 86*6777b538SAndroid Build Coastguard Worker 87*6777b538SAndroid Build Coastguard Worker void Merge(const MemoryDumpConfig& config); 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker // Set of memory dump modes allowed for the tracing session. The explicitly 90*6777b538SAndroid Build Coastguard Worker // triggered dumps will be successful only if the dump mode is allowed in 91*6777b538SAndroid Build Coastguard Worker // the config. 92*6777b538SAndroid Build Coastguard Worker std::set<MemoryDumpLevelOfDetail> allowed_dump_modes; 93*6777b538SAndroid Build Coastguard Worker 94*6777b538SAndroid Build Coastguard Worker std::vector<Trigger> triggers; 95*6777b538SAndroid Build Coastguard Worker HeapProfiler heap_profiler_options; 96*6777b538SAndroid Build Coastguard Worker }; 97*6777b538SAndroid Build Coastguard Worker 98*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT ProcessFilterConfig { 99*6777b538SAndroid Build Coastguard Worker public: 100*6777b538SAndroid Build Coastguard Worker ProcessFilterConfig(); 101*6777b538SAndroid Build Coastguard Worker explicit ProcessFilterConfig( 102*6777b538SAndroid Build Coastguard Worker const std::unordered_set<base::ProcessId>& included_process_ids); 103*6777b538SAndroid Build Coastguard Worker ProcessFilterConfig(const ProcessFilterConfig&); 104*6777b538SAndroid Build Coastguard Worker ~ProcessFilterConfig(); 105*6777b538SAndroid Build Coastguard Worker empty()106*6777b538SAndroid Build Coastguard Worker bool empty() const { return included_process_ids_.empty(); } 107*6777b538SAndroid Build Coastguard Worker 108*6777b538SAndroid Build Coastguard Worker void Clear(); 109*6777b538SAndroid Build Coastguard Worker void Merge(const ProcessFilterConfig&); 110*6777b538SAndroid Build Coastguard Worker 111*6777b538SAndroid Build Coastguard Worker void InitializeFromConfigDict(const Value::Dict&); 112*6777b538SAndroid Build Coastguard Worker void ToDict(Value::Dict& dict) const; 113*6777b538SAndroid Build Coastguard Worker 114*6777b538SAndroid Build Coastguard Worker bool IsEnabled(base::ProcessId) const; included_process_ids()115*6777b538SAndroid Build Coastguard Worker const std::unordered_set<base::ProcessId>& included_process_ids() const { 116*6777b538SAndroid Build Coastguard Worker return included_process_ids_; 117*6777b538SAndroid Build Coastguard Worker } 118*6777b538SAndroid Build Coastguard Worker 119*6777b538SAndroid Build Coastguard Worker friend bool operator==(const ProcessFilterConfig&, 120*6777b538SAndroid Build Coastguard Worker const ProcessFilterConfig&) = default; 121*6777b538SAndroid Build Coastguard Worker 122*6777b538SAndroid Build Coastguard Worker private: 123*6777b538SAndroid Build Coastguard Worker std::unordered_set<base::ProcessId> included_process_ids_; 124*6777b538SAndroid Build Coastguard Worker }; 125*6777b538SAndroid Build Coastguard Worker 126*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT EventFilterConfig { 127*6777b538SAndroid Build Coastguard Worker public: 128*6777b538SAndroid Build Coastguard Worker explicit EventFilterConfig(const std::string& predicate_name); 129*6777b538SAndroid Build Coastguard Worker EventFilterConfig(const EventFilterConfig& tc); 130*6777b538SAndroid Build Coastguard Worker 131*6777b538SAndroid Build Coastguard Worker ~EventFilterConfig(); 132*6777b538SAndroid Build Coastguard Worker 133*6777b538SAndroid Build Coastguard Worker EventFilterConfig& operator=(const EventFilterConfig& rhs); 134*6777b538SAndroid Build Coastguard Worker 135*6777b538SAndroid Build Coastguard Worker bool IsEquivalentTo(const EventFilterConfig& other) const; 136*6777b538SAndroid Build Coastguard Worker 137*6777b538SAndroid Build Coastguard Worker void InitializeFromConfigDict(const Value::Dict& event_filter); 138*6777b538SAndroid Build Coastguard Worker 139*6777b538SAndroid Build Coastguard Worker void SetCategoryFilter(const TraceConfigCategoryFilter& category_filter); 140*6777b538SAndroid Build Coastguard Worker 141*6777b538SAndroid Build Coastguard Worker void ToDict(Value::Dict& filter_dict) const; 142*6777b538SAndroid Build Coastguard Worker 143*6777b538SAndroid Build Coastguard Worker bool GetArgAsSet(const char* key, std::unordered_set<std::string>*) const; 144*6777b538SAndroid Build Coastguard Worker 145*6777b538SAndroid Build Coastguard Worker bool IsCategoryGroupEnabled(std::string_view category_group_name) const; 146*6777b538SAndroid Build Coastguard Worker predicate_name()147*6777b538SAndroid Build Coastguard Worker const std::string& predicate_name() const { return predicate_name_; } filter_args()148*6777b538SAndroid Build Coastguard Worker const Value::Dict& filter_args() const { return args_; } category_filter()149*6777b538SAndroid Build Coastguard Worker const TraceConfigCategoryFilter& category_filter() const { 150*6777b538SAndroid Build Coastguard Worker return category_filter_; 151*6777b538SAndroid Build Coastguard Worker } 152*6777b538SAndroid Build Coastguard Worker 153*6777b538SAndroid Build Coastguard Worker private: 154*6777b538SAndroid Build Coastguard Worker std::string predicate_name_; 155*6777b538SAndroid Build Coastguard Worker TraceConfigCategoryFilter category_filter_; 156*6777b538SAndroid Build Coastguard Worker Value::Dict args_; 157*6777b538SAndroid Build Coastguard Worker }; 158*6777b538SAndroid Build Coastguard Worker typedef std::vector<EventFilterConfig> EventFilters; 159*6777b538SAndroid Build Coastguard Worker 160*6777b538SAndroid Build Coastguard Worker static std::string TraceRecordModeToStr(TraceRecordMode record_mode); 161*6777b538SAndroid Build Coastguard Worker 162*6777b538SAndroid Build Coastguard Worker TraceConfig(); 163*6777b538SAndroid Build Coastguard Worker 164*6777b538SAndroid Build Coastguard Worker // Create TraceConfig object from category filter and trace options strings. 165*6777b538SAndroid Build Coastguard Worker // 166*6777b538SAndroid Build Coastguard Worker // |category_filter_string| is a comma-delimited list of category wildcards. 167*6777b538SAndroid Build Coastguard Worker // A category can have an optional '-' prefix to make it an excluded category. 168*6777b538SAndroid Build Coastguard Worker // All the same rules apply above, so for example, having both included and 169*6777b538SAndroid Build Coastguard Worker // excluded categories in the same list would not be supported. 170*6777b538SAndroid Build Coastguard Worker // 171*6777b538SAndroid Build Coastguard Worker // |trace_options_string| is a comma-delimited list of trace options. 172*6777b538SAndroid Build Coastguard Worker // Possible options are: "record-until-full", "record-continuously", 173*6777b538SAndroid Build Coastguard Worker // "record-as-much-as-possible", "trace-to-console", "enable-systrace" and 174*6777b538SAndroid Build Coastguard Worker // "enable-argument-filter". 175*6777b538SAndroid Build Coastguard Worker // The first 4 options are trace recoding modes and hence 176*6777b538SAndroid Build Coastguard Worker // mutually exclusive. If more than one trace recording modes appear in the 177*6777b538SAndroid Build Coastguard Worker // options_string, the last one takes precedence. If none of the trace 178*6777b538SAndroid Build Coastguard Worker // recording mode is specified, recording mode is RECORD_UNTIL_FULL. 179*6777b538SAndroid Build Coastguard Worker // 180*6777b538SAndroid Build Coastguard Worker // The trace option will first be reset to the default option 181*6777b538SAndroid Build Coastguard Worker // (record_mode set to RECORD_UNTIL_FULL, enable_systrace and 182*6777b538SAndroid Build Coastguard Worker // enable_argument_filter set to false) before options parsed from 183*6777b538SAndroid Build Coastguard Worker // |trace_options_string| are applied on it. If |trace_options_string| is 184*6777b538SAndroid Build Coastguard Worker // invalid, the final state of trace options is undefined. 185*6777b538SAndroid Build Coastguard Worker // 186*6777b538SAndroid Build Coastguard Worker // Example: TraceConfig("test_MyTest*", "record-until-full"); 187*6777b538SAndroid Build Coastguard Worker // Example: TraceConfig("test_MyTest*,test_OtherStuff", 188*6777b538SAndroid Build Coastguard Worker // "record-continuously"); 189*6777b538SAndroid Build Coastguard Worker // Example: TraceConfig("-excluded_category1,-excluded_category2", 190*6777b538SAndroid Build Coastguard Worker // "record-until-full, trace-to-console"); 191*6777b538SAndroid Build Coastguard Worker // would set ECHO_TO_CONSOLE as the recording mode. 192*6777b538SAndroid Build Coastguard Worker // Example: TraceConfig("-*,webkit", ""); 193*6777b538SAndroid Build Coastguard Worker // would disable everything but webkit; and use default options. 194*6777b538SAndroid Build Coastguard Worker // Example: TraceConfig("-webkit", ""); 195*6777b538SAndroid Build Coastguard Worker // would enable everything but webkit; and use default options. 196*6777b538SAndroid Build Coastguard Worker TraceConfig(std::string_view category_filter_string, 197*6777b538SAndroid Build Coastguard Worker std::string_view trace_options_string); 198*6777b538SAndroid Build Coastguard Worker 199*6777b538SAndroid Build Coastguard Worker TraceConfig(std::string_view category_filter_string, 200*6777b538SAndroid Build Coastguard Worker TraceRecordMode record_mode); 201*6777b538SAndroid Build Coastguard Worker 202*6777b538SAndroid Build Coastguard Worker // Create TraceConfig object from the trace config string. 203*6777b538SAndroid Build Coastguard Worker // 204*6777b538SAndroid Build Coastguard Worker // |config_string| is a dictionary formatted as a JSON string, containing both 205*6777b538SAndroid Build Coastguard Worker // category filters and trace options. 206*6777b538SAndroid Build Coastguard Worker // 207*6777b538SAndroid Build Coastguard Worker // Example: 208*6777b538SAndroid Build Coastguard Worker // { 209*6777b538SAndroid Build Coastguard Worker // "record_mode": "record-continuously", 210*6777b538SAndroid Build Coastguard Worker // "enable_systrace": true, 211*6777b538SAndroid Build Coastguard Worker // "enable_argument_filter": true, 212*6777b538SAndroid Build Coastguard Worker // "included_categories": ["included", 213*6777b538SAndroid Build Coastguard Worker // "inc_pattern*", 214*6777b538SAndroid Build Coastguard Worker // "disabled-by-default-memory-infra"], 215*6777b538SAndroid Build Coastguard Worker // "excluded_categories": ["excluded", "exc_pattern*"], 216*6777b538SAndroid Build Coastguard Worker // "memory_dump_config": { 217*6777b538SAndroid Build Coastguard Worker // "triggers": [ 218*6777b538SAndroid Build Coastguard Worker // { 219*6777b538SAndroid Build Coastguard Worker // "mode": "detailed", 220*6777b538SAndroid Build Coastguard Worker // "periodic_interval_ms": 2000 221*6777b538SAndroid Build Coastguard Worker // } 222*6777b538SAndroid Build Coastguard Worker // ] 223*6777b538SAndroid Build Coastguard Worker // } 224*6777b538SAndroid Build Coastguard Worker // } 225*6777b538SAndroid Build Coastguard Worker // 226*6777b538SAndroid Build Coastguard Worker // Note: memory_dump_config can be specified only if 227*6777b538SAndroid Build Coastguard Worker // disabled-by-default-memory-infra category is enabled. 228*6777b538SAndroid Build Coastguard Worker explicit TraceConfig(std::string_view config_string); 229*6777b538SAndroid Build Coastguard Worker 230*6777b538SAndroid Build Coastguard Worker // Functionally identical to the above, but takes a parsed dictionary as input 231*6777b538SAndroid Build Coastguard Worker // instead of its JSON serialization. 232*6777b538SAndroid Build Coastguard Worker explicit TraceConfig(const Value::Dict& config); 233*6777b538SAndroid Build Coastguard Worker 234*6777b538SAndroid Build Coastguard Worker TraceConfig(const TraceConfig& tc); 235*6777b538SAndroid Build Coastguard Worker 236*6777b538SAndroid Build Coastguard Worker ~TraceConfig(); 237*6777b538SAndroid Build Coastguard Worker 238*6777b538SAndroid Build Coastguard Worker TraceConfig& operator=(const TraceConfig& rhs); 239*6777b538SAndroid Build Coastguard Worker 240*6777b538SAndroid Build Coastguard Worker bool IsEquivalentTo(const TraceConfig& other) const; 241*6777b538SAndroid Build Coastguard Worker GetTraceRecordMode()242*6777b538SAndroid Build Coastguard Worker TraceRecordMode GetTraceRecordMode() const { return record_mode_; } GetTraceBufferSizeInEvents()243*6777b538SAndroid Build Coastguard Worker size_t GetTraceBufferSizeInEvents() const { 244*6777b538SAndroid Build Coastguard Worker return trace_buffer_size_in_events_; 245*6777b538SAndroid Build Coastguard Worker } GetTraceBufferSizeInKb()246*6777b538SAndroid Build Coastguard Worker size_t GetTraceBufferSizeInKb() const { return trace_buffer_size_in_kb_; } IsSystraceEnabled()247*6777b538SAndroid Build Coastguard Worker bool IsSystraceEnabled() const { return enable_systrace_; } IsArgumentFilterEnabled()248*6777b538SAndroid Build Coastguard Worker bool IsArgumentFilterEnabled() const { return enable_argument_filter_; } 249*6777b538SAndroid Build Coastguard Worker SetTraceRecordMode(TraceRecordMode mode)250*6777b538SAndroid Build Coastguard Worker void SetTraceRecordMode(TraceRecordMode mode) { record_mode_ = mode; } SetTraceBufferSizeInEvents(size_t size)251*6777b538SAndroid Build Coastguard Worker void SetTraceBufferSizeInEvents(size_t size) { 252*6777b538SAndroid Build Coastguard Worker trace_buffer_size_in_events_ = size; 253*6777b538SAndroid Build Coastguard Worker } SetTraceBufferSizeInKb(size_t size)254*6777b538SAndroid Build Coastguard Worker void SetTraceBufferSizeInKb(size_t size) { trace_buffer_size_in_kb_ = size; } EnableSystrace()255*6777b538SAndroid Build Coastguard Worker void EnableSystrace() { enable_systrace_ = true; } 256*6777b538SAndroid Build Coastguard Worker void EnableSystraceEvent(const std::string& systrace_event); EnableArgumentFilter()257*6777b538SAndroid Build Coastguard Worker void EnableArgumentFilter() { enable_argument_filter_ = true; } 258*6777b538SAndroid Build Coastguard Worker void EnableHistogram(const std::string& histogram_name); 259*6777b538SAndroid Build Coastguard Worker 260*6777b538SAndroid Build Coastguard Worker // Writes the string representation of the TraceConfig. The string is JSON 261*6777b538SAndroid Build Coastguard Worker // formatted. 262*6777b538SAndroid Build Coastguard Worker std::string ToString() const; 263*6777b538SAndroid Build Coastguard Worker 264*6777b538SAndroid Build Coastguard Worker // Returns a copy of the TraceConfig wrapped in a ConvertableToTraceFormat 265*6777b538SAndroid Build Coastguard Worker std::unique_ptr<ConvertableToTraceFormat> AsConvertableToTraceFormat() const; 266*6777b538SAndroid Build Coastguard Worker 267*6777b538SAndroid Build Coastguard Worker // Write the string representation of the CategoryFilter part. 268*6777b538SAndroid Build Coastguard Worker std::string ToCategoryFilterString() const; 269*6777b538SAndroid Build Coastguard Worker 270*6777b538SAndroid Build Coastguard Worker // Write the string representation of the trace options part (record mode, 271*6777b538SAndroid Build Coastguard Worker // systrace, argument filtering). Does not include category filters, event 272*6777b538SAndroid Build Coastguard Worker // filters, or memory dump configs. 273*6777b538SAndroid Build Coastguard Worker std::string ToTraceOptionsString() const; 274*6777b538SAndroid Build Coastguard Worker 275*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) 276*6777b538SAndroid Build Coastguard Worker // Write the serialized perfetto::TrackEventConfig corresponding to this 277*6777b538SAndroid Build Coastguard Worker // TraceConfig. 278*6777b538SAndroid Build Coastguard Worker std::string ToPerfettoTrackEventConfigRaw( 279*6777b538SAndroid Build Coastguard Worker bool privacy_filtering_enabled) const; 280*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY) 281*6777b538SAndroid Build Coastguard Worker 282*6777b538SAndroid Build Coastguard Worker // Returns true if at least one category in the list is enabled by this 283*6777b538SAndroid Build Coastguard Worker // trace config. This is used to determine if the category filters are 284*6777b538SAndroid Build Coastguard Worker // enabled in the TRACE_* macros. 285*6777b538SAndroid Build Coastguard Worker bool IsCategoryGroupEnabled(std::string_view category_group_name) const; 286*6777b538SAndroid Build Coastguard Worker 287*6777b538SAndroid Build Coastguard Worker // Merges config with the current TraceConfig 288*6777b538SAndroid Build Coastguard Worker void Merge(const TraceConfig& config); 289*6777b538SAndroid Build Coastguard Worker 290*6777b538SAndroid Build Coastguard Worker void Clear(); 291*6777b538SAndroid Build Coastguard Worker 292*6777b538SAndroid Build Coastguard Worker // Clears and resets the memory dump config. 293*6777b538SAndroid Build Coastguard Worker void ResetMemoryDumpConfig(const MemoryDumpConfig& memory_dump_config); 294*6777b538SAndroid Build Coastguard Worker category_filter()295*6777b538SAndroid Build Coastguard Worker const TraceConfigCategoryFilter& category_filter() const { 296*6777b538SAndroid Build Coastguard Worker return category_filter_; 297*6777b538SAndroid Build Coastguard Worker } 298*6777b538SAndroid Build Coastguard Worker memory_dump_config()299*6777b538SAndroid Build Coastguard Worker const MemoryDumpConfig& memory_dump_config() const { 300*6777b538SAndroid Build Coastguard Worker return memory_dump_config_; 301*6777b538SAndroid Build Coastguard Worker } 302*6777b538SAndroid Build Coastguard Worker process_filter_config()303*6777b538SAndroid Build Coastguard Worker const ProcessFilterConfig& process_filter_config() const { 304*6777b538SAndroid Build Coastguard Worker return process_filter_config_; 305*6777b538SAndroid Build Coastguard Worker } 306*6777b538SAndroid Build Coastguard Worker void SetProcessFilterConfig(const ProcessFilterConfig&); 307*6777b538SAndroid Build Coastguard Worker event_filters()308*6777b538SAndroid Build Coastguard Worker const EventFilters& event_filters() const { return event_filters_; } SetEventFilters(const EventFilters & filter_configs)309*6777b538SAndroid Build Coastguard Worker void SetEventFilters(const EventFilters& filter_configs) { 310*6777b538SAndroid Build Coastguard Worker event_filters_ = filter_configs; 311*6777b538SAndroid Build Coastguard Worker } 312*6777b538SAndroid Build Coastguard Worker 313*6777b538SAndroid Build Coastguard Worker // Returns true if event names should not contain package names. IsEventPackageNameFilterEnabled()314*6777b538SAndroid Build Coastguard Worker bool IsEventPackageNameFilterEnabled() const { 315*6777b538SAndroid Build Coastguard Worker return enable_event_package_name_filter_; 316*6777b538SAndroid Build Coastguard Worker } 317*6777b538SAndroid Build Coastguard Worker 318*6777b538SAndroid Build Coastguard Worker // If `enabled` is true, event names will not contain package names. SetEventPackageNameFilterEnabled(bool enabled)319*6777b538SAndroid Build Coastguard Worker void SetEventPackageNameFilterEnabled(bool enabled) { 320*6777b538SAndroid Build Coastguard Worker enable_event_package_name_filter_ = enabled; 321*6777b538SAndroid Build Coastguard Worker } 322*6777b538SAndroid Build Coastguard Worker systrace_events()323*6777b538SAndroid Build Coastguard Worker const std::unordered_set<std::string>& systrace_events() const { 324*6777b538SAndroid Build Coastguard Worker return systrace_events_; 325*6777b538SAndroid Build Coastguard Worker } 326*6777b538SAndroid Build Coastguard Worker histogram_names()327*6777b538SAndroid Build Coastguard Worker const std::unordered_set<std::string>& histogram_names() const { 328*6777b538SAndroid Build Coastguard Worker return histogram_names_; 329*6777b538SAndroid Build Coastguard Worker } 330*6777b538SAndroid Build Coastguard Worker 331*6777b538SAndroid Build Coastguard Worker private: 332*6777b538SAndroid Build Coastguard Worker FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromValidLegacyFormat); 333*6777b538SAndroid Build Coastguard Worker FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, 334*6777b538SAndroid Build Coastguard Worker TraceConfigFromInvalidLegacyStrings); 335*6777b538SAndroid Build Coastguard Worker FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, SystraceEventsSerialization); 336*6777b538SAndroid Build Coastguard Worker 337*6777b538SAndroid Build Coastguard Worker // The default trace config, used when none is provided. 338*6777b538SAndroid Build Coastguard Worker // Allows all non-disabled-by-default categories through, except if they end 339*6777b538SAndroid Build Coastguard Worker // in the suffix 'Debug' or 'Test'. 340*6777b538SAndroid Build Coastguard Worker void InitializeDefault(); 341*6777b538SAndroid Build Coastguard Worker 342*6777b538SAndroid Build Coastguard Worker // Initialize from a config dictionary. 343*6777b538SAndroid Build Coastguard Worker void InitializeFromConfigDict(const Value::Dict& dict); 344*6777b538SAndroid Build Coastguard Worker 345*6777b538SAndroid Build Coastguard Worker // Initialize from a config string. 346*6777b538SAndroid Build Coastguard Worker void InitializeFromConfigString(std::string_view config_string); 347*6777b538SAndroid Build Coastguard Worker 348*6777b538SAndroid Build Coastguard Worker // Initialize from category filter and trace options strings 349*6777b538SAndroid Build Coastguard Worker void InitializeFromStrings(std::string_view category_filter_string, 350*6777b538SAndroid Build Coastguard Worker std::string_view trace_options_string); 351*6777b538SAndroid Build Coastguard Worker 352*6777b538SAndroid Build Coastguard Worker void SetMemoryDumpConfigFromConfigDict(const Value::Dict& memory_dump_config); 353*6777b538SAndroid Build Coastguard Worker void SetDefaultMemoryDumpConfig(); 354*6777b538SAndroid Build Coastguard Worker 355*6777b538SAndroid Build Coastguard Worker void SetHistogramNamesFromConfigList(const Value::List& histogram_names); 356*6777b538SAndroid Build Coastguard Worker void SetEventFiltersFromConfigList(const Value::List& event_filters); 357*6777b538SAndroid Build Coastguard Worker Value ToValue() const; 358*6777b538SAndroid Build Coastguard Worker 359*6777b538SAndroid Build Coastguard Worker TraceRecordMode record_mode_; 360*6777b538SAndroid Build Coastguard Worker size_t trace_buffer_size_in_events_ = 0; // 0 specifies default size 361*6777b538SAndroid Build Coastguard Worker size_t trace_buffer_size_in_kb_ = 0; // 0 specifies default size 362*6777b538SAndroid Build Coastguard Worker bool enable_systrace_ : 1; 363*6777b538SAndroid Build Coastguard Worker bool enable_argument_filter_ : 1; 364*6777b538SAndroid Build Coastguard Worker 365*6777b538SAndroid Build Coastguard Worker TraceConfigCategoryFilter category_filter_; 366*6777b538SAndroid Build Coastguard Worker 367*6777b538SAndroid Build Coastguard Worker MemoryDumpConfig memory_dump_config_; 368*6777b538SAndroid Build Coastguard Worker ProcessFilterConfig process_filter_config_; 369*6777b538SAndroid Build Coastguard Worker 370*6777b538SAndroid Build Coastguard Worker EventFilters event_filters_; 371*6777b538SAndroid Build Coastguard Worker bool enable_event_package_name_filter_ : 1; 372*6777b538SAndroid Build Coastguard Worker std::unordered_set<std::string> histogram_names_; 373*6777b538SAndroid Build Coastguard Worker std::unordered_set<std::string> systrace_events_; 374*6777b538SAndroid Build Coastguard Worker }; 375*6777b538SAndroid Build Coastguard Worker 376*6777b538SAndroid Build Coastguard Worker } // namespace base::trace_event 377*6777b538SAndroid Build Coastguard Worker 378*6777b538SAndroid Build Coastguard Worker #endif // BASE_TRACE_EVENT_TRACE_CONFIG_H_ 379