OLD | NEW |
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef BASE_TRACE_EVENT_TRACE_CONFIG_H_ | 5 #ifndef BASE_TRACE_EVENT_TRACE_CONFIG_H_ |
6 #define BASE_TRACE_EVENT_TRACE_CONFIG_H_ | 6 #define BASE_TRACE_EVENT_TRACE_CONFIG_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/base_export.h" | 11 #include "base/base_export.h" |
12 #include "base/gtest_prod_util.h" | 12 #include "base/gtest_prod_util.h" |
| 13 #include "base/trace_event/memory_dump_provider.h" |
13 #include "base/values.h" | 14 #include "base/values.h" |
14 | 15 |
15 namespace base { | 16 namespace base { |
16 namespace trace_event { | 17 namespace trace_event { |
17 | 18 |
18 // Options determines how the trace buffer stores data. | 19 // Options determines how the trace buffer stores data. |
19 enum TraceRecordMode { | 20 enum TraceRecordMode { |
20 // Record until the trace buffer is full. | 21 // Record until the trace buffer is full. |
21 RECORD_UNTIL_FULL, | 22 RECORD_UNTIL_FULL, |
22 | 23 |
23 // Record until the user ends the trace. The trace buffer is a fixed size | 24 // Record until the user ends the trace. The trace buffer is a fixed size |
24 // and we use it as a ring buffer during recording. | 25 // and we use it as a ring buffer during recording. |
25 RECORD_CONTINUOUSLY, | 26 RECORD_CONTINUOUSLY, |
26 | 27 |
27 // Record until the trace buffer is full, but with a huge buffer size. | 28 // Record until the trace buffer is full, but with a huge buffer size. |
28 RECORD_AS_MUCH_AS_POSSIBLE, | 29 RECORD_AS_MUCH_AS_POSSIBLE, |
29 | 30 |
30 // Echo to console. Events are discarded. | 31 // Echo to console. Events are discarded. |
31 ECHO_TO_CONSOLE, | 32 ECHO_TO_CONSOLE, |
32 }; | 33 }; |
33 | 34 |
34 class BASE_EXPORT TraceConfig { | 35 class BASE_EXPORT TraceConfig { |
35 public: | 36 public: |
36 typedef std::vector<std::string> StringList; | 37 typedef std::vector<std::string> StringList; |
37 | 38 |
| 39 // Specifies the memory dump config for tracing. Used only when |
| 40 // "memory-infra" category is enabled. |
| 41 struct MemoryDumpTriggerConfig { |
| 42 uint32 periodic_interval_ms; |
| 43 MemoryDumpArgs::LevelOfDetail level_of_detail; |
| 44 }; |
| 45 |
| 46 typedef std::vector<MemoryDumpTriggerConfig> MemoryDumpConfig; |
| 47 |
38 TraceConfig(); | 48 TraceConfig(); |
39 | 49 |
40 // Create TraceConfig object from category filter and trace options strings. | 50 // Create TraceConfig object from category filter and trace options strings. |
41 // | 51 // |
42 // |category_filter_string| is a comma-delimited list of category wildcards. | 52 // |category_filter_string| is a comma-delimited list of category wildcards. |
43 // A category can have an optional '-' prefix to make it an excluded category. | 53 // A category can have an optional '-' prefix to make it an excluded category. |
44 // All the same rules apply above, so for example, having both included and | 54 // All the same rules apply above, so for example, having both included and |
45 // excluded categories in the same list would not be supported. | 55 // excluded categories in the same list would not be supported. |
46 // | 56 // |
47 // Category filters can also be used to configure synthetic delays. | 57 // Category filters can also be used to configure synthetic delays. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 // category filters and trace options. | 102 // category filters and trace options. |
93 // | 103 // |
94 // Example: | 104 // Example: |
95 // { | 105 // { |
96 // "record_mode": "record-continuously", | 106 // "record_mode": "record-continuously", |
97 // "enable_sampling": true, | 107 // "enable_sampling": true, |
98 // "enable_systrace": true, | 108 // "enable_systrace": true, |
99 // "enable_argument_filter": true, | 109 // "enable_argument_filter": true, |
100 // "included_categories": ["included", | 110 // "included_categories": ["included", |
101 // "inc_pattern*", | 111 // "inc_pattern*", |
102 // "disabled-by-default-category1"], | 112 // "disabled-by-default-memory-infra"], |
103 // "excluded_categories": ["excluded", "exc_pattern*"], | 113 // "excluded_categories": ["excluded", "exc_pattern*"], |
104 // "synthetic_delays": ["test.Delay1;16", "test.Delay2;32"] | 114 // "synthetic_delays": ["test.Delay1;16", "test.Delay2;32"] |
| 115 // "memory_dump_config": { |
| 116 // "triggers": [ |
| 117 // { |
| 118 // "mode": "detailed", |
| 119 // "periodic_interval_ms": 2000 |
| 120 // } |
| 121 // ] |
| 122 // } |
105 // } | 123 // } |
| 124 // |
| 125 // Note: memory_dump_config can be specified only if |
| 126 // disabled-by-default-memory-infra category is enabled. |
106 explicit TraceConfig(const std::string& config_string); | 127 explicit TraceConfig(const std::string& config_string); |
107 | 128 |
108 TraceConfig(const TraceConfig& tc); | 129 TraceConfig(const TraceConfig& tc); |
109 | 130 |
110 ~TraceConfig(); | 131 ~TraceConfig(); |
111 | 132 |
112 TraceConfig& operator=(const TraceConfig& rhs); | 133 TraceConfig& operator=(const TraceConfig& rhs); |
113 | 134 |
114 // Return a list of the synthetic delays specified in this category filter. | 135 // Return a list of the synthetic delays specified in this category filter. |
115 const StringList& GetSyntheticDelayValues() const; | 136 const StringList& GetSyntheticDelayValues() const; |
(...skipping 17 matching lines...) Expand all Loading... |
133 | 154 |
134 // Returns true if at least one category in the list is enabled by this | 155 // Returns true if at least one category in the list is enabled by this |
135 // trace config. | 156 // trace config. |
136 bool IsCategoryGroupEnabled(const char* category_group) const; | 157 bool IsCategoryGroupEnabled(const char* category_group) const; |
137 | 158 |
138 // Merges config with the current TraceConfig | 159 // Merges config with the current TraceConfig |
139 void Merge(const TraceConfig& config); | 160 void Merge(const TraceConfig& config); |
140 | 161 |
141 void Clear(); | 162 void Clear(); |
142 | 163 |
| 164 const MemoryDumpConfig& memory_dump_config() const { |
| 165 return memory_dump_config_; |
| 166 } |
| 167 |
143 private: | 168 private: |
144 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromValidLegacyFormat); | 169 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromValidLegacyFormat); |
145 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, | 170 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, |
146 TraceConfigFromInvalidLegacyStrings); | 171 TraceConfigFromInvalidLegacyStrings); |
147 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, ConstructDefaultTraceConfig); | 172 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, ConstructDefaultTraceConfig); |
148 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromValidString); | 173 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromValidString); |
149 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromInvalidString); | 174 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromInvalidString); |
150 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, | 175 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, |
151 IsEmptyOrContainsLeadingOrTrailingWhitespace); | 176 IsEmptyOrContainsLeadingOrTrailingWhitespace); |
| 177 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, TraceConfigFromMemoryConfigString); |
| 178 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, LegacyStringToMemoryDumpConfig); |
| 179 FRIEND_TEST_ALL_PREFIXES(TraceConfigTest, EmptyMemoryDumpConfigTest); |
152 | 180 |
153 // The default trace config, used when none is provided. | 181 // The default trace config, used when none is provided. |
154 // Allows all non-disabled-by-default categories through, except if they end | 182 // Allows all non-disabled-by-default categories through, except if they end |
155 // in the suffix 'Debug' or 'Test'. | 183 // in the suffix 'Debug' or 'Test'. |
156 void InitializeDefault(); | 184 void InitializeDefault(); |
157 | 185 |
158 // Initialize from the config string | 186 // Initialize from the config string |
159 void InitializeFromConfigString(const std::string& config_string); | 187 void InitializeFromConfigString(const std::string& config_string); |
160 | 188 |
161 // Initialize from category filter and trace options strings | 189 // Initialize from category filter and trace options strings |
162 void InitializeFromStrings(const std::string& category_filter_string, | 190 void InitializeFromStrings(const std::string& category_filter_string, |
163 const std::string& trace_options_string); | 191 const std::string& trace_options_string); |
164 | 192 |
165 void SetCategoriesFromIncludedList(const base::ListValue& included_list); | 193 void SetCategoriesFromIncludedList(const base::ListValue& included_list); |
166 void SetCategoriesFromExcludedList(const base::ListValue& excluded_list); | 194 void SetCategoriesFromExcludedList(const base::ListValue& excluded_list); |
167 void SetSyntheticDelaysFromList(const base::ListValue& list); | 195 void SetSyntheticDelaysFromList(const base::ListValue& list); |
168 void AddCategoryToDict(base::DictionaryValue& dict, | 196 void AddCategoryToDict(base::DictionaryValue& dict, |
169 const char* param, | 197 const char* param, |
170 const StringList& categories) const; | 198 const StringList& categories) const; |
171 | 199 |
| 200 void SetMemoryDumpConfig(const base::DictionaryValue& memory_dump_config); |
| 201 void SetDefaultMemoryDumpConfig(); |
| 202 |
172 // Convert TraceConfig to the dict representation of the TraceConfig. | 203 // Convert TraceConfig to the dict representation of the TraceConfig. |
173 void ToDict(base::DictionaryValue& dict) const; | 204 void ToDict(base::DictionaryValue& dict) const; |
174 | 205 |
175 std::string ToTraceOptionsString() const; | 206 std::string ToTraceOptionsString() const; |
176 | 207 |
177 void WriteCategoryFilterString(const StringList& values, | 208 void WriteCategoryFilterString(const StringList& values, |
178 std::string* out, | 209 std::string* out, |
179 bool included) const; | 210 bool included) const; |
180 void WriteCategoryFilterString(const StringList& delays, | 211 void WriteCategoryFilterString(const StringList& delays, |
181 std::string* out) const; | 212 std::string* out) const; |
182 | 213 |
183 // Returns true if category is enable according to this trace config. | 214 // Returns true if category is enable according to this trace config. |
184 bool IsCategoryEnabled(const char* category_name) const; | 215 bool IsCategoryEnabled(const char* category_name) const; |
185 | 216 |
186 static bool IsEmptyOrContainsLeadingOrTrailingWhitespace( | 217 static bool IsEmptyOrContainsLeadingOrTrailingWhitespace( |
187 const std::string& str); | 218 const std::string& str); |
188 | 219 |
189 bool HasIncludedPatterns() const; | 220 bool HasIncludedPatterns() const; |
190 | 221 |
191 TraceRecordMode record_mode_; | 222 TraceRecordMode record_mode_; |
192 bool enable_sampling_ : 1; | 223 bool enable_sampling_ : 1; |
193 bool enable_systrace_ : 1; | 224 bool enable_systrace_ : 1; |
194 bool enable_argument_filter_ : 1; | 225 bool enable_argument_filter_ : 1; |
195 | 226 |
| 227 MemoryDumpConfig memory_dump_config_; |
| 228 |
196 StringList included_categories_; | 229 StringList included_categories_; |
197 StringList disabled_categories_; | 230 StringList disabled_categories_; |
198 StringList excluded_categories_; | 231 StringList excluded_categories_; |
199 StringList synthetic_delays_; | 232 StringList synthetic_delays_; |
200 }; | 233 }; |
201 | 234 |
202 } // namespace trace_event | 235 } // namespace trace_event |
203 } // namespace base | 236 } // namespace base |
204 | 237 |
205 #endif // BASE_TRACE_EVENT_TRACE_CONFIG_H_ | 238 #endif // BASE_TRACE_EVENT_TRACE_CONFIG_H_ |
OLD | NEW |