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