Skip to content

Commit 794569c

Browse files
committed
traced_probes: Add android.aflags data source
This data source captures snapshots of Android aconfig flags. It invokes 'aflags list --format proto' and parses the binary protobuf. The data source supports one-shot capture at the start of the trace or periodic polling. It uses an incremental state to only emit flags that have changed since the last snapshot. The trace format uses raw strings for flag metadata (package, name, etc.) to keep the implementation simple and avoid interning complexity, adding ~120KB per full system snapshot. Test: perfetto_unittests --gtest_filter='AndroidAflagsDataSourceTest.*' Test: record_android_trace with android.aflags data source Change-Id: Icff7ad647df9c332e1e9a1f94b5fc935b19f2a12
1 parent b041e45 commit 794569c

File tree

21 files changed

+3599
-2395
lines changed

21 files changed

+3599
-2395
lines changed

Android.bp

Lines changed: 50 additions & 0 deletions
Large diffs are not rendered by default.

BUILD

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,7 @@ perfetto_cc_library(
969969
":src_kernel_utils_kernel_wakelock_errors",
970970
":src_kernel_utils_syscall_table",
971971
":src_protozero_proto_ring_buffer",
972+
":src_traced_probes_android_aflags_android_aflags",
972973
":src_traced_probes_android_cpu_per_uid_android_cpu_per_uid",
973974
":src_traced_probes_android_game_intervention_list_android_game_intervention_list",
974975
":src_traced_probes_android_kernel_wakelocks_android_kernel_wakelocks",
@@ -4768,6 +4769,15 @@ perfetto_filegroup(
47684769
],
47694770
)
47704771

4772+
# GN target: //src/traced/probes/android_aflags:android_aflags
4773+
perfetto_filegroup(
4774+
name = "src_traced_probes_android_aflags_android_aflags",
4775+
srcs = [
4776+
"src/traced/probes/android_aflags/android_aflags_data_source.cc",
4777+
"src/traced/probes/android_aflags/android_aflags_data_source.h",
4778+
],
4779+
)
4780+
47714781
# GN target: //src/traced/probes/android_cpu_per_uid:android_cpu_per_uid
47724782
perfetto_filegroup(
47734783
name = "src_traced_probes_android_cpu_per_uid_android_cpu_per_uid",
@@ -6214,6 +6224,7 @@ perfetto_cc_protocpp_library(
62146224
perfetto_proto_library(
62156225
name = "protos_perfetto_config_android_protos",
62166226
srcs = [
6227+
"protos/perfetto/config/android/android_aflags_config.proto",
62176228
"protos/perfetto/config/android/android_game_intervention_list_config.proto",
62186229
"protos/perfetto/config/android/android_input_event_config.proto",
62196230
"protos/perfetto/config/android/android_log_config.proto",
@@ -7177,6 +7188,7 @@ perfetto_proto_library(
71777188
perfetto_proto_library(
71787189
name = "protos_perfetto_trace_android_protos",
71797190
srcs = [
7191+
"protos/perfetto/trace/android/android_aflags.proto",
71807192
"protos/perfetto/trace/android/android_game_intervention_list.proto",
71817193
"protos/perfetto/trace/android/android_log.proto",
71827194
"protos/perfetto/trace/android/android_system_property.proto",

include/perfetto/public/protos/config/data_source_config.pzc.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include "perfetto/public/pb_macros.h"
2727

28+
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidAflagsConfig);
2829
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidGameInterventionListConfig);
2930
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidInputEventConfig);
3031
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidLogConfig);
@@ -344,6 +345,11 @@ PERFETTO_PB_FIELD(perfetto_protos_DataSourceConfig,
344345
perfetto_protos_InputMethodConfig,
345346
inputmethod_config,
346347
139);
348+
PERFETTO_PB_FIELD(perfetto_protos_DataSourceConfig,
349+
MSG,
350+
perfetto_protos_AndroidAflagsConfig,
351+
android_aflags_config,
352+
140);
347353
PERFETTO_PB_FIELD(perfetto_protos_DataSourceConfig,
348354
MSG,
349355
perfetto_protos_QnxConfig,

include/perfetto/public/protos/trace/android/android_track_event.pzc.h

Lines changed: 97 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ PERFETTO_PB_MSG_DECL(
4141
perfetto_protos_AndroidSurfaceFlingerWorkload_Summary_Timings_Skia);
4242

4343
PERFETTO_PB_ENUM(perfetto_protos_ReceiverType){
44-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_UNKNOWN) = 0,
45-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RUNTIME) = 1,
46-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_MANIFEST) = 2,
44+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RECEIVER_TYPE_UNKNOWN) = 0,
45+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RECEIVER_TYPE_RUNTIME) = 1,
46+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_RECEIVER_TYPE_MANIFEST) = 2,
4747
};
4848

4949
PERFETTO_PB_ENUM(perfetto_protos_ProcessStartType){
@@ -124,95 +124,120 @@ PERFETTO_PB_ENUM(perfetto_protos_ProcessCapabilityEnum){
124124
};
125125

126126
PERFETTO_PB_ENUM(perfetto_protos_AppExitReasonCode){
127-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_UNKNOWN) = 0,
128-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_EXIT_SELF) = 1,
129-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_SIGNALED) = 2,
130-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_LOW_MEMORY) = 3,
131-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_CRASH) = 4,
132-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_CRASH_NATIVE) = 5,
133-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_ANR) = 6,
134-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_INITIALIZATION_FAILURE) = 7,
135-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_PERMISSION_CHANGE) = 8,
136-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_EXCESSIVE_RESOURCE_USAGE) = 9,
137-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_USER_REQUESTED) = 10,
138-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_USER_STOPPED) = 11,
139-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_DEPENDENCY_DIED) = 12,
140-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_OTHER) = 13,
141-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_FREEZER) = 14,
142-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_PACKAGE_STATE_CHANGE) = 15,
143-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_REASON_PACKAGE_UPDATED) = 16,
127+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_UNKNOWN) = 0,
128+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_EXIT_SELF) = 1,
129+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_SIGNALED) = 2,
130+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_LOW_MEMORY) = 3,
131+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_CRASH) = 4,
132+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_CRASH_NATIVE) = 5,
133+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_ANR) = 6,
134+
PERFETTO_PB_ENUM_ENTRY(
135+
perfetto_protos_APP_EXIT_REASON_INITIALIZATION_FAILURE) = 7,
136+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_PERMISSION_CHANGE) =
137+
8,
138+
PERFETTO_PB_ENUM_ENTRY(
139+
perfetto_protos_APP_EXIT_REASON_EXCESSIVE_RESOURCE_USAGE) = 9,
140+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_USER_REQUESTED) = 10,
141+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_USER_STOPPED) = 11,
142+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_DEPENDENCY_DIED) =
143+
12,
144+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_OTHER) = 13,
145+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_FREEZER) = 14,
146+
PERFETTO_PB_ENUM_ENTRY(
147+
perfetto_protos_APP_EXIT_REASON_PACKAGE_STATE_CHANGE) = 15,
148+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_REASON_PACKAGE_UPDATED) =
149+
16,
144150
};
145151

146152
PERFETTO_PB_ENUM(perfetto_protos_AppExitSubReasonCode){
147-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_UNKNOWN) = 0,
148-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_WAIT_FOR_DEBUGGER) = 1,
149-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_TOO_MANY_CACHED) = 2,
150-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_TOO_MANY_EMPTY) = 3,
151-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_TRIM_EMPTY) = 4,
152-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_LARGE_CACHED) = 5,
153-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_MEMORY_PRESSURE) = 6,
154-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_EXCESSIVE_CPU) = 7,
155-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_SYSTEM_UPDATE_DONE) = 8,
156-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_ALL_FG) = 9,
157-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_ALL_BG_EXCEPT) = 10,
158-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_UID) = 11,
159-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_PID) = 12,
160-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_INVALID_START) = 13,
161-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_INVALID_STATE) = 14,
162-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_IMPERCEPTIBLE) = 15,
163-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_REMOVE_LRU) = 16,
164-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_ISOLATED_NOT_NEEDED) = 17,
165-
PERFETTO_PB_ENUM_ENTRY(
166-
perfetto_protos_SUBREASON_CACHED_IDLE_FORCED_APP_STANDBY) = 18,
167-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_FREEZER_BINDER_IOCTL) = 19,
168-
PERFETTO_PB_ENUM_ENTRY(
169-
perfetto_protos_SUBREASON_FREEZER_BINDER_TRANSACTION) = 20,
170-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_FORCE_STOP) = 21,
171-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_REMOVE_TASK) = 22,
172-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_STOP_APP) = 23,
173-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_KILL_BACKGROUND) = 24,
174-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_PACKAGE_UPDATE) = 25,
175-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_UNDELIVERED_BROADCAST) =
176-
26,
177-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_SDK_SANDBOX_DIED) = 27,
178-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_SDK_SANDBOX_NOT_NEEDED) =
179-
28,
180-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_EXCESSIVE_BINDER_OBJECTS) =
181-
29,
182-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_OOM_KILL) = 30,
183-
PERFETTO_PB_ENUM_ENTRY(
184-
perfetto_protos_SUBREASON_FREEZER_BINDER_ASYNC_FULL) = 31,
185-
PERFETTO_PB_ENUM_ENTRY(
186-
perfetto_protos_SUBREASON_EXCESSIVE_OUTGOING_BROADCASTS_WHILE_CACHED) =
153+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_UNKNOWN) = 0,
154+
PERFETTO_PB_ENUM_ENTRY(
155+
perfetto_protos_APP_EXIT_SUBREASON_WAIT_FOR_DEBUGGER) = 1,
156+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_TOO_MANY_CACHED) =
157+
2,
158+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_TOO_MANY_EMPTY) =
159+
3,
160+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_TRIM_EMPTY) = 4,
161+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_LARGE_CACHED) = 5,
162+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_MEMORY_PRESSURE) =
163+
6,
164+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_CPU) =
165+
7,
166+
PERFETTO_PB_ENUM_ENTRY(
167+
perfetto_protos_APP_EXIT_SUBREASON_SYSTEM_UPDATE_DONE) = 8,
168+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_ALL_FG) = 9,
169+
PERFETTO_PB_ENUM_ENTRY(
170+
perfetto_protos_APP_EXIT_SUBREASON_KILL_ALL_BG_EXCEPT) = 10,
171+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_UID) = 11,
172+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_PID) = 12,
173+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_INVALID_START) =
174+
13,
175+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_INVALID_STATE) =
176+
14,
177+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_IMPERCEPTIBLE) =
178+
15,
179+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_REMOVE_LRU) = 16,
180+
PERFETTO_PB_ENUM_ENTRY(
181+
perfetto_protos_APP_EXIT_SUBREASON_ISOLATED_NOT_NEEDED) = 17,
182+
PERFETTO_PB_ENUM_ENTRY(
183+
perfetto_protos_APP_EXIT_SUBREASON_CACHED_IDLE_FORCED_APP_STANDBY) = 18,
184+
PERFETTO_PB_ENUM_ENTRY(
185+
perfetto_protos_APP_EXIT_SUBREASON_FREEZER_BINDER_IOCTL) = 19,
186+
PERFETTO_PB_ENUM_ENTRY(
187+
perfetto_protos_APP_EXIT_SUBREASON_FREEZER_BINDER_TRANSACTION) = 20,
188+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_FORCE_STOP) = 21,
189+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_REMOVE_TASK) = 22,
190+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_STOP_APP) = 23,
191+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_KILL_BACKGROUND) =
192+
24,
193+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_PACKAGE_UPDATE) =
194+
25,
195+
PERFETTO_PB_ENUM_ENTRY(
196+
perfetto_protos_APP_EXIT_SUBREASON_UNDELIVERED_BROADCAST) = 26,
197+
PERFETTO_PB_ENUM_ENTRY(
198+
perfetto_protos_APP_EXIT_SUBREASON_SDK_SANDBOX_DIED) = 27,
199+
PERFETTO_PB_ENUM_ENTRY(
200+
perfetto_protos_APP_EXIT_SUBREASON_SDK_SANDBOX_NOT_NEEDED) = 28,
201+
PERFETTO_PB_ENUM_ENTRY(
202+
perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_BINDER_OBJECTS) = 29,
203+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_APP_EXIT_SUBREASON_OOM_KILL) = 30,
204+
PERFETTO_PB_ENUM_ENTRY(
205+
perfetto_protos_APP_EXIT_SUBREASON_FREEZER_BINDER_ASYNC_FULL) = 31,
206+
PERFETTO_PB_ENUM_ENTRY(
207+
perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_OUTGOING_BROADCASTS_WHILE_CACHED) =
187208
32,
188-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_SUBREASON_ANR_TYPE_APP_TRIGGERED) =
189-
33,
190209
PERFETTO_PB_ENUM_ENTRY(
191-
perfetto_protos_SUBREASON_ANR_TYPE_BIND_APPLICATION) = 34,
210+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_APP_TRIGGERED) = 33,
211+
PERFETTO_PB_ENUM_ENTRY(
212+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_BIND_APPLICATION) = 34,
192213
PERFETTO_PB_ENUM_ENTRY(
193-
perfetto_protos_SUBREASON_ANR_TYPE_BROADCAST_OF_INTENT) = 35,
214+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_BROADCAST_OF_INTENT) = 35,
194215
PERFETTO_PB_ENUM_ENTRY(
195-
perfetto_protos_SUBREASON_ANR_TYPE_CONTENT_PROVIDER_NOT_RESPONDING) =
216+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_CONTENT_PROVIDER_NOT_RESPONDING) =
196217
36,
197218
PERFETTO_PB_ENUM_ENTRY(
198-
perfetto_protos_SUBREASON_ANR_TYPE_EXECUTING_SERVICE) = 37,
219+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_EXECUTING_SERVICE) = 37,
199220
PERFETTO_PB_ENUM_ENTRY(
200-
perfetto_protos_SUBREASON_ANR_TYPE_FOREGROUND_SHORT_SERVICE_TIMEOUT) =
221+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_FOREGROUND_SHORT_SERVICE_TIMEOUT) =
201222
39,
202223
PERFETTO_PB_ENUM_ENTRY(
203-
perfetto_protos_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT) = 41,
224+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT) =
225+
41,
204226
PERFETTO_PB_ENUM_ENTRY(
205-
perfetto_protos_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT_NO_FOCUSED_WINDOW) =
227+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_INPUT_DISPATCHING_TIMEOUT_NO_FOCUSED_WINDOW) =
206228
42,
207229
PERFETTO_PB_ENUM_ENTRY(
208-
perfetto_protos_SUBREASON_ANR_TYPE_JOB_SERVICE_START) = 45,
230+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_JOB_SERVICE_START) = 45,
209231
PERFETTO_PB_ENUM_ENTRY(
210-
perfetto_protos_SUBREASON_ANR_TYPE_START_FOREGROUND_SERVICE) = 47,
232+
perfetto_protos_APP_EXIT_SUBREASON_ANR_TYPE_START_FOREGROUND_SERVICE) =
233+
47,
211234
PERFETTO_PB_ENUM_ENTRY(
212-
perfetto_protos_SUBREASON_EXCESSIVE_ENQUEUED_BROADCASTS_COUNT) = 49,
235+
perfetto_protos_APP_EXIT_SUBREASON_EXCESSIVE_ENQUEUED_BROADCASTS_COUNT) =
236+
49,
213237
};
214238

215239
PERFETTO_PB_ENUM(perfetto_protos_Importance){
240+
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_UNKNOWN) = 0,
216241
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_FOREGROUND) = 100,
217242
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_FOREGROUND_SERVICE) = 125,
218243
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_IMPORTANCE_TOP_SLEEPING_PRE_28) =
@@ -316,8 +341,6 @@ PERFETTO_PB_ENUM(perfetto_protos_TriggerType){
316341
};
317342

318343
PERFETTO_PB_ENUM(perfetto_protos_OomChangeReasonEnum){
319-
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_UNKNOWN_TO_PROTO) =
320-
-1,
321344
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_NONE) = 0,
322345
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_ACTIVITY) = 1,
323346
PERFETTO_PB_ENUM_ENTRY(perfetto_protos_OOM_ADJ_REASON_FINISH_RECEIVER) = 2,

include/perfetto/public/protos/trace/trace_packet.pzc.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
#include "perfetto/public/pb_macros.h"
2727

28+
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidAflags);
2829
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidCameraFrameEvent);
2930
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidCameraSessionStats);
3031
PERFETTO_PB_MSG_DECL(perfetto_protos_AndroidEnergyEstimationBreakdown);
@@ -93,6 +94,7 @@ PERFETTO_PB_MSG_DECL(perfetto_protos_SysStats);
9394
PERFETTO_PB_MSG_DECL(perfetto_protos_SystemInfo);
9495
PERFETTO_PB_MSG_DECL(perfetto_protos_TestEvent);
9596
PERFETTO_PB_MSG_DECL(perfetto_protos_ThreadDescriptor);
97+
PERFETTO_PB_MSG_DECL(perfetto_protos_TraceAttributes);
9698
PERFETTO_PB_MSG_DECL(perfetto_protos_TraceConfig);
9799
PERFETTO_PB_MSG_DECL(perfetto_protos_TracePacket);
98100
PERFETTO_PB_MSG_DECL(perfetto_protos_TracePacket_ProtoVms);
@@ -390,6 +392,16 @@ PERFETTO_PB_FIELD(perfetto_protos_TracePacket,
390392
perfetto_protos_TracePacket_ProtoVms,
391393
protovms,
392394
125);
395+
PERFETTO_PB_FIELD(perfetto_protos_TracePacket,
396+
MSG,
397+
perfetto_protos_TraceAttributes,
398+
trace_attributes,
399+
126);
400+
PERFETTO_PB_FIELD(perfetto_protos_TracePacket,
401+
MSG,
402+
perfetto_protos_AndroidAflags,
403+
android_aflags,
404+
127);
393405
PERFETTO_PB_FIELD(perfetto_protos_TracePacket,
394406
MSG,
395407
perfetto_protos_ModuleSymbols,

protos/perfetto/config/android/BUILD.gn

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import("../../../../gn/proto_library.gni")
1818
perfetto_proto_library("@TYPE@") {
1919
deps = [ "../../common:@TYPE@" ]
2020
sources = [
21+
"android_aflags_config.proto",
2122
"android_game_intervention_list_config.proto",
2223
"android_input_event_config.proto",
2324
"android_log_config.proto",
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
* Copyright (C) 2026 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+
syntax = "proto2";
18+
19+
package perfetto.protos;
20+
21+
// Options for the android.aflags data source.
22+
// This data source captures snapshots of Android aconfig flags.
23+
// See https://source.android.com/docs/setup/build/feature-flagging/declare-flag
24+
// for more information on aconfig flags.
25+
message AndroidAflagsConfig {
26+
// Frequency of polling. If absent or 0, the state will be recorded once,
27+
// at the start of the trace.
28+
//
29+
// It is recommended to either leave this absent or set it to a large
30+
// value as each invocation of the `aflags` tool can be expensive (approx.
31+
// 350ms). This is required to be > 1000ms if set, to avoid excessive CPU
32+
// usage.
33+
optional uint32 poll_ms = 1;
34+
}

protos/perfetto/config/data_source_config.proto

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ syntax = "proto2";
1818

1919
package perfetto.protos;
2020

21+
import "protos/perfetto/config/android/android_aflags_config.proto";
2122
import "protos/perfetto/config/android/android_game_intervention_list_config.proto";
2223
import "protos/perfetto/config/android/android_input_event_config.proto";
2324
import "protos/perfetto/config/android/android_log_config.proto";
@@ -63,7 +64,7 @@ import "protos/perfetto/config/chrome/histogram_samples.proto";
6364
import "protos/perfetto/config/qnx/qnx_config.proto";
6465

6566
// The configuration that is passed to each data source when starting tracing.
66-
// Next id: 140
67+
// Next id: 141
6768
message DataSourceConfig {
6869
enum SessionInitiator {
6970
SESSION_INITIATOR_UNSPECIFIED = 0;
@@ -301,6 +302,9 @@ message DataSourceConfig {
301302
// Data source name: android.inputmethod
302303
optional InputMethodConfig inputmethod_config = 139 [lazy = true];
303304

305+
// Data source name: android.aflags
306+
optional AndroidAflagsConfig android_aflags_config = 140 [lazy = true];
307+
304308
// Data source name: qnx.kernel
305309
optional QnxConfig qnx_config = 150 [lazy = true];
306310

0 commit comments

Comments
 (0)