xref: /aosp_15_r20/external/perfetto/src/trace_processor/importers/common/tracks_common.h (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_COMMON_TRACKS_COMMON_H_
18 #define SRC_TRACE_PROCESSOR_IMPORTERS_COMMON_TRACKS_COMMON_H_
19 
20 #include <cstdint>
21 
22 #include "perfetto/ext/base/string_utils.h"
23 #include "perfetto/ext/base/string_view.h"
24 #include "src/trace_processor/importers/common/tracks.h"
25 
26 namespace perfetto::trace_processor::tracks {
27 
28 // This file acts as a shared source track, dimension and unit blueprints which
29 // are used from many places throughout the codebase. It's strongly recomended
30 // to use the shared blueprints from this file where possible.
31 
32 // Begin dimension blueprints.
33 
34 inline constexpr auto kGpuDimensionBlueprint =
35     tracks::UintDimensionBlueprint("gpu");
36 
37 inline constexpr auto kUidDimensionBlueprint =
38     tracks::UintDimensionBlueprint("uid");
39 
40 inline constexpr auto kCpuDimensionBlueprint =
41     tracks::UintDimensionBlueprint("cpu");
42 
43 inline constexpr auto kNameFromTraceDimensionBlueprint =
44     tracks::StringDimensionBlueprint("name");
45 
46 inline constexpr auto kLinuxDeviceDimensionBlueprint =
47     tracks::StringDimensionBlueprint("linux_device");
48 
49 inline constexpr auto kIrqDimensionBlueprint =
50     tracks::UintDimensionBlueprint("irq");
51 
52 inline constexpr auto kProcessDimensionBlueprint =
53     tracks::UintDimensionBlueprint("upid");
54 
55 inline constexpr auto kThreadDimensionBlueprint =
56     tracks::UintDimensionBlueprint("utid");
57 
58 inline constexpr auto kNetworkInterfaceDimensionBlueprint =
59     tracks::StringDimensionBlueprint("network_interface");
60 
61 inline constexpr auto kThermalZoneDimensionBlueprint =
62     tracks::StringDimensionBlueprint("thermal_zone");
63 
64 // End dimension blueprints.
65 
66 // Begin of unit blueprints.
67 
68 inline constexpr auto kBytesUnitBlueprint =
69     tracks::StaticUnitBlueprint("bytes");
70 
71 // Begin of shared unit blueprints.
72 
73 // Begin slice blueprints
74 
75 inline constexpr auto kLegacyGlobalInstantsBlueprint =
76     tracks::SliceBlueprint("legacy_chrome_global_instants");
77 
78 // End slice blueprints.
79 
80 // Begin counter blueprints.
81 
82 static constexpr auto kBatteryCounterBlueprint = tracks::CounterBlueprint(
83     "battery_counter",
84     tracks::UnknownUnitBlueprint(),
85     tracks::DimensionBlueprints(
86         tracks::StringDimensionBlueprint("battery_name"),
87         tracks::StringDimensionBlueprint("counter_name")),
88     tracks::FnNameBlueprint(
89         [](base::StringView battery_name, base::StringView counter_name) {
90           if (battery_name.size() > 0) {
91             return base::StackString<1024>(
92                 "batt.%.*s.%.*s", int(battery_name.size()), battery_name.data(),
93                 int(counter_name.size()), counter_name.data());
94           }
95           return base::StackString<1024>("batt.%.*s", int(counter_name.size()),
96                                          counter_name.data());
97         }));
98 
99 static constexpr auto kClockFrequencyBlueprint = tracks::CounterBlueprint(
100     "clock_frequency",
101     tracks::UnknownUnitBlueprint(),
102     tracks::DimensionBlueprints(kLinuxDeviceDimensionBlueprint),
103     tracks::FnNameBlueprint([](base::StringView key) {
104       return base::StackString<255>("%.*s Frequency", int(key.size()),
105                                     key.data());
106     }));
107 
108 static constexpr auto kClockStateBlueprint = tracks::CounterBlueprint(
109     "clock_state",
110     tracks::UnknownUnitBlueprint(),
111     tracks::DimensionBlueprints(kLinuxDeviceDimensionBlueprint),
112     tracks::FnNameBlueprint([](base::StringView key) {
113       return base::StackString<255>("%.*s State", int(key.size()), key.data());
114     }));
115 
116 static constexpr auto kCpuFrequencyBlueprint = tracks::CounterBlueprint(
117     "cpu_frequency",
118     tracks::UnknownUnitBlueprint(),
119     tracks::DimensionBlueprints(kCpuDimensionBlueprint),
120     tracks::StaticNameBlueprint("cpufreq"));
121 
122 static constexpr auto kGpuFrequencyBlueprint = tracks::CounterBlueprint(
123     "gpu_frequency",
124     tracks::StaticUnitBlueprint("MHz"),
125     tracks::DimensionBlueprints(kGpuDimensionBlueprint),
126     tracks::StaticNameBlueprint("gpufreq"));
127 
128 static constexpr auto kCpuIdleBlueprint = tracks::CounterBlueprint(
129     "cpu_idle",
130     tracks::UnknownUnitBlueprint(),
131     tracks::DimensionBlueprints(kCpuDimensionBlueprint),
132     tracks::StaticNameBlueprint("cpuidle"));
133 
134 static constexpr auto kThermalTemperatureBlueprint = tracks::CounterBlueprint(
135     "thermal_temperature",
136     tracks::UnknownUnitBlueprint(),
137     tracks::DimensionBlueprints(kThermalZoneDimensionBlueprint),
138     tracks::FnNameBlueprint([](base::StringView tz) {
139       return base::StackString<255>("%.*s Temperature",
140                                     static_cast<int>(tz.size()), tz.data());
141     }));
142 
143 static constexpr auto kCoolingDeviceCounterBlueprint = tracks::CounterBlueprint(
144     "cooling_device_counter",
145     tracks::UnknownUnitBlueprint(),
146     tracks::DimensionBlueprints(kLinuxDeviceDimensionBlueprint),
147     tracks::FnNameBlueprint([](base::StringView cdev) {
148       return base::StackString<255>("%.*s Cooling Device",
149                                     static_cast<int>(cdev.size()), cdev.data());
150     }));
151 
152 constexpr auto kChromeProcessStatsBlueprint = tracks::CounterBlueprint(
153     "chrome_process_stats",
154     tracks::UnknownUnitBlueprint(),
155     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint,
156                                 tracks::StringDimensionBlueprint("key")),
157     tracks::FnNameBlueprint([](uint32_t, base::StringView name) {
158       return base::StackString<128>("chrome.%.*s", int(name.size()),
159                                     name.data());
160     }));
161 
162 constexpr auto kAndroidScreenStateBlueprint =
163     tracks::CounterBlueprint("screen_state",
164                              tracks::UnknownUnitBlueprint(),
165                              tracks::DimensionBlueprints(),
166                              tracks::StaticNameBlueprint("ScreenState"));
167 
168 constexpr auto kAndroidBatteryStatsBlueprint = tracks::CounterBlueprint(
169     "battery_stats",
170     tracks::UnknownUnitBlueprint(),
171     tracks::DimensionBlueprints(
172         tracks::StringDimensionBlueprint("counter_key")),
173     tracks::FnNameBlueprint([](base::StringView name) {
174       return base::StackString<1024>("%.*s", int(name.size()), name.data());
175     }));
176 
177 constexpr auto kAndroidAtraceCounterBlueprint = tracks::CounterBlueprint(
178     "atrace_counter",
179     tracks::UnknownUnitBlueprint(),
180     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint,
181                                 tracks::kNameFromTraceDimensionBlueprint),
182     tracks::FnNameBlueprint([](uint32_t, base::StringView name) {
183       return base::StackString<1024>("%.*s", int(name.size()), name.data());
184     }));
185 
186 constexpr auto kOomScoreAdjBlueprint = tracks::CounterBlueprint(
187     "oom_score_adj",
188     tracks::UnknownUnitBlueprint(),
189     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint),
190     tracks::StaticNameBlueprint("oom_score_adj"));
191 
192 constexpr auto kOomScoreAdjThreadFallbackBlueprint = tracks::CounterBlueprint(
193     "oom_score_adj_thread_fallback",
194     tracks::UnknownUnitBlueprint(),
195     tracks::DimensionBlueprints(tracks::kThreadDimensionBlueprint),
196     tracks::StaticNameBlueprint("oom_score_adj"));
197 
198 constexpr auto kMmEventFnNameBlueprint = tracks::FnNameBlueprint(
199     [](uint32_t, base::StringView type, base::StringView metric) {
200       return base::StackString<1024>("mem.mm.%.*s.%.*s", int(type.size()),
201                                      type.data(), int(metric.size()),
202                                      metric.data());
203     });
204 
205 constexpr auto kMmEventBlueprint = tracks::CounterBlueprint(
206     "mm_event",
207     tracks::UnknownUnitBlueprint(),
208     tracks::DimensionBlueprints(
209         tracks::kProcessDimensionBlueprint,
210         tracks::StringDimensionBlueprint("mm_event_type"),
211         tracks::StringDimensionBlueprint("mm_event_metric")),
212     kMmEventFnNameBlueprint);
213 
214 constexpr auto kMmEventThreadFallbackBlueprint = tracks::CounterBlueprint(
215     "mm_event_thread_fallback",
216     tracks::UnknownUnitBlueprint(),
217     tracks::DimensionBlueprints(
218         tracks::kThreadDimensionBlueprint,
219         tracks::StringDimensionBlueprint("mm_event_type"),
220         tracks::StringDimensionBlueprint("mm_event_metric")),
221     kMmEventFnNameBlueprint);
222 
223 constexpr auto kPerfCounterBlueprint = tracks::CounterBlueprint(
224     "perf_counter",
225     tracks::UnknownUnitBlueprint(),
226     tracks::DimensionBlueprints(
227         tracks::kCpuDimensionBlueprint,
228         tracks::UintDimensionBlueprint("perf_session_id"),
229         tracks::kNameFromTraceDimensionBlueprint),
230     tracks::DynamicNameBlueprint());
231 
232 constexpr auto kGlobalGpuMemoryBlueprint =
233     tracks::CounterBlueprint("gpu_memory",
234                              tracks::kBytesUnitBlueprint,
235                              tracks::DimensionBlueprints(),
236                              tracks::StaticNameBlueprint("GPU Memory"));
237 
238 constexpr auto kProcessGpuMemoryBlueprint = tracks::CounterBlueprint(
239     "process_gpu_memory",
240     tracks::kBytesUnitBlueprint,
241     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint),
242     tracks::StaticNameBlueprint("GPU Memory"));
243 
244 static constexpr auto kProcessMemoryBlueprint = tracks::CounterBlueprint(
245     "process_memory",
246     tracks::UnknownUnitBlueprint(),
247     tracks::DimensionBlueprints(
248         tracks::kProcessDimensionBlueprint,
249         tracks::StringDimensionBlueprint("process_memory_key")),
250     tracks::FnNameBlueprint([](uint32_t, base::StringView key) {
251       return base::StackString<1024>("mem.%.*s", int(key.size()), key.data());
252     }));
253 
254 static constexpr auto kProcessMemoryThreadFallbackBlueprint =
255     tracks::CounterBlueprint(
256         "process_memory_thread_fallback",
257         tracks::UnknownUnitBlueprint(),
258         tracks::DimensionBlueprints(
259             tracks::kThreadDimensionBlueprint,
260             tracks::StringDimensionBlueprint("process_memory_key")),
261         tracks::FnNameBlueprint([](uint32_t, base::StringView key) {
262           return base::StackString<1024>("mem.%.*s", int(key.size()),
263                                          key.data());
264         }));
265 
266 static constexpr auto kJsonCounterBlueprint = tracks::CounterBlueprint(
267     "json_counter",
268     tracks::UnknownUnitBlueprint(),
269     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint,
270                                 tracks::kNameFromTraceDimensionBlueprint),
271     tracks::DynamicNameBlueprint());
272 
273 static constexpr auto kJsonCounterThreadFallbackBlueprint =
274     tracks::CounterBlueprint(
275         "json_counter_thread_fallback",
276         tracks::UnknownUnitBlueprint(),
277         tracks::DimensionBlueprints(tracks::kThreadDimensionBlueprint,
278                                     tracks::kNameFromTraceDimensionBlueprint),
279         tracks::DynamicNameBlueprint());
280 
281 static constexpr auto kGpuCounterBlueprint = tracks::CounterBlueprint(
282     "gpu_counter",
283     tracks::DynamicUnitBlueprint(),
284     tracks::DimensionBlueprints(tracks::kGpuDimensionBlueprint,
285                                 tracks::kNameFromTraceDimensionBlueprint),
286     tracks::DynamicNameBlueprint());
287 
288 // End counter blueprints.
289 
290 }  // namespace perfetto::trace_processor::tracks
291 
292 #endif  // SRC_TRACE_PROCESSOR_IMPORTERS_COMMON_TRACKS_COMMON_H_
293