# ATrace: Android system and app trace events

On Android, native and managed apps can inject custom slices and counter trace
points into the trace. This is possible through the following:

* Java/Kotlin apps (SDK): `android.os.Trace`.
  See https://developer.android.com/reference/android/os/Trace.

* Native processes (NDK): `ATrace_beginSection() / ATrace_setCounter()` defined
  in `<trace.h>`. See https://developer.android.com/ndk/reference/group/tracing.

* Android internal processes: `ATRACE_BEGIN()/ATRACE_INT()` defined in
  [`libcutils/trace.h`][libcutils].

This API has been available since Android 4.3 (API level 18) and predates
Perfetto. All these annotations, which internally are all routed through the
internal libcutils API, are and will continue to be supported by Perfetto.

There are two types of atrace events: System and App events.

**System events**: are emitted only by Android internals using libcutils.
These events are grouped in categories (also known as _tags_), e.g.
"am" (ActivityManager), "pm" (PackageManager).
For a full list of categories see the _Record new trace_ page of the
[Perfetto UI](https://ui.perfetto.dev).

Categories can be used to enable group of events across several processes,
without having to worry about which particular system process emits them.

**App events**: have the same semantics of system events. Unlike system events,
however, they don't have any tag-filtering capability (all app events share the
same tag `ATRACE_TAG_APP`) but can be enabled on a per-app basis.

See the [TraceConfig](#traceconfig) section below for instructions on how to
enable both system and app events.

#### Instrumentation overhead

ATrace instrumentation a non-negligible cost of 1-10us per event.
This is because each event involves a stringification, a JNI call if coming from
a managed execution environment, and a user-space <-> kernel-space roundtrip to
write the marker into `/sys/kernel/debug/tracing/trace_marker` (which is the
most expensive part).

Our team is looking into a migration path for Android, in light of the newly
introduced [Tracing SDK](/docs/instrumentation/tracing-sdk.md). At the moment
the advice is to keep using the existing ATrace API on Android.

[libcutils]: https://cs.android.com/android/platform/superproject/+/main:system/core/libcutils/include/cutils/trace.h?q=f:trace%20libcutils

## UI

At the UI level, these functions create slices and counters within the scope of
a process track group, as follows:

![](/docs/images/atrace-slices.png "ATrace slices in the UI")

## SQL

At the SQL level, ATrace events are available in the standard `slice` and
`counter` tables, together with other counters and slices coming from other
data sources.

### Slices

```sql
select s.ts, t.name as thread_name, t.tid, s.name as slice_name, s.dur
from slice as s left join thread_track as trk on s.track_id = trk.id
left join thread as t on trk.utid = t.utid
```

ts | thread_name | tid | slice_name | dur
---|-------------|-----|------------|----
261190068051612 | android.anim | 1317 | dequeueBuffer | 623021
261190068636404 | android.anim | 1317 | importBuffer | 30312
261190068687289 | android.anim | 1317 | lockAsync | 2269428
261190068693852 | android.anim | 1317 | LockBuffer | 2255313
261190068696300 | android.anim | 1317 | MapBuffer | 36302
261190068734529 | android.anim | 1317 | CleanBuffer | 2211198

### Counters

```sql
select ts, p.name as process_name, p.pid, t.name as counter_name, c.value
from counter as c left join process_counter_track as t on c.track_id = t.id
left join process as p on t.upid = p.upid
```

ts | process_name | pid | counter_name | value
---|--------------|-----|--------------|------
261193227069635 | com.android.systemui | 1664 | GPU completion | 0
261193268649379 | com.android.systemui | 1664 | GPU completion | 1
261193269787139 | com.android.systemui | 1664 | HWC release | 1
261193270330890 | com.android.systemui | 1664 | GPU completion | 0
261193271282244 | com.android.systemui | 1664 | GPU completion | 1
261193277112817 | com.android.systemui | 1664 | HWC release | 0

## TraceConfig

```protobuf
buffers {
  size_kb: 102400
  fill_policy: RING_BUFFER
}

data_sources {
  config {
    name: "linux.ftrace"
    ftrace_config {
      # Enables specific system events tags.
      atrace_categories: "am"
      atrace_categories: "pm"

      # Enables events for a specific app.
      atrace_apps: "com.google.android.apps.docs"

      # Enables all events for all apps.
      atrace_apps: "*"
    }
  }
}
```
