builtin_categories.h 32 KB

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