1 /*
2 * Copyright (C) 2018 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 INCLUDE_PERFETTO_EXT_TRACED_SYS_STATS_COUNTERS_H_
18 #define INCLUDE_PERFETTO_EXT_TRACED_SYS_STATS_COUNTERS_H_
19
20 #include "perfetto/ext/base/utils.h"
21 #include "protos/perfetto/common/sys_stats_counters.pbzero.h"
22
23 #include <vector>
24
25 namespace perfetto {
26
27 struct KeyAndId {
28 const char* str;
29 int id;
30 };
31
32 constexpr KeyAndId kMeminfoKeys[] = {
33 {"MemUnspecified", protos::pbzero::MeminfoCounters::MEMINFO_UNSPECIFIED},
34 {"MemTotal", protos::pbzero::MeminfoCounters::MEMINFO_MEM_TOTAL},
35 {"MemFree", protos::pbzero::MeminfoCounters::MEMINFO_MEM_FREE},
36 {"MemAvailable", protos::pbzero::MeminfoCounters::MEMINFO_MEM_AVAILABLE},
37 {"Buffers", protos::pbzero::MeminfoCounters::MEMINFO_BUFFERS},
38 {"Cached", protos::pbzero::MeminfoCounters::MEMINFO_CACHED},
39 {"SwapCached", protos::pbzero::MeminfoCounters::MEMINFO_SWAP_CACHED},
40 {"Active", protos::pbzero::MeminfoCounters::MEMINFO_ACTIVE},
41 {"Inactive", protos::pbzero::MeminfoCounters::MEMINFO_INACTIVE},
42 {"Active(anon)", protos::pbzero::MeminfoCounters::MEMINFO_ACTIVE_ANON},
43 {"Inactive(anon)", protos::pbzero::MeminfoCounters::MEMINFO_INACTIVE_ANON},
44 {"Active(file)", protos::pbzero::MeminfoCounters::MEMINFO_ACTIVE_FILE},
45 {"Inactive(file)", protos::pbzero::MeminfoCounters::MEMINFO_INACTIVE_FILE},
46 {"Unevictable", protos::pbzero::MeminfoCounters::MEMINFO_UNEVICTABLE},
47 {"Mlocked", protos::pbzero::MeminfoCounters::MEMINFO_MLOCKED},
48 {"SwapTotal", protos::pbzero::MeminfoCounters::MEMINFO_SWAP_TOTAL},
49 {"SwapFree", protos::pbzero::MeminfoCounters::MEMINFO_SWAP_FREE},
50 {"Dirty", protos::pbzero::MeminfoCounters::MEMINFO_DIRTY},
51 {"Writeback", protos::pbzero::MeminfoCounters::MEMINFO_WRITEBACK},
52 {"AnonPages", protos::pbzero::MeminfoCounters::MEMINFO_ANON_PAGES},
53 {"Mapped", protos::pbzero::MeminfoCounters::MEMINFO_MAPPED},
54 {"Shmem", protos::pbzero::MeminfoCounters::MEMINFO_SHMEM},
55 {"Slab", protos::pbzero::MeminfoCounters::MEMINFO_SLAB},
56 {"SReclaimable", protos::pbzero::MeminfoCounters::MEMINFO_SLAB_RECLAIMABLE},
57 {"SUnreclaim", protos::pbzero::MeminfoCounters::MEMINFO_SLAB_UNRECLAIMABLE},
58 {"KernelStack", protos::pbzero::MeminfoCounters::MEMINFO_KERNEL_STACK},
59 {"PageTables", protos::pbzero::MeminfoCounters::MEMINFO_PAGE_TABLES},
60 {"CommitLimit", protos::pbzero::MeminfoCounters::MEMINFO_COMMIT_LIMIT},
61 {"Committed_AS", protos::pbzero::MeminfoCounters::MEMINFO_COMMITED_AS},
62 {"VmallocTotal", protos::pbzero::MeminfoCounters::MEMINFO_VMALLOC_TOTAL},
63 {"VmallocUsed", protos::pbzero::MeminfoCounters::MEMINFO_VMALLOC_USED},
64 {"VmallocChunk", protos::pbzero::MeminfoCounters::MEMINFO_VMALLOC_CHUNK},
65 {"CmaTotal", protos::pbzero::MeminfoCounters::MEMINFO_CMA_TOTAL},
66 {"CmaFree", protos::pbzero::MeminfoCounters::MEMINFO_CMA_FREE},
67 {"Gpu", protos::pbzero::MeminfoCounters::MEMINFO_GPU},
68 {"Zram", protos::pbzero::MeminfoCounters::MEMINFO_ZRAM},
69 {"Misc", protos::pbzero::MeminfoCounters::MEMINFO_MISC},
70 {"ION_heap", protos::pbzero::MeminfoCounters::MEMINFO_ION_HEAP},
71 {"ION_heap_pool", protos::pbzero::MeminfoCounters::MEMINFO_ION_HEAP_POOL},
72 };
73
74 const KeyAndId kVmstatKeys[] = {
75 {"VmstatUnspecified", protos::pbzero::VmstatCounters::VMSTAT_UNSPECIFIED},
76 {"nr_free_pages", protos::pbzero::VmstatCounters::VMSTAT_NR_FREE_PAGES},
77 {"nr_alloc_batch", protos::pbzero::VmstatCounters::VMSTAT_NR_ALLOC_BATCH},
78 {"nr_inactive_anon",
79 protos::pbzero::VmstatCounters::VMSTAT_NR_INACTIVE_ANON},
80 {"nr_active_anon", protos::pbzero::VmstatCounters::VMSTAT_NR_ACTIVE_ANON},
81 {"nr_inactive_file",
82 protos::pbzero::VmstatCounters::VMSTAT_NR_INACTIVE_FILE},
83 {"nr_active_file", protos::pbzero::VmstatCounters::VMSTAT_NR_ACTIVE_FILE},
84 {"nr_unevictable", protos::pbzero::VmstatCounters::VMSTAT_NR_UNEVICTABLE},
85 {"nr_mlock", protos::pbzero::VmstatCounters::VMSTAT_NR_MLOCK},
86 {"nr_anon_pages", protos::pbzero::VmstatCounters::VMSTAT_NR_ANON_PAGES},
87 {"nr_mapped", protos::pbzero::VmstatCounters::VMSTAT_NR_MAPPED},
88 {"nr_file_pages", protos::pbzero::VmstatCounters::VMSTAT_NR_FILE_PAGES},
89 {"nr_dirty", protos::pbzero::VmstatCounters::VMSTAT_NR_DIRTY},
90 {"nr_writeback", protos::pbzero::VmstatCounters::VMSTAT_NR_WRITEBACK},
91 {"nr_slab_reclaimable",
92 protos::pbzero::VmstatCounters::VMSTAT_NR_SLAB_RECLAIMABLE},
93 {"nr_slab_unreclaimable",
94 protos::pbzero::VmstatCounters::VMSTAT_NR_SLAB_UNRECLAIMABLE},
95 {"nr_page_table_pages",
96 protos::pbzero::VmstatCounters::VMSTAT_NR_PAGE_TABLE_PAGES},
97 {"nr_kernel_stack", protos::pbzero::VmstatCounters::VMSTAT_NR_KERNEL_STACK},
98 {"nr_overhead", protos::pbzero::VmstatCounters::VMSTAT_NR_OVERHEAD},
99 {"nr_unstable", protos::pbzero::VmstatCounters::VMSTAT_NR_UNSTABLE},
100 {"nr_bounce", protos::pbzero::VmstatCounters::VMSTAT_NR_BOUNCE},
101 {"nr_vmscan_write", protos::pbzero::VmstatCounters::VMSTAT_NR_VMSCAN_WRITE},
102 {"nr_vmscan_immediate_reclaim",
103 protos::pbzero::VmstatCounters::VMSTAT_NR_VMSCAN_IMMEDIATE_RECLAIM},
104 {"nr_writeback_temp",
105 protos::pbzero::VmstatCounters::VMSTAT_NR_WRITEBACK_TEMP},
106 {"nr_isolated_anon",
107 protos::pbzero::VmstatCounters::VMSTAT_NR_ISOLATED_ANON},
108 {"nr_isolated_file",
109 protos::pbzero::VmstatCounters::VMSTAT_NR_ISOLATED_FILE},
110 {"nr_shmem", protos::pbzero::VmstatCounters::VMSTAT_NR_SHMEM},
111 {"nr_dirtied", protos::pbzero::VmstatCounters::VMSTAT_NR_DIRTIED},
112 {"nr_written", protos::pbzero::VmstatCounters::VMSTAT_NR_WRITTEN},
113 {"nr_pages_scanned",
114 protos::pbzero::VmstatCounters::VMSTAT_NR_PAGES_SCANNED},
115 {"workingset_refault",
116 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_REFAULT},
117 {"workingset_activate",
118 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_ACTIVATE},
119 {"workingset_nodereclaim",
120 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_NODERECLAIM},
121 {"nr_anon_transparent_hugepages",
122 protos::pbzero::VmstatCounters::VMSTAT_NR_ANON_TRANSPARENT_HUGEPAGES},
123 {"nr_free_cma", protos::pbzero::VmstatCounters::VMSTAT_NR_FREE_CMA},
124 {"nr_swapcache", protos::pbzero::VmstatCounters::VMSTAT_NR_SWAPCACHE},
125 {"nr_dirty_threshold",
126 protos::pbzero::VmstatCounters::VMSTAT_NR_DIRTY_THRESHOLD},
127 {"nr_dirty_background_threshold",
128 protos::pbzero::VmstatCounters::VMSTAT_NR_DIRTY_BACKGROUND_THRESHOLD},
129 {"pgpgin", protos::pbzero::VmstatCounters::VMSTAT_PGPGIN},
130 {"pgpgout", protos::pbzero::VmstatCounters::VMSTAT_PGPGOUT},
131 {"pgpgoutclean", protos::pbzero::VmstatCounters::VMSTAT_PGPGOUTCLEAN},
132 {"pswpin", protos::pbzero::VmstatCounters::VMSTAT_PSWPIN},
133 {"pswpout", protos::pbzero::VmstatCounters::VMSTAT_PSWPOUT},
134 {"pgalloc_dma", protos::pbzero::VmstatCounters::VMSTAT_PGALLOC_DMA},
135 {"pgalloc_normal", protos::pbzero::VmstatCounters::VMSTAT_PGALLOC_NORMAL},
136 {"pgalloc_movable", protos::pbzero::VmstatCounters::VMSTAT_PGALLOC_MOVABLE},
137 {"pgfree", protos::pbzero::VmstatCounters::VMSTAT_PGFREE},
138 {"pgactivate", protos::pbzero::VmstatCounters::VMSTAT_PGACTIVATE},
139 {"pgdeactivate", protos::pbzero::VmstatCounters::VMSTAT_PGDEACTIVATE},
140 {"pgfault", protos::pbzero::VmstatCounters::VMSTAT_PGFAULT},
141 {"pgmajfault", protos::pbzero::VmstatCounters::VMSTAT_PGMAJFAULT},
142 {"pgrefill_dma", protos::pbzero::VmstatCounters::VMSTAT_PGREFILL_DMA},
143 {"pgrefill_normal", protos::pbzero::VmstatCounters::VMSTAT_PGREFILL_NORMAL},
144 {"pgrefill_movable",
145 protos::pbzero::VmstatCounters::VMSTAT_PGREFILL_MOVABLE},
146 {"pgsteal_kswapd_dma",
147 protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_KSWAPD_DMA},
148 {"pgsteal_kswapd_normal",
149 protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_KSWAPD_NORMAL},
150 {"pgsteal_kswapd_movable",
151 protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_KSWAPD_MOVABLE},
152 {"pgsteal_direct_dma",
153 protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_DIRECT_DMA},
154 {"pgsteal_direct_normal",
155 protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_DIRECT_NORMAL},
156 {"pgsteal_direct_movable",
157 protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_DIRECT_MOVABLE},
158 {"pgscan_kswapd_dma",
159 protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_KSWAPD_DMA},
160 {"pgscan_kswapd_normal",
161 protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_KSWAPD_NORMAL},
162 {"pgscan_kswapd_movable",
163 protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_KSWAPD_MOVABLE},
164 {"pgscan_direct_dma",
165 protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_DIRECT_DMA},
166 {"pgscan_direct_normal",
167 protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_DIRECT_NORMAL},
168 {"pgscan_direct_movable",
169 protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_DIRECT_MOVABLE},
170 {"pgscan_direct_throttle",
171 protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_DIRECT_THROTTLE},
172 {"pginodesteal", protos::pbzero::VmstatCounters::VMSTAT_PGINODESTEAL},
173 {"slabs_scanned", protos::pbzero::VmstatCounters::VMSTAT_SLABS_SCANNED},
174 {"kswapd_inodesteal",
175 protos::pbzero::VmstatCounters::VMSTAT_KSWAPD_INODESTEAL},
176 {"kswapd_low_wmark_hit_quickly",
177 protos::pbzero::VmstatCounters::VMSTAT_KSWAPD_LOW_WMARK_HIT_QUICKLY},
178 {"kswapd_high_wmark_hit_quickly",
179 protos::pbzero::VmstatCounters::VMSTAT_KSWAPD_HIGH_WMARK_HIT_QUICKLY},
180 {"pageoutrun", protos::pbzero::VmstatCounters::VMSTAT_PAGEOUTRUN},
181 {"allocstall", protos::pbzero::VmstatCounters::VMSTAT_ALLOCSTALL},
182 {"pgrotated", protos::pbzero::VmstatCounters::VMSTAT_PGROTATED},
183 {"drop_pagecache", protos::pbzero::VmstatCounters::VMSTAT_DROP_PAGECACHE},
184 {"drop_slab", protos::pbzero::VmstatCounters::VMSTAT_DROP_SLAB},
185 {"pgmigrate_success",
186 protos::pbzero::VmstatCounters::VMSTAT_PGMIGRATE_SUCCESS},
187 {"pgmigrate_fail", protos::pbzero::VmstatCounters::VMSTAT_PGMIGRATE_FAIL},
188 {"compact_migrate_scanned",
189 protos::pbzero::VmstatCounters::VMSTAT_COMPACT_MIGRATE_SCANNED},
190 {"compact_free_scanned",
191 protos::pbzero::VmstatCounters::VMSTAT_COMPACT_FREE_SCANNED},
192 {"compact_isolated",
193 protos::pbzero::VmstatCounters::VMSTAT_COMPACT_ISOLATED},
194 {"compact_stall", protos::pbzero::VmstatCounters::VMSTAT_COMPACT_STALL},
195 {"compact_fail", protos::pbzero::VmstatCounters::VMSTAT_COMPACT_FAIL},
196 {"compact_success", protos::pbzero::VmstatCounters::VMSTAT_COMPACT_SUCCESS},
197 {"compact_daemon_wake",
198 protos::pbzero::VmstatCounters::VMSTAT_COMPACT_DAEMON_WAKE},
199 {"unevictable_pgs_culled",
200 protos::pbzero::VmstatCounters::VMSTAT_UNEVICTABLE_PGS_CULLED},
201 {"unevictable_pgs_scanned",
202 protos::pbzero::VmstatCounters::VMSTAT_UNEVICTABLE_PGS_SCANNED},
203 {"unevictable_pgs_rescued",
204 protos::pbzero::VmstatCounters::VMSTAT_UNEVICTABLE_PGS_RESCUED},
205 {"unevictable_pgs_mlocked",
206 protos::pbzero::VmstatCounters::VMSTAT_UNEVICTABLE_PGS_MLOCKED},
207 {"unevictable_pgs_munlocked",
208 protos::pbzero::VmstatCounters::VMSTAT_UNEVICTABLE_PGS_MUNLOCKED},
209 {"unevictable_pgs_cleared",
210 protos::pbzero::VmstatCounters::VMSTAT_UNEVICTABLE_PGS_CLEARED},
211 {"unevictable_pgs_stranded",
212 protos::pbzero::VmstatCounters::VMSTAT_UNEVICTABLE_PGS_STRANDED},
213 {"nr_zspages", protos::pbzero::VmstatCounters::VMSTAT_NR_ZSPAGES},
214 {"nr_ion_heap", protos::pbzero::VmstatCounters::VMSTAT_NR_ION_HEAP},
215 {"nr_gpu_heap", protos::pbzero::VmstatCounters::VMSTAT_NR_GPU_HEAP},
216 {"allocstall_dma", protos::pbzero::VmstatCounters::VMSTAT_ALLOCSTALL_DMA},
217 {"allocstall_movable",
218 protos::pbzero::VmstatCounters::VMSTAT_ALLOCSTALL_MOVABLE},
219 {"allocstall_normal",
220 protos::pbzero::VmstatCounters::VMSTAT_ALLOCSTALL_NORMAL},
221 {"compact_daemon_free_scanned",
222 protos::pbzero::VmstatCounters::VMSTAT_COMPACT_DAEMON_FREE_SCANNED},
223 {"compact_daemon_migrate_scanned",
224 protos::pbzero::VmstatCounters::VMSTAT_COMPACT_DAEMON_MIGRATE_SCANNED},
225 {"nr_fastrpc", protos::pbzero::VmstatCounters::VMSTAT_NR_FASTRPC},
226 {"nr_indirectly_reclaimable",
227 protos::pbzero::VmstatCounters::VMSTAT_NR_INDIRECTLY_RECLAIMABLE},
228 {"nr_ion_heap_pool",
229 protos::pbzero::VmstatCounters::VMSTAT_NR_ION_HEAP_POOL},
230 {"nr_kernel_misc_reclaimable",
231 protos::pbzero::VmstatCounters::VMSTAT_NR_KERNEL_MISC_RECLAIMABLE},
232 {"nr_shadow_call_stack_bytes",
233 protos::pbzero::VmstatCounters::VMSTAT_NR_SHADOW_CALL_STACK_BYTES},
234 {"nr_shmem_hugepages",
235 protos::pbzero::VmstatCounters::VMSTAT_NR_SHMEM_HUGEPAGES},
236 {"nr_shmem_pmdmapped",
237 protos::pbzero::VmstatCounters::VMSTAT_NR_SHMEM_PMDMAPPED},
238 {"nr_unreclaimable_pages",
239 protos::pbzero::VmstatCounters::VMSTAT_NR_UNRECLAIMABLE_PAGES},
240 {"nr_zone_active_anon",
241 protos::pbzero::VmstatCounters::VMSTAT_NR_ZONE_ACTIVE_ANON},
242 {"nr_zone_active_file",
243 protos::pbzero::VmstatCounters::VMSTAT_NR_ZONE_ACTIVE_FILE},
244 {"nr_zone_inactive_anon",
245 protos::pbzero::VmstatCounters::VMSTAT_NR_ZONE_INACTIVE_ANON},
246 {"nr_zone_inactive_file",
247 protos::pbzero::VmstatCounters::VMSTAT_NR_ZONE_INACTIVE_FILE},
248 {"nr_zone_unevictable",
249 protos::pbzero::VmstatCounters::VMSTAT_NR_ZONE_UNEVICTABLE},
250 {"nr_zone_write_pending",
251 protos::pbzero::VmstatCounters::VMSTAT_NR_ZONE_WRITE_PENDING},
252 {"oom_kill", protos::pbzero::VmstatCounters::VMSTAT_OOM_KILL},
253 {"pglazyfree", protos::pbzero::VmstatCounters::VMSTAT_PGLAZYFREE},
254 {"pglazyfreed", protos::pbzero::VmstatCounters::VMSTAT_PGLAZYFREED},
255 {"pgrefill", protos::pbzero::VmstatCounters::VMSTAT_PGREFILL},
256 {"pgscan_direct", protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_DIRECT},
257 {"pgscan_kswapd", protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_KSWAPD},
258 {"pgskip_dma", protos::pbzero::VmstatCounters::VMSTAT_PGSKIP_DMA},
259 {"pgskip_movable", protos::pbzero::VmstatCounters::VMSTAT_PGSKIP_MOVABLE},
260 {"pgskip_normal", protos::pbzero::VmstatCounters::VMSTAT_PGSKIP_NORMAL},
261 {"pgsteal_direct", protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_DIRECT},
262 {"pgsteal_kswapd", protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_KSWAPD},
263 {"swap_ra_hit", protos::pbzero::VmstatCounters::VMSTAT_SWAP_RA_HIT},
264 {"swap_ra", protos::pbzero::VmstatCounters::VMSTAT_SWAP_RA},
265 {"workingset_restore",
266 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_RESTORE},
267 {"allocstall_device",
268 protos::pbzero::VmstatCounters::VMSTAT_ALLOCSTALL_DEVICE},
269 {"allocstall_dma32",
270 protos::pbzero::VmstatCounters::VMSTAT_ALLOCSTALL_DMA32},
271 {"balloon_deflate", protos::pbzero::VmstatCounters::VMSTAT_BALLOON_DEFLATE},
272 {"balloon_inflate", protos::pbzero::VmstatCounters::VMSTAT_BALLOON_INFLATE},
273 {"balloon_migrate", protos::pbzero::VmstatCounters::VMSTAT_BALLOON_MIGRATE},
274 {"cma_alloc_fail", protos::pbzero::VmstatCounters::VMSTAT_CMA_ALLOC_FAIL},
275 {"cma_alloc_success",
276 protos::pbzero::VmstatCounters::VMSTAT_CMA_ALLOC_SUCCESS},
277 {"nr_file_hugepages",
278 protos::pbzero::VmstatCounters::VMSTAT_NR_FILE_HUGEPAGES},
279 {"nr_file_pmdmapped",
280 protos::pbzero::VmstatCounters::VMSTAT_NR_FILE_PMDMAPPED},
281 {"nr_foll_pin_acquired",
282 protos::pbzero::VmstatCounters::VMSTAT_NR_FOLL_PIN_ACQUIRED},
283 {"nr_foll_pin_released",
284 protos::pbzero::VmstatCounters::VMSTAT_NR_FOLL_PIN_RELEASED},
285 {"nr_sec_page_table_pages",
286 protos::pbzero::VmstatCounters::VMSTAT_NR_SEC_PAGE_TABLE_PAGES},
287 {"nr_shadow_call_stack",
288 protos::pbzero::VmstatCounters::VMSTAT_NR_SHADOW_CALL_STACK},
289 {"nr_swapcached", protos::pbzero::VmstatCounters::VMSTAT_NR_SWAPCACHED},
290 {"nr_throttled_written",
291 protos::pbzero::VmstatCounters::VMSTAT_NR_THROTTLED_WRITTEN},
292 {"pgalloc_device", protos::pbzero::VmstatCounters::VMSTAT_PGALLOC_DEVICE},
293 {"pgalloc_dma32", protos::pbzero::VmstatCounters::VMSTAT_PGALLOC_DMA32},
294 {"pgdemote_direct", protos::pbzero::VmstatCounters::VMSTAT_PGDEMOTE_DIRECT},
295 {"pgdemote_kswapd", protos::pbzero::VmstatCounters::VMSTAT_PGDEMOTE_KSWAPD},
296 {"pgreuse", protos::pbzero::VmstatCounters::VMSTAT_PGREUSE},
297 {"pgscan_anon", protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_ANON},
298 {"pgscan_file", protos::pbzero::VmstatCounters::VMSTAT_PGSCAN_FILE},
299 {"pgskip_device", protos::pbzero::VmstatCounters::VMSTAT_PGSKIP_DEVICE},
300 {"pgskip_dma32", protos::pbzero::VmstatCounters::VMSTAT_PGSKIP_DMA32},
301 {"pgsteal_anon", protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_ANON},
302 {"pgsteal_file", protos::pbzero::VmstatCounters::VMSTAT_PGSTEAL_FILE},
303 {"thp_collapse_alloc",
304 protos::pbzero::VmstatCounters::VMSTAT_THP_COLLAPSE_ALLOC},
305 {"thp_collapse_alloc_failed",
306 protos::pbzero::VmstatCounters::VMSTAT_THP_COLLAPSE_ALLOC_FAILED},
307 {"thp_deferred_split_page",
308 protos::pbzero::VmstatCounters::VMSTAT_THP_DEFERRED_SPLIT_PAGE},
309 {"thp_fault_alloc", protos::pbzero::VmstatCounters::VMSTAT_THP_FAULT_ALLOC},
310 {"thp_fault_fallback",
311 protos::pbzero::VmstatCounters::VMSTAT_THP_FAULT_FALLBACK},
312 {"thp_fault_fallback_charge",
313 protos::pbzero::VmstatCounters::VMSTAT_THP_FAULT_FALLBACK_CHARGE},
314 {"thp_file_alloc", protos::pbzero::VmstatCounters::VMSTAT_THP_FILE_ALLOC},
315 {"thp_file_fallback",
316 protos::pbzero::VmstatCounters::VMSTAT_THP_FILE_FALLBACK},
317 {"thp_file_fallback_charge",
318 protos::pbzero::VmstatCounters::VMSTAT_THP_FILE_FALLBACK_CHARGE},
319 {"thp_file_mapped", protos::pbzero::VmstatCounters::VMSTAT_THP_FILE_MAPPED},
320 {"thp_migration_fail",
321 protos::pbzero::VmstatCounters::VMSTAT_THP_MIGRATION_FAIL},
322 {"thp_migration_split",
323 protos::pbzero::VmstatCounters::VMSTAT_THP_MIGRATION_SPLIT},
324 {"thp_migration_success",
325 protos::pbzero::VmstatCounters::VMSTAT_THP_MIGRATION_SUCCESS},
326 {"thp_scan_exceed_none_pte",
327 protos::pbzero::VmstatCounters::VMSTAT_THP_SCAN_EXCEED_NONE_PTE},
328 {"thp_scan_exceed_share_pte",
329 protos::pbzero::VmstatCounters::VMSTAT_THP_SCAN_EXCEED_SHARE_PTE},
330 {"thp_scan_exceed_swap_pte",
331 protos::pbzero::VmstatCounters::VMSTAT_THP_SCAN_EXCEED_SWAP_PTE},
332 {"thp_split_page", protos::pbzero::VmstatCounters::VMSTAT_THP_SPLIT_PAGE},
333 {"thp_split_page_failed",
334 protos::pbzero::VmstatCounters::VMSTAT_THP_SPLIT_PAGE_FAILED},
335 {"thp_split_pmd", protos::pbzero::VmstatCounters::VMSTAT_THP_SPLIT_PMD},
336 {"thp_swpout", protos::pbzero::VmstatCounters::VMSTAT_THP_SWPOUT},
337 {"thp_swpout_fallback",
338 protos::pbzero::VmstatCounters::VMSTAT_THP_SWPOUT_FALLBACK},
339 {"thp_zero_page_alloc",
340 protos::pbzero::VmstatCounters::VMSTAT_THP_ZERO_PAGE_ALLOC},
341 {"thp_zero_page_alloc_failed",
342 protos::pbzero::VmstatCounters::VMSTAT_THP_ZERO_PAGE_ALLOC_FAILED},
343 {"vma_lock_abort", protos::pbzero::VmstatCounters::VMSTAT_VMA_LOCK_ABORT},
344 {"vma_lock_miss", protos::pbzero::VmstatCounters::VMSTAT_VMA_LOCK_MISS},
345 {"vma_lock_retry", protos::pbzero::VmstatCounters::VMSTAT_VMA_LOCK_RETRY},
346 {"vma_lock_success",
347 protos::pbzero::VmstatCounters::VMSTAT_VMA_LOCK_SUCCESS},
348 {"workingset_activate_anon",
349 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_ACTIVATE_ANON},
350 {"workingset_activate_file",
351 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_ACTIVATE_FILE},
352 {"workingset_nodes",
353 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_NODES},
354 {"workingset_refault_anon",
355 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_REFAULT_ANON},
356 {"workingset_refault_file",
357 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_REFAULT_FILE},
358 {"workingset_restore_anon",
359 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_RESTORE_ANON},
360 {"workingset_restore_file",
361 protos::pbzero::VmstatCounters::VMSTAT_WORKINGSET_RESTORE_FILE},
362 };
363
364 // Returns a lookup table of meminfo counter names addressable by counter id.
BuildMeminfoCounterNames()365 inline std::vector<const char*> BuildMeminfoCounterNames() {
366 int max_id = 0;
367 for (size_t i = 0; i < base::ArraySize(kMeminfoKeys); i++)
368 max_id = std::max(max_id, kMeminfoKeys[i].id);
369 std::vector<const char*> v;
370 v.resize(static_cast<size_t>(max_id) + 1);
371 for (size_t i = 0; i < base::ArraySize(kMeminfoKeys); i++)
372 v[static_cast<size_t>(kMeminfoKeys[i].id)] = kMeminfoKeys[i].str;
373 return v;
374 }
375
BuildVmstatCounterNames()376 inline std::vector<const char*> BuildVmstatCounterNames() {
377 int max_id = 0;
378 for (size_t i = 0; i < base::ArraySize(kVmstatKeys); i++)
379 max_id = std::max(max_id, kVmstatKeys[i].id);
380 std::vector<const char*> v;
381 v.resize(static_cast<size_t>(max_id) + 1);
382 for (size_t i = 0; i < base::ArraySize(kVmstatKeys); i++)
383 v[static_cast<size_t>(kVmstatKeys[i].id)] = kVmstatKeys[i].str;
384 return v;
385 }
386
387 } // namespace perfetto
388
389 #endif // INCLUDE_PERFETTO_EXT_TRACED_SYS_STATS_COUNTERS_H_
390