Android Aflags
This data source is supported only on Android. It requires the /system/bin/aflags tool, which is present on recent Android releases.
The "android.aflags" data source captures snapshots of Android aconfig flags, the configuration system used to manage feature rollout and behavior across the Android platform.
This allows you to record, for any given trace, which feature flags were active on the device and what value they had. It is useful when comparing traces taken across different builds, or when a behavior change is only explainable by an in-flight flag rollout.
Under the hood traced_probes invokes /system/bin/aflags list --format proto, decodes the output, and writes one TracePacket per poll. Periodic polling can be enabled via poll_ms (minimum 1000ms).
UI
At the UI level, aflags are shown as an "Android Aflags" table under the Android tab of the trace info page. If the trace contains multiple snapshots (periodic polling), a dropdown above the table lets you switch between timestamps.

SQL
At the SQL level, aflags data is exposed through the android.aflags standard-library module. Each row in the android_aflags view represents the state of a single flag at a specific timestamp (the ts column).
Below is an example of listing the flags and their current values:
INCLUDE PERFETTO MODULE android.aflags;
select ts, package, name, value, permission
from android_aflags
order by package, name| ts | package | name | value | permission |
|---|---|---|---|---|
| 12345 | perfetto.flags | buffer_clone_preserve_read_iter | enabled | read-only |
| 12345 | perfetto.flags | save_all_traces_in_bugreport | enabled | read-write |
| 12345 | perfetto.flags | track_event_incremental_state_clear_not_destroy | enabled | read-only |
| 12345 | perfetto.flags | use_lockfree_taskrunner | enabled | read-write |
Below is an example of finding flags whose value was overridden from the default (useful for debugging why behavior diverges from a pristine build):
INCLUDE PERFETTO MODULE android.aflags;
select package, name, value, value_picked_from, storage_backend
from android_aflags
where value_picked_from != 'default'| package | name | value | value_picked_from | storage_backend |
|---|---|---|---|---|
| perfetto.flags | save_all_traces_in_bugreport | enabled | server | device_config |
| perfetto.flags | use_lockfree_taskrunner | disabled | local | aconfigd |
If the aflags tool fails at runtime, a per-trace error is recorded in the stats table under the name android_aflags_errors:
select name, severity, source, value, description
from stats
where name = 'android_aflags_errors'| name | severity | source | value | description |
|---|---|---|---|---|
| android_aflags_errors | error | trace | 1 | Errors occurred during the collection of Android aconfig flags by the android.aflags data source. This typically happens if the aflags tool fails or its output is malformed. |
TraceConfig
Android aflags is configured through the AndroidAflagsConfig section of the trace config.
Sample config — one-shot snapshot at trace start:
data_sources: {
config {
name: "android.aflags"
}
}Sample config — periodic polling (each poll costs ~350ms; poll_ms must be >= 1000):
data_sources: {
config {
name: "android.aflags"
android_aflags_config {
poll_ms: 5000
}
}
}