@@ -109,11 +109,15 @@ PERFETTO_DEFINE_CATEGORIES(
109109 perfetto::Category (" test" )
110110 .SetDescription(" This is a test category" )
111111 .SetTags(" tag" ),
112+ perfetto::Category(" test.verbose" )
113+ .SetDescription(" This is a debug test category" )
114+ .SetTags(" tag" , " debug" ),
112115 perfetto::Category(" foo" ),
113116 perfetto::Category(" bar" ),
114117 perfetto::Category(" cat" ).SetTags(" slow" ),
115118 perfetto::Category(" cat.verbose" ).SetTags(" debug" ),
116119 perfetto::Category(" cat-with-dashes" ),
120+ perfetto::Category(" slow_category" ).SetTags(" slow" ),
117121 perfetto::Category::Group(" foo,bar" ),
118122 perfetto::Category::Group(" baz,bar,quux" ),
119123 perfetto::Category::Group(" red,green,blue,foo" ),
@@ -1687,20 +1691,23 @@ TEST_P(PerfettoApiTest, TrackEventDescriptor) {
16871691
16881692 // Check that the advertised categories match PERFETTO_DEFINE_CATEGORIES (see
16891693 // above).
1690- EXPECT_EQ (7 , desc.available_categories_size ());
1694+ EXPECT_EQ (9 , desc.available_categories_size ());
16911695 EXPECT_EQ (" test" , desc.available_categories ()[0 ].name ());
16921696 EXPECT_EQ (" This is a test category" ,
16931697 desc.available_categories ()[0 ].description ());
16941698 EXPECT_EQ (" tag" , desc.available_categories ()[0 ].tags ()[0 ]);
1695- EXPECT_EQ (" foo" , desc.available_categories ()[1 ].name ());
1696- EXPECT_EQ (" bar" , desc.available_categories ()[2 ].name ());
1697- EXPECT_EQ (" cat" , desc.available_categories ()[3 ].name ());
1698- EXPECT_EQ (" slow" , desc.available_categories ()[3 ].tags ()[0 ]);
1699- EXPECT_EQ (" cat.verbose" , desc.available_categories ()[4 ].name ());
1700- EXPECT_EQ (" debug" , desc.available_categories ()[4 ].tags ()[0 ]);
1701- EXPECT_EQ (" cat-with-dashes" , desc.available_categories ()[5 ].name ());
1702- EXPECT_EQ (" disabled-by-default-cat" , desc.available_categories ()[6 ].name ());
1703- EXPECT_EQ (" slow" , desc.available_categories ()[6 ].tags ()[0 ]);
1699+ EXPECT_EQ (" test.verbose" , desc.available_categories ()[1 ].name ());
1700+ EXPECT_EQ (" foo" , desc.available_categories ()[2 ].name ());
1701+ EXPECT_EQ (" bar" , desc.available_categories ()[3 ].name ());
1702+ EXPECT_EQ (" cat" , desc.available_categories ()[4 ].name ());
1703+ EXPECT_EQ (" slow" , desc.available_categories ()[4 ].tags ()[0 ]);
1704+ EXPECT_EQ (" cat.verbose" , desc.available_categories ()[5 ].name ());
1705+ EXPECT_EQ (" debug" , desc.available_categories ()[5 ].tags ()[0 ]);
1706+ EXPECT_EQ (" cat-with-dashes" , desc.available_categories ()[6 ].name ());
1707+ EXPECT_EQ (" slow_category" , desc.available_categories ()[7 ].name ());
1708+ EXPECT_EQ (" slow" , desc.available_categories ()[7 ].tags ()[0 ]);
1709+ EXPECT_EQ (" disabled-by-default-cat" , desc.available_categories ()[8 ].name ());
1710+ EXPECT_EQ (" slow" , desc.available_categories ()[8 ].tags ()[0 ]);
17041711}
17051712
17061713TEST_P (PerfettoApiTest, TrackEventSharedIncrementalState) {
@@ -3846,7 +3853,8 @@ TEST_P(PerfettoApiTest, TrackEventArgumentsNotEvaluatedWhenDisabled) {
38463853}
38473854
38483855TEST_P (PerfettoApiTest, TrackEventConfig) {
3849- auto check_config = [&](perfetto::protos::gen::TrackEventConfig te_cfg) {
3856+ auto run_config = [&](perfetto::protos::gen::TrackEventConfig te_cfg,
3857+ auto check_fcn) {
38503858 perfetto::TraceConfig cfg;
38513859 cfg.set_duration_ms (500 );
38523860 cfg.add_buffers ()->set_size_kb (1024 );
@@ -3857,6 +3865,8 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
38573865 auto * tracing_session = NewTrace (cfg);
38583866 tracing_session->get ()->StartBlocking ();
38593867
3868+ check_fcn ();
3869+
38603870 TRACE_EVENT_BEGIN (" foo" , " FooEvent" );
38613871 TRACE_EVENT_BEGIN (" bar" , " BarEvent" );
38623872 TRACE_EVENT_BEGIN (" foo,bar" , " MultiFooBar" );
@@ -3867,9 +3877,10 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
38673877 TRACE_EVENT_BEGIN (" cat.verbose" , " DebugEvent" );
38683878 TRACE_EVENT_BEGIN (" test" , " TagEvent" );
38693879 TRACE_EVENT_BEGIN (TRACE_DISABLED_BY_DEFAULT (" cat" ), " SlowDisabledEvent" );
3870- TRACE_EVENT_BEGIN (" dynamic,foo" , " DynamicGroupFooEvent" );
3871- perfetto::DynamicCategory dyn{" dynamic,bar" };
3872- TRACE_EVENT_BEGIN (dyn, " DynamicGroupBarEvent" );
3880+ perfetto::DynamicCategory dyn_foo{" dynamic,foo" };
3881+ TRACE_EVENT_BEGIN (dyn_foo, " DynamicGroupFooEvent" );
3882+ perfetto::DynamicCategory dyn_bar{" dynamic,bar" };
3883+ TRACE_EVENT_BEGIN (dyn_bar, " DynamicGroupBarEvent" );
38733884
38743885 auto slices = StopSessionAndReadSlicesFromTrace (tracing_session);
38753886 tracing_session->session .reset ();
@@ -3879,7 +3890,16 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
38793890 // Empty config should enable all categories except slow ones.
38803891 {
38813892 perfetto::protos::gen::TrackEventConfig te_cfg;
3882- auto slices = check_config (te_cfg);
3893+ auto slices = run_config (te_cfg, []() {
3894+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
3895+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" bar" ));
3896+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo,bar" ));
3897+ perfetto::DynamicCategory dyn{" dynamic" };
3898+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (dyn));
3899+ EXPECT_FALSE (
3900+ TRACE_EVENT_CATEGORY_ENABLED (TRACE_DISABLED_BY_DEFAULT (" cat" )));
3901+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" cat.verbose" ));
3902+ });
38833903 EXPECT_THAT (
38843904 slices,
38853905 ElementsAre (" B:foo.FooEvent" , " B:bar.BarEvent" , " B:foo,bar.MultiFooBar" ,
@@ -3894,7 +3914,13 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
38943914 perfetto::protos::gen::TrackEventConfig te_cfg;
38953915 te_cfg.add_disabled_categories (" *" );
38963916 te_cfg.add_enabled_categories (" foo" );
3897- auto slices = check_config (te_cfg);
3917+ auto slices = run_config (te_cfg, []() {
3918+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
3919+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" bar" ));
3920+ perfetto::DynamicCategory dyn{" dynamic" };
3921+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (dyn));
3922+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo,bar" ));
3923+ });
38983924 EXPECT_THAT (slices, ElementsAre (" B:foo.FooEvent" , " B:foo,bar.MultiFooBar" ,
38993925 " B:red,green,blue,foo.MultiFoo" ,
39003926 " B:$dynamic,$foo.DynamicGroupFooEvent" ));
@@ -3905,7 +3931,14 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39053931 perfetto::protos::gen::TrackEventConfig te_cfg;
39063932 te_cfg.add_disabled_categories (" *" );
39073933 te_cfg.add_enabled_categories (" dynamic" );
3908- auto slices = check_config (te_cfg);
3934+ auto slices = run_config (te_cfg, []() {
3935+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
3936+ perfetto::DynamicCategory dyn{" dynamic" };
3937+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (dyn));
3938+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" foo,bar" ));
3939+ perfetto::DynamicCategory dyn_bar{" dynamic,bar" };
3940+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (dyn_bar));
3941+ });
39093942 EXPECT_THAT (slices, ElementsAre (" B:$dynamic,$foo.DynamicGroupFooEvent" ,
39103943 " B:$dynamic,$bar.DynamicGroupBarEvent" ));
39113944 }
@@ -3917,7 +3950,17 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39173950 te_cfg.add_enabled_categories (" foo" );
39183951 te_cfg.add_enabled_categories (" baz" );
39193952 te_cfg.add_enabled_categories (" bar" );
3920- auto slices = check_config (te_cfg);
3953+ auto slices = run_config (te_cfg, []() {
3954+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
3955+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" bar" ));
3956+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" test" ));
3957+ perfetto::DynamicCategory dyn{" dynamic" };
3958+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (dyn));
3959+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo,bar" ));
3960+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" baz,bar,quux" ));
3961+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" red,green,blue,foo" ));
3962+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" red,green,blue,yellow" ));
3963+ });
39213964 EXPECT_THAT (
39223965 slices,
39233966 ElementsAre (" B:foo.FooEvent" , " B:bar.BarEvent" , " B:foo,bar.MultiFooBar" ,
@@ -3930,7 +3973,12 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39303973 {
39313974 perfetto::protos::gen::TrackEventConfig te_cfg;
39323975 te_cfg.add_enabled_categories (" *" );
3933- auto slices = check_config (te_cfg);
3976+ auto slices = run_config (te_cfg, []() {
3977+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
3978+ EXPECT_FALSE (
3979+ TRACE_EVENT_CATEGORY_ENABLED (TRACE_DISABLED_BY_DEFAULT (" cat" )));
3980+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" cat.verbose" ));
3981+ });
39343982 EXPECT_THAT (
39353983 slices,
39363984 ElementsAre (" B:foo.FooEvent" , " B:bar.BarEvent" , " B:foo,bar.MultiFooBar" ,
@@ -3945,7 +3993,11 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39453993 perfetto::protos::gen::TrackEventConfig te_cfg;
39463994 te_cfg.add_disabled_categories (" *" );
39473995 te_cfg.add_enabled_categories (" fo*" );
3948- auto slices = check_config (te_cfg);
3996+ auto slices = run_config (te_cfg, []() {
3997+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
3998+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" bar" ));
3999+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo,bar" ));
4000+ });
39494001 EXPECT_THAT (slices, ElementsAre (" B:foo.FooEvent" , " B:foo,bar.MultiFooBar" ,
39504002 " B:red,green,blue,foo.MultiFoo" ,
39514003 " B:$dynamic,$foo.DynamicGroupFooEvent" ));
@@ -3956,7 +4008,10 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39564008 perfetto::protos::gen::TrackEventConfig te_cfg;
39574009 te_cfg.add_disabled_categories (" *" );
39584010 te_cfg.add_enabled_tags (" tag" );
3959- auto slices = check_config (te_cfg);
4011+ auto slices = run_config (te_cfg, []() {
4012+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
4013+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" test" ));
4014+ });
39604015 EXPECT_THAT (slices, ElementsAre (" B:test.TagEvent" ));
39614016 }
39624017
@@ -3965,7 +4020,10 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39654020 perfetto::protos::gen::TrackEventConfig te_cfg;
39664021 te_cfg.add_disabled_categories (" *" );
39674022 te_cfg.add_enabled_tags (" slow" );
3968- auto slices = check_config (te_cfg);
4023+ auto slices = run_config (te_cfg, []() {
4024+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
4025+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" cat" ));
4026+ });
39694027 EXPECT_THAT (slices,
39704028 ElementsAre (" B:cat.SlowEvent" ,
39714029 " B:disabled-by-default-cat.SlowDisabledEvent" ));
@@ -3976,7 +4034,11 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39764034 perfetto::protos::gen::TrackEventConfig te_cfg;
39774035 te_cfg.add_disabled_categories (" *" );
39784036 te_cfg.add_enabled_categories (" disabled-by-default-*" );
3979- auto slices = check_config (te_cfg);
4037+ auto slices = run_config (te_cfg, []() {
4038+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
4039+ EXPECT_TRUE (
4040+ TRACE_EVENT_CATEGORY_ENABLED (TRACE_DISABLED_BY_DEFAULT (" cat" )));
4041+ });
39804042 EXPECT_THAT (slices,
39814043 ElementsAre (" B:disabled-by-default-cat.SlowDisabledEvent" ));
39824044 }
@@ -3987,7 +4049,13 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39874049 te_cfg.add_enabled_categories (" *" );
39884050 te_cfg.add_enabled_tags (" slow" );
39894051 te_cfg.add_enabled_tags (" debug" );
3990- auto slices = check_config (te_cfg);
4052+ auto slices = run_config (te_cfg, []() {
4053+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
4054+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" cat" ));
4055+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" cat.verbose" ));
4056+ EXPECT_TRUE (
4057+ TRACE_EVENT_CATEGORY_ENABLED (TRACE_DISABLED_BY_DEFAULT (" cat" )));
4058+ });
39914059 EXPECT_THAT (
39924060 slices,
39934061 ElementsAre (" B:foo.FooEvent" , " B:bar.BarEvent" , " B:foo,bar.MultiFooBar" ,
@@ -3998,6 +4066,64 @@ TEST_P(PerfettoApiTest, TrackEventConfig) {
39984066 " B:$dynamic,$foo.DynamicGroupFooEvent" ,
39994067 " B:$dynamic,$bar.DynamicGroupBarEvent" ));
40004068 }
4069+
4070+ // Disable explicit category.
4071+ {
4072+ perfetto::protos::gen::TrackEventConfig te_cfg;
4073+ te_cfg.add_enabled_categories (" *" );
4074+ te_cfg.add_disabled_categories (" foo" );
4075+ run_config (te_cfg, []() {
4076+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
4077+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" bar" ));
4078+ });
4079+ }
4080+
4081+ // Disable category with a pattern.
4082+ // TODO(crbug.com/260418655): Fix once API changes are announced.
4083+ {
4084+ perfetto::protos::gen::TrackEventConfig te_cfg;
4085+ te_cfg.add_enabled_categories (" *" );
4086+ te_cfg.add_disabled_categories (" fo*" );
4087+ run_config (te_cfg, []() {
4088+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" foo" ));
4089+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" bar" ));
4090+ });
4091+ }
4092+
4093+ // Enable tag and disable category with a pattern.
4094+ {
4095+ perfetto::protos::gen::TrackEventConfig te_cfg;
4096+ te_cfg.add_enabled_categories (" slow_*" );
4097+ te_cfg.add_disabled_tags (" slow" );
4098+ run_config (te_cfg, []() {
4099+ EXPECT_FALSE (TRACE_EVENT_CATEGORY_ENABLED (" slow_category" ));
4100+ });
4101+ }
4102+
4103+ // Enable tag and disable category explicitly.
4104+ // TODO(crbug.com/260418655): Fix once API changes are announced.
4105+ {
4106+ perfetto::protos::gen::TrackEventConfig te_cfg;
4107+ te_cfg.add_disabled_categories (" slow_category" );
4108+ te_cfg.add_enabled_tags (" slow" );
4109+ te_cfg.add_disabled_categories (" *" );
4110+ run_config (te_cfg, []() {
4111+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" slow_category" ));
4112+ });
4113+ }
4114+
4115+ // Enable tag and disable another.
4116+ // TODO(crbug.com/260418655): Fix once API changes are announced.
4117+ {
4118+ perfetto::protos::gen::TrackEventConfig te_cfg;
4119+ te_cfg.add_enabled_tags (" tag" );
4120+ te_cfg.add_disabled_tags (" slow" );
4121+ te_cfg.add_disabled_categories (" *" );
4122+ run_config (te_cfg, []() {
4123+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" test" ));
4124+ EXPECT_TRUE (TRACE_EVENT_CATEGORY_ENABLED (" test.verbose" ));
4125+ });
4126+ }
40014127}
40024128
40034129TEST_P (PerfettoApiTest, OneDataSourceOneEvent) {
0 commit comments