xref: /aosp_15_r20/external/cronet/base/trace_event/trace_config.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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