• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 static constexpr auto kAndroidDeviceStateBlueprint =
79     tracks::SliceBlueprint("android_device_state",
80                            tracks::DimensionBlueprints(),
81                            tracks::StaticNameBlueprint("DeviceStateChanged"));
82 
83 static constexpr auto kAndroidLmkBlueprint = tracks::SliceBlueprint(
84     "android_lmk",
85     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint),
86     tracks::StaticNameBlueprint("LMK"));
87 
88 static constexpr auto kChromeProcessInstantBlueprint = tracks::SliceBlueprint(
89     "chrome_process_instant",
90     tracks::Dimensions(tracks::kProcessDimensionBlueprint));
91 
92 // End slice blueprints.
93 
94 // Begin counter blueprints.
95 
96 inline constexpr auto kBatteryCounterBlueprint = tracks::CounterBlueprint(
97     "battery_counter",
98     tracks::UnknownUnitBlueprint(),
99     tracks::DimensionBlueprints(
100         tracks::StringDimensionBlueprint("battery_name"),
101         tracks::StringDimensionBlueprint("counter_name")),
102     tracks::FnNameBlueprint(
103         [](base::StringView battery_name, base::StringView counter_name) {
104           if (battery_name.size() > 0) {
105             return base::StackString<1024>(
106                 "batt.%.*s.%.*s", int(battery_name.size()), battery_name.data(),
107                 int(counter_name.size()), counter_name.data());
108           }
109           return base::StackString<1024>("batt.%.*s", int(counter_name.size()),
110                                          counter_name.data());
111         }));
112 
113 inline constexpr auto kClockFrequencyBlueprint = tracks::CounterBlueprint(
114     "clock_frequency",
115     tracks::UnknownUnitBlueprint(),
116     tracks::DimensionBlueprints(kLinuxDeviceDimensionBlueprint),
117     tracks::FnNameBlueprint([](base::StringView key) {
118       return base::StackString<255>("%.*s Frequency", int(key.size()),
119                                     key.data());
120     }));
121 
122 inline constexpr auto kClockStateBlueprint = tracks::CounterBlueprint(
123     "clock_state",
124     tracks::UnknownUnitBlueprint(),
125     tracks::DimensionBlueprints(kLinuxDeviceDimensionBlueprint),
126     tracks::FnNameBlueprint([](base::StringView key) {
127       return base::StackString<255>("%.*s State", int(key.size()), key.data());
128     }));
129 
130 inline constexpr auto kCpuFrequencyBlueprint = tracks::CounterBlueprint(
131     "cpu_frequency",
132     tracks::UnknownUnitBlueprint(),
133     tracks::DimensionBlueprints(kCpuDimensionBlueprint),
134     tracks::StaticNameBlueprint("cpufreq"));
135 
136 inline constexpr auto kGpuFrequencyBlueprint = tracks::CounterBlueprint(
137     "gpu_frequency",
138     tracks::StaticUnitBlueprint("MHz"),
139     tracks::DimensionBlueprints(kGpuDimensionBlueprint),
140     tracks::StaticNameBlueprint("gpufreq"));
141 
142 inline constexpr auto kCpuIdleBlueprint = tracks::CounterBlueprint(
143     "cpu_idle",
144     tracks::UnknownUnitBlueprint(),
145     tracks::DimensionBlueprints(kCpuDimensionBlueprint),
146     tracks::StaticNameBlueprint("cpuidle"));
147 
148 inline constexpr auto kThermalTemperatureBlueprint = tracks::CounterBlueprint(
149     "thermal_temperature",
150     tracks::UnknownUnitBlueprint(),
151     tracks::DimensionBlueprints(kThermalZoneDimensionBlueprint),
152     tracks::FnNameBlueprint([](base::StringView tz) {
153       return base::StackString<255>("%.*s Temperature",
154                                     static_cast<int>(tz.size()), tz.data());
155     }));
156 
157 inline constexpr auto kCoolingDeviceCounterBlueprint = tracks::CounterBlueprint(
158     "cooling_device_counter",
159     tracks::UnknownUnitBlueprint(),
160     tracks::DimensionBlueprints(kLinuxDeviceDimensionBlueprint),
161     tracks::FnNameBlueprint([](base::StringView cdev) {
162       return base::StackString<255>("%.*s Cooling Device",
163                                     static_cast<int>(cdev.size()), cdev.data());
164     }));
165 
166 inline constexpr auto kChromeProcessStatsBlueprint = tracks::CounterBlueprint(
167     "chrome_process_stats",
168     tracks::UnknownUnitBlueprint(),
169     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint,
170                                 tracks::StringDimensionBlueprint("key")),
171     tracks::FnNameBlueprint([](uint32_t, base::StringView name) {
172       return base::StackString<128>("chrome.%.*s", int(name.size()),
173                                     name.data());
174     }));
175 
176 inline constexpr auto kAndroidScreenStateBlueprint =
177     tracks::CounterBlueprint("screen_state",
178                              tracks::UnknownUnitBlueprint(),
179                              tracks::DimensionBlueprints(),
180                              tracks::StaticNameBlueprint("ScreenState"));
181 
182 inline constexpr auto kAndroidBatteryStatsBlueprint = tracks::CounterBlueprint(
183     "battery_stats",
184     tracks::UnknownUnitBlueprint(),
185     tracks::DimensionBlueprints(
186         tracks::StringDimensionBlueprint("counter_key")),
187     tracks::FnNameBlueprint([](base::StringView name) {
188       return base::StackString<1024>("%.*s", int(name.size()), name.data());
189     }));
190 
191 inline constexpr auto kAndroidAtraceCounterBlueprint = tracks::CounterBlueprint(
192     "atrace_counter",
193     tracks::UnknownUnitBlueprint(),
194     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint,
195                                 tracks::kNameFromTraceDimensionBlueprint),
196     tracks::FnNameBlueprint([](uint32_t, base::StringView name) {
197       return base::StackString<1024>("%.*s", int(name.size()), name.data());
198     }));
199 
200 inline constexpr auto kOomScoreAdjBlueprint = tracks::CounterBlueprint(
201     "oom_score_adj",
202     tracks::UnknownUnitBlueprint(),
203     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint),
204     tracks::StaticNameBlueprint("oom_score_adj"));
205 
206 inline constexpr auto kOomScoreAdjThreadFallbackBlueprint =
207     tracks::CounterBlueprint(
208         "oom_score_adj_thread_fallback",
209         tracks::UnknownUnitBlueprint(),
210         tracks::DimensionBlueprints(tracks::kThreadDimensionBlueprint),
211         tracks::StaticNameBlueprint("oom_score_adj"));
212 
213 inline constexpr auto kMmEventFnNameBlueprint = tracks::FnNameBlueprint(
214     [](uint32_t, base::StringView type, base::StringView metric) {
215       return base::StackString<1024>("mem.mm.%.*s.%.*s", int(type.size()),
216                                      type.data(), int(metric.size()),
217                                      metric.data());
218     });
219 
220 inline constexpr auto kMmEventBlueprint = tracks::CounterBlueprint(
221     "mm_event",
222     tracks::UnknownUnitBlueprint(),
223     tracks::DimensionBlueprints(
224         tracks::kProcessDimensionBlueprint,
225         tracks::StringDimensionBlueprint("mm_event_type"),
226         tracks::StringDimensionBlueprint("mm_event_metric")),
227     kMmEventFnNameBlueprint);
228 
229 inline constexpr auto kMmEventThreadFallbackBlueprint =
230     tracks::CounterBlueprint(
231         "mm_event_thread_fallback",
232         tracks::UnknownUnitBlueprint(),
233         tracks::DimensionBlueprints(
234             tracks::kThreadDimensionBlueprint,
235             tracks::StringDimensionBlueprint("mm_event_type"),
236             tracks::StringDimensionBlueprint("mm_event_metric")),
237         kMmEventFnNameBlueprint);
238 
239 inline constexpr auto kPerfCounterBlueprint = tracks::CounterBlueprint(
240     "perf_counter",
241     tracks::UnknownUnitBlueprint(),
242     tracks::DimensionBlueprints(
243         tracks::kCpuDimensionBlueprint,
244         tracks::UintDimensionBlueprint("perf_session_id"),
245         tracks::kNameFromTraceDimensionBlueprint),
246     tracks::DynamicNameBlueprint());
247 
248 inline constexpr auto kGlobalGpuMemoryBlueprint =
249     tracks::CounterBlueprint("gpu_memory",
250                              tracks::kBytesUnitBlueprint,
251                              tracks::DimensionBlueprints(),
252                              tracks::StaticNameBlueprint("GPU Memory"));
253 
254 inline constexpr auto kProcessGpuMemoryBlueprint = tracks::CounterBlueprint(
255     "process_gpu_memory",
256     tracks::kBytesUnitBlueprint,
257     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint),
258     tracks::StaticNameBlueprint("GPU Memory"));
259 
260 inline constexpr auto kProcessMemoryBlueprint = tracks::CounterBlueprint(
261     "process_memory",
262     tracks::UnknownUnitBlueprint(),
263     tracks::DimensionBlueprints(
264         tracks::kProcessDimensionBlueprint,
265         tracks::StringDimensionBlueprint("process_memory_key")),
266     tracks::FnNameBlueprint([](uint32_t, base::StringView key) {
267       return base::StackString<1024>("mem.%.*s", int(key.size()), key.data());
268     }));
269 
270 inline constexpr auto kProcessMemoryThreadFallbackBlueprint =
271     tracks::CounterBlueprint(
272         "process_memory_thread_fallback",
273         tracks::UnknownUnitBlueprint(),
274         tracks::DimensionBlueprints(
275             tracks::kThreadDimensionBlueprint,
276             tracks::StringDimensionBlueprint("process_memory_key")),
277         tracks::FnNameBlueprint([](uint32_t, base::StringView key) {
278           return base::StackString<1024>("mem.%.*s", int(key.size()),
279                                          key.data());
280         }));
281 
282 static constexpr auto kJsonCounterBlueprint = tracks::CounterBlueprint(
283     "json_counter",
284     tracks::UnknownUnitBlueprint(),
285     tracks::DimensionBlueprints(tracks::kProcessDimensionBlueprint,
286                                 tracks::kNameFromTraceDimensionBlueprint),
287     tracks::DynamicNameBlueprint());
288 
289 inline constexpr auto kJsonCounterThreadFallbackBlueprint =
290     tracks::CounterBlueprint(
291         "json_counter_thread_fallback",
292         tracks::UnknownUnitBlueprint(),
293         tracks::DimensionBlueprints(tracks::kThreadDimensionBlueprint,
294                                     tracks::kNameFromTraceDimensionBlueprint),
295         tracks::DynamicNameBlueprint());
296 
297 inline constexpr auto kGpuCounterBlueprint = tracks::CounterBlueprint(
298     "gpu_counter",
299     tracks::DynamicUnitBlueprint(),
300     tracks::DimensionBlueprints(tracks::kGpuDimensionBlueprint,
301                                 tracks::kNameFromTraceDimensionBlueprint),
302     tracks::DynamicNameBlueprint());
303 
304 // End counter blueprints.
305 
306 }  // namespace perfetto::trace_processor::tracks
307 
308 #endif  // SRC_TRACE_PROCESSOR_IMPORTERS_COMMON_TRACKS_COMMON_H_
309