xref: /aosp_15_r20/external/perfetto/src/tracing/test/tracing_module.cc (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker /*
2*6dbdd20aSAndroid Build Coastguard Worker  * Copyright (C) 2019 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker  *
4*6dbdd20aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker  *
8*6dbdd20aSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker  *
10*6dbdd20aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker  * limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Worker  */
16*6dbdd20aSAndroid Build Coastguard Worker 
17*6dbdd20aSAndroid Build Coastguard Worker #include "src/tracing/test/tracing_module.h"
18*6dbdd20aSAndroid Build Coastguard Worker 
19*6dbdd20aSAndroid Build Coastguard Worker #include "protos/perfetto/trace/track_event/log_message.pbzero.h"
20*6dbdd20aSAndroid Build Coastguard Worker #include "src/tracing/test/tracing_module_categories.h"
21*6dbdd20aSAndroid Build Coastguard Worker 
22*6dbdd20aSAndroid Build Coastguard Worker #include <stdio.h>
23*6dbdd20aSAndroid Build Coastguard Worker 
24*6dbdd20aSAndroid Build Coastguard Worker // This file is for checking that multiple sets of trace event categories can be
25*6dbdd20aSAndroid Build Coastguard Worker // combined into the same program.
26*6dbdd20aSAndroid Build Coastguard Worker 
27*6dbdd20aSAndroid Build Coastguard Worker PERFETTO_TRACK_EVENT_STATIC_STORAGE_IN_NAMESPACE(tracing_module);
28*6dbdd20aSAndroid Build Coastguard Worker PERFETTO_TRACK_EVENT_STATIC_STORAGE_IN_NAMESPACE_WITH_ATTRS(tracing_extra,
29*6dbdd20aSAndroid Build Coastguard Worker                                                             [[maybe_unused]]);
30*6dbdd20aSAndroid Build Coastguard Worker 
31*6dbdd20aSAndroid Build Coastguard Worker namespace tracing_extra {
32*6dbdd20aSAndroid Build Coastguard Worker namespace {
33*6dbdd20aSAndroid Build Coastguard Worker 
EmitEventFromExtraNamespace()34*6dbdd20aSAndroid Build Coastguard Worker void EmitEventFromExtraNamespace() {
35*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("extra", "ExtraNamespaceFromModule");
36*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("extra2", "ExtraNamespaceFromModuleNotEnabled");
37*6dbdd20aSAndroid Build Coastguard Worker }
38*6dbdd20aSAndroid Build Coastguard Worker 
39*6dbdd20aSAndroid Build Coastguard Worker }  // namespace
40*6dbdd20aSAndroid Build Coastguard Worker }  // namespace tracing_extra
41*6dbdd20aSAndroid Build Coastguard Worker 
42*6dbdd20aSAndroid Build Coastguard Worker namespace tracing_module {
43*6dbdd20aSAndroid Build Coastguard Worker 
44*6dbdd20aSAndroid Build Coastguard Worker // The following two functions test selecting the category set on a
45*6dbdd20aSAndroid Build Coastguard Worker // per-namespace level.
46*6dbdd20aSAndroid Build Coastguard Worker namespace test_ns1 {
47*6dbdd20aSAndroid Build Coastguard Worker PERFETTO_USE_CATEGORIES_FROM_NAMESPACE(tracing_extra);
48*6dbdd20aSAndroid Build Coastguard Worker 
49*6dbdd20aSAndroid Build Coastguard Worker void EmitEvent();
EmitEvent()50*6dbdd20aSAndroid Build Coastguard Worker void EmitEvent() {
51*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("extra", "DefaultNamespace");
52*6dbdd20aSAndroid Build Coastguard Worker }
53*6dbdd20aSAndroid Build Coastguard Worker 
54*6dbdd20aSAndroid Build Coastguard Worker }  // namespace test_ns1
55*6dbdd20aSAndroid Build Coastguard Worker 
56*6dbdd20aSAndroid Build Coastguard Worker namespace test_ns2 {
57*6dbdd20aSAndroid Build Coastguard Worker PERFETTO_USE_CATEGORIES_FROM_NAMESPACE(tracing_module);
58*6dbdd20aSAndroid Build Coastguard Worker 
59*6dbdd20aSAndroid Build Coastguard Worker void EmitEvent();
EmitEvent()60*6dbdd20aSAndroid Build Coastguard Worker void EmitEvent() {
61*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "DefaultNamespace");
62*6dbdd20aSAndroid Build Coastguard Worker }
63*6dbdd20aSAndroid Build Coastguard Worker 
64*6dbdd20aSAndroid Build Coastguard Worker }  // namespace test_ns2
65*6dbdd20aSAndroid Build Coastguard Worker 
InitializeCategories()66*6dbdd20aSAndroid Build Coastguard Worker void InitializeCategories() {
67*6dbdd20aSAndroid Build Coastguard Worker   TrackEvent::Register();
68*6dbdd20aSAndroid Build Coastguard Worker   tracing_extra::TrackEvent::Register();
69*6dbdd20aSAndroid Build Coastguard Worker }
70*6dbdd20aSAndroid Build Coastguard Worker 
AddSessionObserver(perfetto::TrackEventSessionObserver * observer)71*6dbdd20aSAndroid Build Coastguard Worker void AddSessionObserver(perfetto::TrackEventSessionObserver* observer) {
72*6dbdd20aSAndroid Build Coastguard Worker   TrackEvent::AddSessionObserver(observer);
73*6dbdd20aSAndroid Build Coastguard Worker }
74*6dbdd20aSAndroid Build Coastguard Worker 
RemoveSessionObserver(perfetto::TrackEventSessionObserver * observer)75*6dbdd20aSAndroid Build Coastguard Worker void RemoveSessionObserver(perfetto::TrackEventSessionObserver* observer) {
76*6dbdd20aSAndroid Build Coastguard Worker   TrackEvent::RemoveSessionObserver(observer);
77*6dbdd20aSAndroid Build Coastguard Worker }
78*6dbdd20aSAndroid Build Coastguard Worker 
IsEnabled()79*6dbdd20aSAndroid Build Coastguard Worker bool IsEnabled() {
80*6dbdd20aSAndroid Build Coastguard Worker   return TrackEvent::IsEnabled();
81*6dbdd20aSAndroid Build Coastguard Worker }
82*6dbdd20aSAndroid Build Coastguard Worker 
EmitTrackEvents()83*6dbdd20aSAndroid Build Coastguard Worker void EmitTrackEvents() {
84*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "DisabledEventFromModule");
85*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_END("cat1");
86*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat4", "DisabledEventFromModule");
87*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_END("cat4");
88*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat9", "DisabledEventFromModule");
89*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_END("cat9");
90*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("foo", "FooEventFromModule");
91*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_END("foo");
92*6dbdd20aSAndroid Build Coastguard Worker }
93*6dbdd20aSAndroid Build Coastguard Worker 
EmitTrackEventsFromAllNamespaces()94*6dbdd20aSAndroid Build Coastguard Worker void EmitTrackEventsFromAllNamespaces() {
95*6dbdd20aSAndroid Build Coastguard Worker   // Since we're in the `tracing_module` namespace, that registry is used by
96*6dbdd20aSAndroid Build Coastguard Worker   // default.
97*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "DefaultNamespaceFromModule");
98*6dbdd20aSAndroid Build Coastguard Worker 
99*6dbdd20aSAndroid Build Coastguard Worker   // Emit an event from the other namespace.
100*6dbdd20aSAndroid Build Coastguard Worker   tracing_extra::EmitEventFromExtraNamespace();
101*6dbdd20aSAndroid Build Coastguard Worker 
102*6dbdd20aSAndroid Build Coastguard Worker   // Make the other namespace the default.
103*6dbdd20aSAndroid Build Coastguard Worker   PERFETTO_USE_CATEGORIES_FROM_NAMESPACE_SCOPED(tracing_extra);
104*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("extra", "OverrideNamespaceFromModule");
105*6dbdd20aSAndroid Build Coastguard Worker 
106*6dbdd20aSAndroid Build Coastguard Worker   test_ns1::EmitEvent();
107*6dbdd20aSAndroid Build Coastguard Worker   test_ns2::EmitEvent();
108*6dbdd20aSAndroid Build Coastguard Worker }
109*6dbdd20aSAndroid Build Coastguard Worker 
GetIncrementalState()110*6dbdd20aSAndroid Build Coastguard Worker perfetto::internal::TrackEventIncrementalState* GetIncrementalState() {
111*6dbdd20aSAndroid Build Coastguard Worker   perfetto::internal::TrackEventIncrementalState* state = nullptr;
112*6dbdd20aSAndroid Build Coastguard Worker   TrackEvent::Trace([&state](TrackEvent::TraceContext ctx) {
113*6dbdd20aSAndroid Build Coastguard Worker     state = ctx.GetIncrementalState();
114*6dbdd20aSAndroid Build Coastguard Worker   });
115*6dbdd20aSAndroid Build Coastguard Worker   return state;
116*6dbdd20aSAndroid Build Coastguard Worker }
117*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneTrackEvent()118*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneTrackEvent() {
119*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "DisabledEventFromModule");
120*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
121*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
122*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
123*6dbdd20aSAndroid Build Coastguard Worker }
124*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneTrackEventWithTypedArgument()125*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneTrackEventWithTypedArgument() {
126*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "EventWithArg", [](perfetto::EventContext ctx) {
127*6dbdd20aSAndroid Build Coastguard Worker     auto log = ctx.event()->set_log_message();
128*6dbdd20aSAndroid Build Coastguard Worker     log->set_body_iid(0x42);
129*6dbdd20aSAndroid Build Coastguard Worker   });
130*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
131*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
132*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
133*6dbdd20aSAndroid Build Coastguard Worker }
134*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneScopedTrackEvent()135*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneScopedTrackEvent() {
136*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT("cat1", "ScopedEventFromModule");
137*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
138*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
139*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
140*6dbdd20aSAndroid Build Coastguard Worker }
141*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneTrackEventWithDebugAnnotations()142*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneTrackEventWithDebugAnnotations() {
143*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "EventWithAnnotations", "p1", 42, "p2", .5f);
144*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
145*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
146*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
147*6dbdd20aSAndroid Build Coastguard Worker }
148*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneTrackEventWithCustomTrack()149*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneTrackEventWithCustomTrack() {
150*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "EventWithTrack", perfetto::Track(8086));
151*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
152*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
153*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
154*6dbdd20aSAndroid Build Coastguard Worker }
155*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneLegacyEvent()156*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneLegacyEvent() {
157*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT_BEGIN("cat1", "LegacyEventWithArgs", "arg1", 42, "arg2", .5f);
158*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
159*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
160*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
161*6dbdd20aSAndroid Build Coastguard Worker }
162*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneScopedLegacyEvent()163*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneScopedLegacyEvent() {
164*6dbdd20aSAndroid Build Coastguard Worker   TRACE_EVENT("cat1", "ScopedLegacyEventWithArgs", "arg1", 42, "arg2", .5f);
165*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
166*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
167*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
168*6dbdd20aSAndroid Build Coastguard Worker }
169*6dbdd20aSAndroid Build Coastguard Worker 
FunctionWithOneCounterEvent()170*6dbdd20aSAndroid Build Coastguard Worker void FunctionWithOneCounterEvent() {
171*6dbdd20aSAndroid Build Coastguard Worker   TRACE_COUNTER("cat1", "CounterName", 4096);
172*6dbdd20aSAndroid Build Coastguard Worker   // Simulates the non-tracing work of this function, which should take priority
173*6dbdd20aSAndroid Build Coastguard Worker   // over the above trace event in terms of instruction scheduling.
174*6dbdd20aSAndroid Build Coastguard Worker   puts("Hello");
175*6dbdd20aSAndroid Build Coastguard Worker }
176*6dbdd20aSAndroid Build Coastguard Worker 
177*6dbdd20aSAndroid Build Coastguard Worker }  // namespace tracing_module
178