xref: /aosp_15_r20/external/cronet/base/trace_event/builtin_categories.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_
6 #define BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_
7 
8 #include <cstddef>
9 #include <iterator>
10 
11 #include "base/base_export.h"
12 #include "base/trace_event/common/trace_event_common.h"
13 #include "base/tracing_buildflags.h"
14 #include "build/build_config.h"
15 
16 // List of builtin category names. If you want to use a new category name in
17 // your code and you get a static assert, this is the right place to register
18 // the name. If the name is going to be used only for testing, please add it to
19 // |kCategoriesForTesting| instead.
20 //
21 // Since spaces aren't allowed, use '_' to separate words in category names
22 // (e.g., "content_capture").
23 //
24 // Parameter |X| must be a *macro* that takes a single |name| string argument,
25 // denoting a category name.
26 #define INTERNAL_TRACE_LIST_BUILTIN_CATEGORIES(X)                        \
27   /* These entries must go first to be consistent with the               \
28    * CategoryRegistry::kCategory* consts.*/                              \
29   X("tracing_categories_exhausted._must_increase_kMaxCategories")        \
30   X("tracing_already_shutdown")                                          \
31   X("__metadata")                                                        \
32   /* The rest of the list is in alphabetical order */                    \
33   X("accessibility")                                                     \
34   X("AccountFetcherService")                                             \
35   X("android.ui.jank")                                                   \
36   X("android_webview")                                                   \
37   X("android_webview.timeline")                                          \
38   /* Actions on Google Hardware, used in Google-internal code. */        \
39   X("aogh")                                                              \
40   X("audio")                                                             \
41   X("base")                                                              \
42   X("benchmark")                                                         \
43   X("blink")                                                             \
44   X("blink.animations")                                                  \
45   X("blink.bindings")                                                    \
46   X("blink.console")                                                     \
47   X("blink.net")                                                         \
48   X("blink.resource")                                                    \
49   X("blink.user_timing")                                                 \
50   X("blink.worker")                                                      \
51   X("blink_style")                                                       \
52   X("Blob")                                                              \
53   X("browser")                                                           \
54   X("browsing_data")                                                     \
55   X("CacheStorage")                                                      \
56   X("Calculators")                                                       \
57   X("CameraStream")                                                      \
58   X("cppgc")                                                             \
59   X("camera")                                                            \
60   X("cast_app")                                                          \
61   X("cast_perf_test")                                                    \
62   X("cast.mdns")                                                         \
63   X("cast.mdns.socket")                                                  \
64   X("cast.stream")                                                       \
65   X("cc")                                                                \
66   X("cc.debug")                                                          \
67   X("cdp.perf")                                                          \
68   X("chromeos")                                                          \
69   X("cma")                                                               \
70   X("compositor")                                                        \
71   X("content")                                                           \
72   X("content_capture")                                                   \
73   X("interactions")                                                      \
74   X("delegated_ink_trails")                                              \
75   X("device")                                                            \
76   X("devtools")                                                          \
77   X("devtools.contrast")                                                 \
78   X("devtools.timeline")                                                 \
79   X("disk_cache")                                                        \
80   X("download")                                                          \
81   X("download_service")                                                  \
82   X("drm")                                                               \
83   X("drmcursor")                                                         \
84   X("dwrite")                                                            \
85   X("evdev")                                                             \
86   X("event")                                                             \
87   X("exo")                                                               \
88   X("extensions")                                                        \
89   X("explore_sites")                                                     \
90   X("FileSystem")                                                        \
91   X("file_system_provider")                                              \
92   X("fledge")                                                            \
93   X("fonts")                                                             \
94   X("GAMEPAD")                                                           \
95   X("gpu")                                                               \
96   X("gpu.angle")                                                         \
97   X("gpu.angle.texture_metrics")                                         \
98   X("gpu.capture")                                                       \
99   X("graphics.pipeline")                                                 \
100   X("headless")                                                          \
101   /* Traces for //components/history. */                                 \
102   X("history")                                                           \
103   X("hwoverlays")                                                        \
104   X("identity")                                                          \
105   X("ime")                                                               \
106   X("IndexedDB")                                                         \
107   X("input")                                                             \
108   X("input.scrolling")                                                   \
109   X("io")                                                                \
110   X("ipc")                                                               \
111   X("Java")                                                              \
112   X("jni")                                                               \
113   X("jpeg")                                                              \
114   X("latency")                                                           \
115   X("latencyInfo")                                                       \
116   X("leveldb")                                                           \
117   X("loading")                                                           \
118   X("log")                                                               \
119   X("login")                                                             \
120   X("media")                                                             \
121   X("media_router")                                                      \
122   X("memory")                                                            \
123   X("midi")                                                              \
124   X("mojom")                                                             \
125   X("mus")                                                               \
126   X("native")                                                            \
127   X("navigation")                                                        \
128   X("navigation.debug")                                                  \
129   X("net")                                                               \
130   X("network.scheduler")                                                 \
131   X("netlog")                                                            \
132   X("offline_pages")                                                     \
133   X("omnibox")                                                           \
134   X("oobe")                                                              \
135   X("openscreen")                                                        \
136   X("ozone")                                                             \
137   X("partition_alloc")                                                   \
138   X("passwords")                                                         \
139   X("p2p")                                                               \
140   X("page-serialization")                                                \
141   X("paint_preview")                                                     \
142   X("pepper")                                                            \
143   X("PlatformMalloc")                                                    \
144   X("power")                                                             \
145   X("ppapi")                                                             \
146   X("ppapi_proxy")                                                       \
147   X("print")                                                             \
148   X("raf_investigation")                                                 \
149   X("rail")                                                              \
150   X("renderer")                                                          \
151   X("renderer_host")                                                     \
152   X("renderer.scheduler")                                                \
153   X("resources")                                                         \
154   X("RLZ")                                                               \
155   X("ServiceWorker")                                                     \
156   X("SiteEngagement")                                                    \
157   X("safe_browsing")                                                     \
158   X("scheduler")                                                         \
159   X("scheduler.long_tasks")                                              \
160   X("screenlock_monitor")                                                \
161   X("segmentation_platform")                                             \
162   X("sequence_manager")                                                  \
163   X("service_manager")                                                   \
164   X("sharing")                                                           \
165   X("shell")                                                             \
166   X("shortcut_viewer")                                                   \
167   X("shutdown")                                                          \
168   X("skia")                                                              \
169   X("sql")                                                               \
170   X("stadia_media")                                                      \
171   X("stadia_rtc")                                                        \
172   X("startup")                                                           \
173   X("sync")                                                              \
174   X("system_apps")                                                       \
175   X("test_gpu")                                                          \
176   X("toplevel")                                                          \
177   X("toplevel.flow")                                                     \
178   X("ui")                                                                \
179   X("v8")                                                                \
180   X("v8.execute")                                                        \
181   X("v8.wasm")                                                           \
182   X("ValueStoreFrontend::Backend")                                       \
183   X("views")                                                             \
184   X("views.frame")                                                       \
185   X("viz")                                                               \
186   X("vk")                                                                \
187   X("wakeup.flow")                                                       \
188   X("wayland")                                                           \
189   X("webaudio")                                                          \
190   X("webengine.fidl")                                                    \
191   X("weblayer")                                                          \
192   X("WebCore")                                                           \
193   X("webnn")                                                             \
194   X("webrtc")                                                            \
195   X("webrtc_stats")                                                      \
196   X("xr")                                                                \
197   X(TRACE_DISABLED_BY_DEFAULT("android_view_hierarchy"))                 \
198   X(TRACE_DISABLED_BY_DEFAULT("animation-worklet"))                      \
199   X(TRACE_DISABLED_BY_DEFAULT("audio"))                                  \
200   X(TRACE_DISABLED_BY_DEFAULT("audio.latency"))                          \
201   X(TRACE_DISABLED_BY_DEFAULT("audio-worklet"))                          \
202   X(TRACE_DISABLED_BY_DEFAULT("base"))                                   \
203   X(TRACE_DISABLED_BY_DEFAULT("blink.debug"))                            \
204   X(TRACE_DISABLED_BY_DEFAULT("blink.debug.display_lock"))               \
205   X(TRACE_DISABLED_BY_DEFAULT("blink.debug.layout"))                     \
206   X(TRACE_DISABLED_BY_DEFAULT("blink.debug.layout.trees"))               \
207   X(TRACE_DISABLED_BY_DEFAULT("blink.feature_usage"))                    \
208   X(TRACE_DISABLED_BY_DEFAULT("blink.image_decoding"))                   \
209   X(TRACE_DISABLED_BY_DEFAULT("blink.invalidation"))                     \
210   X(TRACE_DISABLED_BY_DEFAULT("identifiability"))                        \
211   X(TRACE_DISABLED_BY_DEFAULT("identifiability.high_entropy_api"))       \
212   X(TRACE_DISABLED_BY_DEFAULT("cc"))                                     \
213   X(TRACE_DISABLED_BY_DEFAULT("cc.debug"))                               \
214   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.cdp-perf"))                      \
215   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items"))                 \
216   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.lcd_text"))                      \
217   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.picture"))                       \
218   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"))                     \
219   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"))              \
220   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"))                 \
221   X(TRACE_DISABLED_BY_DEFAULT("content.verbose"))                        \
222   X(TRACE_DISABLED_BY_DEFAULT("cpu_profiler"))                           \
223   X(TRACE_DISABLED_BY_DEFAULT("cppgc"))                                  \
224   X(TRACE_DISABLED_BY_DEFAULT("cpu_profiler.debug"))                     \
225   X(TRACE_DISABLED_BY_DEFAULT("devtools.screenshot"))                    \
226   X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"))                      \
227   X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame"))                \
228   X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.inputs"))               \
229   X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking")) \
230   X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers"))               \
231   X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture"))              \
232   X(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack"))                \
233   X(TRACE_DISABLED_BY_DEFAULT("file"))                                   \
234   X(TRACE_DISABLED_BY_DEFAULT("fonts"))                                  \
235   X(TRACE_DISABLED_BY_DEFAULT("gpu_cmd_queue"))                          \
236   X(TRACE_DISABLED_BY_DEFAULT("gpu.dawn"))                               \
237   X(TRACE_DISABLED_BY_DEFAULT("gpu.debug"))                              \
238   X(TRACE_DISABLED_BY_DEFAULT("gpu.decoder"))                            \
239   X(TRACE_DISABLED_BY_DEFAULT("gpu.device"))                             \
240   X(TRACE_DISABLED_BY_DEFAULT("gpu.graphite.dawn"))                      \
241   X(TRACE_DISABLED_BY_DEFAULT("gpu.service"))                            \
242   X(TRACE_DISABLED_BY_DEFAULT("gpu.vulkan.vma"))                         \
243   X(TRACE_DISABLED_BY_DEFAULT("histogram_samples"))                      \
244   X(TRACE_DISABLED_BY_DEFAULT("java-heap-profiler"))                     \
245   X(TRACE_DISABLED_BY_DEFAULT("layer-element"))                          \
246   X(TRACE_DISABLED_BY_DEFAULT("layout_shift.debug"))                     \
247   X(TRACE_DISABLED_BY_DEFAULT("lifecycles"))                             \
248   X(TRACE_DISABLED_BY_DEFAULT("loading"))                                \
249   X(TRACE_DISABLED_BY_DEFAULT("mediastream"))                            \
250   X(TRACE_DISABLED_BY_DEFAULT("memory-infra"))                           \
251   X(TRACE_DISABLED_BY_DEFAULT("memory-infra.v8.code_stats"))             \
252   X(TRACE_DISABLED_BY_DEFAULT("mojom"))                                  \
253   X(TRACE_DISABLED_BY_DEFAULT("net"))                                    \
254   X(TRACE_DISABLED_BY_DEFAULT("network"))                                \
255   X(TRACE_DISABLED_BY_DEFAULT("paint-worklet"))                          \
256   X(TRACE_DISABLED_BY_DEFAULT("power"))                                  \
257   X(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"))                     \
258   X(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug"))               \
259   X(TRACE_DISABLED_BY_DEFAULT("sequence_manager"))                       \
260   X(TRACE_DISABLED_BY_DEFAULT("sequence_manager.debug"))                 \
261   X(TRACE_DISABLED_BY_DEFAULT("sequence_manager.verbose_snapshots"))     \
262   X(TRACE_DISABLED_BY_DEFAULT("skia"))                                   \
263   X(TRACE_DISABLED_BY_DEFAULT("skia.gpu"))                               \
264   X(TRACE_DISABLED_BY_DEFAULT("skia.gpu.cache"))                         \
265   X(TRACE_DISABLED_BY_DEFAULT("skia.shaders"))                           \
266   X(TRACE_DISABLED_BY_DEFAULT("skottie"))                                \
267   X(TRACE_DISABLED_BY_DEFAULT("SyncFileSystem"))                         \
268   X(TRACE_DISABLED_BY_DEFAULT("system_power"))                           \
269   X(TRACE_DISABLED_BY_DEFAULT("system_stats"))                           \
270   X(TRACE_DISABLED_BY_DEFAULT("thread_pool_diagnostics"))                \
271   X(TRACE_DISABLED_BY_DEFAULT("toplevel.ipc"))                           \
272   X(TRACE_DISABLED_BY_DEFAULT("user_action_samples"))                    \
273   X(TRACE_DISABLED_BY_DEFAULT("v8.compile"))                             \
274   X(TRACE_DISABLED_BY_DEFAULT("v8.cpu_profiler"))                        \
275   X(TRACE_DISABLED_BY_DEFAULT("v8.gc"))                                  \
276   X(TRACE_DISABLED_BY_DEFAULT("v8.gc_stats"))                            \
277   X(TRACE_DISABLED_BY_DEFAULT("v8.ic_stats"))                            \
278   X(TRACE_DISABLED_BY_DEFAULT("v8.inspector"))                           \
279   X(TRACE_DISABLED_BY_DEFAULT("v8.runtime"))                             \
280   X(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats"))                       \
281   X(TRACE_DISABLED_BY_DEFAULT("v8.runtime_stats_sampling"))              \
282   X(TRACE_DISABLED_BY_DEFAULT("v8.stack_trace"))                         \
283   X(TRACE_DISABLED_BY_DEFAULT("v8.turbofan"))                            \
284   X(TRACE_DISABLED_BY_DEFAULT("v8.wasm.detailed"))                       \
285   X(TRACE_DISABLED_BY_DEFAULT("v8.wasm.turbofan"))                       \
286   X(TRACE_DISABLED_BY_DEFAULT("video_and_image_capture"))                \
287   X(TRACE_DISABLED_BY_DEFAULT("display.framedisplayed"))                 \
288   X(TRACE_DISABLED_BY_DEFAULT("viz.gpu_composite_time"))                 \
289   X(TRACE_DISABLED_BY_DEFAULT("viz.debug.overlay_planes"))               \
290   X(TRACE_DISABLED_BY_DEFAULT("viz.hit_testing_flow"))                   \
291   X(TRACE_DISABLED_BY_DEFAULT("viz.overdraw"))                           \
292   X(TRACE_DISABLED_BY_DEFAULT("viz.quads"))                              \
293   X(TRACE_DISABLED_BY_DEFAULT("viz.surface_id_flow"))                    \
294   X(TRACE_DISABLED_BY_DEFAULT("viz.surface_lifetime"))                   \
295   X(TRACE_DISABLED_BY_DEFAULT("viz.triangles"))                          \
296   X(TRACE_DISABLED_BY_DEFAULT("viz.visual_debugger"))                    \
297   X(TRACE_DISABLED_BY_DEFAULT("webaudio.audionode"))                     \
298   X(TRACE_DISABLED_BY_DEFAULT("webgpu"))                                 \
299   X(TRACE_DISABLED_BY_DEFAULT("webnn"))                                  \
300   X(TRACE_DISABLED_BY_DEFAULT("webrtc"))                                 \
301   X(TRACE_DISABLED_BY_DEFAULT("worker.scheduler"))                       \
302   X(TRACE_DISABLED_BY_DEFAULT("xr.debug"))
303 
304 #define INTERNAL_TRACE_LIST_BUILTIN_CATEGORY_GROUPS(X)                        \
305   X("android_webview,toplevel")                                               \
306   X("android_webview.timeline,android.ui.jank")                               \
307   X("base,toplevel")                                                          \
308   X("benchmark,drm")                                                          \
309   X("benchmark,latencyInfo,rail")                                             \
310   X("benchmark,latencyInfo,rail,input.scrolling")                             \
311   X("benchmark,loading")                                                      \
312   X("benchmark,rail")                                                         \
313   X("benchmark,uma")                                                          \
314   X("benchmark,ui")                                                           \
315   X("benchmark,viz")                                                          \
316   X("benchmark,viz," TRACE_DISABLED_BY_DEFAULT("display.framedisplayed"))     \
317   X("blink,benchmark")                                                        \
318   X("blink,benchmark,rail," TRACE_DISABLED_BY_DEFAULT("blink.debug.layout"))  \
319   X("blink,blink.resource")                                                   \
320   X("blink,blink_style")                                                      \
321   X("blink,devtools.timeline")                                                \
322   X("blink,loading")                                                          \
323   X("blink,rail")                                                             \
324   X("blink.animations,devtools.timeline,benchmark,rail")                      \
325   X("blink.user_timing,rail")                                                 \
326   X("browser,content,navigation")                                             \
327   X("browser,navigation")                                                     \
328   X("browser,navigation,benchmark")                                           \
329   X("browser,startup")                                                        \
330   X("category1,category2")                                                    \
331   X("cc,benchmark")                                                           \
332   X("cc,benchmark,input,input.scrolling")                                     \
333   X("cc,benchmark," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame"))     \
334   X("cc,input")                                                               \
335   X("cc,raf_investigation")                                                   \
336   X("cc," TRACE_DISABLED_BY_DEFAULT("devtools.timeline"))                     \
337   X("cc,benchmark," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.frame"))     \
338   X("content,navigation")                                                     \
339   X("devtools.timeline,rail")                                                 \
340   X("drm,hwoverlays")                                                         \
341   X("dwrite,fonts")                                                           \
342   X("fonts,ui")                                                               \
343   X("gpu,benchmark")                                                          \
344   X("gpu,benchmark,android_webview")                                          \
345   X("gpu,benchmark,webview")                                                  \
346   X("gpu,login")                                                              \
347   X("gpu,startup")                                                            \
348   X("gpu,toplevel.flow")                                                      \
349   X("gpu.angle,startup")                                                      \
350   X("inc2,inc")                                                               \
351   X("inc,inc2")                                                               \
352   X("input,benchmark")                                                        \
353   X("input,benchmark,devtools.timeline")                                      \
354   X("input,benchmark,devtools.timeline,latencyInfo")                          \
355   X("input,benchmark,latencyInfo")                                            \
356   X("input,latency")                                                          \
357   X("input,rail")                                                             \
358   X("input,input.scrolling")                                                  \
359   X("input,views")                                                            \
360   X("interactions,startup")                                                   \
361   X("ipc,security")                                                           \
362   X("ipc,toplevel")                                                           \
363   X("Java,devtools," TRACE_DISABLED_BY_DEFAULT("devtools.timeline"))          \
364   X("loading,interactions")                                                   \
365   X("loading,rail")                                                           \
366   X("loading,rail,devtools.timeline")                                         \
367   X("login,screenlock_monitor")                                               \
368   X("media,gpu")                                                              \
369   X("media,rail")                                                             \
370   X("navigation,benchmark,rail")                                              \
371   X("navigation,rail")                                                        \
372   X("renderer,benchmark,rail")                                                \
373   X("renderer,webkit")                                                        \
374   X("renderer_host,navigation")                                               \
375   X("renderer_host," TRACE_DISABLED_BY_DEFAULT("viz.surface_id_flow"))        \
376   X("scheduler,devtools.timeline,loading")                                    \
377   X("shutdown,viz")                                                           \
378   X("startup,benchmark,rail")                                                 \
379   X("startup,rail")                                                           \
380   X("toplevel,Java")                                                          \
381   X("toplevel,viz")                                                           \
382   X("ui,input")                                                               \
383   X("ui,latency")                                                             \
384   X("ui,toplevel")                                                            \
385   X("v8," TRACE_DISABLED_BY_DEFAULT("v8.compile"))                            \
386   X("v8,devtools.timeline")                                                   \
387   X("v8,devtools.timeline," TRACE_DISABLED_BY_DEFAULT("v8.compile"))          \
388   X("viz,benchmark")                                                          \
389   X("viz,benchmark,graphics.pipeline")                                        \
390   X("wakeup.flow,toplevel.flow")                                              \
391   X("WebCore,benchmark,rail")                                                 \
392   X(TRACE_DISABLED_BY_DEFAULT("cc.debug") "," TRACE_DISABLED_BY_DEFAULT(      \
393       "viz.quads") "," TRACE_DISABLED_BY_DEFAULT("devtools.timeline.layers")) \
394   X(TRACE_DISABLED_BY_DEFAULT("cc.debug.display_items") "," \
395       TRACE_DISABLED_BY_DEFAULT("cc.debug.picture") "," \
396       TRACE_DISABLED_BY_DEFAULT("devtools.timeline.picture"))                 \
397   X(TRACE_DISABLED_BY_DEFAULT("v8.inspector") "," TRACE_DISABLED_BY_DEFAULT(  \
398       "v8.stack_trace"))
399 
400 #define INTERNAL_TRACE_INIT_CATEGORY_NAME(name) name,
401 
402 #define INTERNAL_TRACE_INIT_CATEGORY(name) {0, 0, name},
403 
404 #if BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
405 PERFETTO_DEFINE_TEST_CATEGORY_PREFIXES("cat",
406                                        "foo",
407                                        "test",
408                                        "kTest",
409                                        "noise",
410                                        "Testing",
411                                        "NotTesting",
412                                        TRACE_DISABLED_BY_DEFAULT("test"),
413                                        TRACE_DISABLED_BY_DEFAULT("Testing"),
414                                        TRACE_DISABLED_BY_DEFAULT("NotTesting"));
415 
416 #define INTERNAL_CATEGORY(X) perfetto::Category(X),
417 #define INTERNAL_CATEGORY_GROUP(X) perfetto::Category::Group(X),
418 
419 // Define a Perfetto TrackEvent data source using the list of categories defined
420 // above. See https://perfetto.dev/docs/instrumentation/track-events.
421 PERFETTO_DEFINE_CATEGORIES_IN_NAMESPACE_WITH_ATTRS(
422     base,
423     BASE_EXPORT,
424     INTERNAL_TRACE_LIST_BUILTIN_CATEGORIES(INTERNAL_CATEGORY)
425         INTERNAL_TRACE_LIST_BUILTIN_CATEGORY_GROUPS(INTERNAL_CATEGORY_GROUP));
426 PERFETTO_USE_CATEGORIES_FROM_NAMESPACE(base);
427 
428 #undef INTERNAL_CATEGORY
429 #undef INTERNAL_CATEGORY_GROUP
430 #endif  // BUILDFLAG(USE_PERFETTO_CLIENT_LIBRARY)
431 
432 namespace base {
433 namespace trace_event {
434 
435 // Constexpr version of string comparison operator. |a| and |b| must be valid
436 // C-style strings known at compile-time.
StrEqConstexpr(const char * a,const char * b)437 constexpr bool StrEqConstexpr(const char* a, const char* b) {
438   for (; *a != '\0' && *b != '\0'; ++a, ++b) {
439     if (*a != *b)
440       return false;
441   }
442   return *a == *b;
443 }
444 
445 // Tests for |StrEqConstexpr()|.
446 static_assert(StrEqConstexpr("foo", "foo"), "strings should be equal");
447 static_assert(!StrEqConstexpr("foo", "Foo"), "strings should not be equal");
448 static_assert(!StrEqConstexpr("foo", "foo1"), "strings should not be equal");
449 static_assert(!StrEqConstexpr("foo2", "foo"), "strings should not be equal");
450 static_assert(StrEqConstexpr("", ""), "strings should be equal");
451 static_assert(!StrEqConstexpr("foo", ""), "strings should not be equal");
452 static_assert(!StrEqConstexpr("", "foo"), "strings should not be equal");
453 static_assert(!StrEqConstexpr("ab", "abc"), "strings should not be equal");
454 static_assert(!StrEqConstexpr("abc", "ab"), "strings should not be equal");
455 
456 // Static-only class providing access to the compile-time registry of trace
457 // categories.
458 // TODO(skyostil): Remove after migrating to the Perfetto client API.
459 class BASE_EXPORT BuiltinCategories {
460  public:
461   BuiltinCategories() = delete;
462   BuiltinCategories(const BuiltinCategories&) = delete;
463   BuiltinCategories& operator=(const BuiltinCategories&) = delete;
464 
465   // Returns a built-in category name at |index| in the registry.
At(size_t index)466   static constexpr const char* At(size_t index) {
467     return kBuiltinCategories[index];
468   }
469 
470   // Returns the amount of built-in categories in the registry.
Size()471   static constexpr size_t Size() { return std::size(kBuiltinCategories); }
472 
473   // Where in the builtin category list to start when populating the
474   // about://tracing UI.
475   static constexpr size_t kVisibleCategoryStart = 3;
476 
477   // Returns whether the category is either:
478   // - Properly registered in the builtin list.
479   // - Constists of several categories separated by commas.
480   // - Used only in tests.
481   // All trace categories are checked against this. A static_assert is triggered
482   // if at least one category fails this check.
IsAllowedCategory(const char * category)483   static constexpr bool IsAllowedCategory(const char* category) {
484 #if BUILDFLAG(IS_WIN) && defined(COMPONENT_BUILD)
485     return true;
486 #else
487     return IsBuiltinCategory(category) ||
488            IsCommaSeparatedCategoryGroup(category) ||
489            IsCategoryForTesting(category);
490 #endif
491   }
492 
493  private:
494   // The array of built-in category names used for compile-time lookup.
495   static constexpr const char* kBuiltinCategories[] = {
496       INTERNAL_TRACE_LIST_BUILTIN_CATEGORIES(
497           INTERNAL_TRACE_INIT_CATEGORY_NAME)};
498 
499   // The array of category names used only for testing. It's kept separately
500   // from the main list to avoid allocating the space for them in the binary.
501   static constexpr const char* kCategoriesForTesting[] = {
502       "test_\001\002\003\n\r",
503       "test_a",
504       "test_all",
505       "test_b",
506       "test_b1",
507       "test_c",
508       "test_c0",
509       "test_c1",
510       "test_c2",
511       "test_c3",
512       "test_c4",
513       "test_tracing",
514       "cat",
515       "cat1",
516       "cat2",
517       "cat3",
518       "cat4",
519       "cat5",
520       "cat6",
521       "category",
522       "test_drink",
523       "test_excluded_cat",
524       "test_filtered_cat",
525       "foo",
526       "test_inc",
527       "test_inc2",
528       "test_included",
529       "test_inc_wildcard_",
530       "test_inc_wildcard_abc",
531       "test_inc_wildchar_bla_end",
532       "test_inc_wildchar_x_end",
533       "kTestCategory",
534       "noise",
535       "test_other_included",
536       "test",
537       "test_category",
538       "Testing",
539       "TraceEventAgentTestCategory",
540       "test_unfiltered_cat",
541       "test_x",
542       TRACE_DISABLED_BY_DEFAULT("test_c9"),
543       TRACE_DISABLED_BY_DEFAULT("test_cat"),
544       TRACE_DISABLED_BY_DEFAULT("test_filtered_cat"),
545       TRACE_DISABLED_BY_DEFAULT("NotTesting"),
546       TRACE_DISABLED_BY_DEFAULT("Testing"),
547       TRACE_DISABLED_BY_DEFAULT("test_unfiltered_cat")};
548 
549   // Returns whether |str| is in |array| of |array_len|.
IsStringInArray(const char * str,const char * const array[],size_t array_len)550   static constexpr bool IsStringInArray(const char* str,
551                                         const char* const array[],
552                                         size_t array_len) {
553     for (size_t i = 0; i < array_len; ++i) {
554       if (StrEqConstexpr(str, array[i]))
555         return true;
556     }
557     return false;
558   }
559 
560   // Returns whether |category_group| contains a ',' symbol, denoting that an
561   // event belongs to several categories. We don't add such strings in the
562   // builtin list but allow them to pass the static assert.
IsCommaSeparatedCategoryGroup(const char * category_group)563   static constexpr bool IsCommaSeparatedCategoryGroup(
564       const char* category_group) {
565     for (; *category_group != '\0'; ++category_group) {
566       if (*category_group == ',')
567         return true;
568     }
569     return false;
570   }
571 
572   // Returns whether |category| is used only for testing.
IsCategoryForTesting(const char * category)573   static constexpr bool IsCategoryForTesting(const char* category) {
574     return IsStringInArray(category, kCategoriesForTesting,
575                            std::size(kCategoriesForTesting));
576   }
577 
578   // Returns whether |category| is registered in the builtin list.
IsBuiltinCategory(const char * category)579   static constexpr bool IsBuiltinCategory(const char* category) {
580     return IsStringInArray(category, kBuiltinCategories,
581                            std::size(kBuiltinCategories));
582   }
583 };
584 
585 }  // namespace trace_event
586 }  // namespace base
587 
588 #endif  // BASE_TRACE_EVENT_BUILTIN_CATEGORIES_H_
589