public final class TraceProcessor


Kotlin API for Perfetto Trace Processor, which enables SQL querying against the data stored in a Perfetto trace.

This includes synchronous and async trace sections, kernel-level scheduling timing, binder events... If it's displayed in Android Studio system trace or ui.perfetto.dev, it can be queried from this API.

// Collect the duration of all slices named "activityStart" in the trace
val
activityStartDurationNs = TraceProcessor.runServer {
loadTrace(trace) {
query("SELECT dur FROM slice WHERE name LIKE \"activityStart\"").toList {
it.long("dur")
}
}
}

Note that traces generally hold events from multiple apps, services and processes, so it's recommended to filter potentially common trace events to the process you're interested in. See the following example which queries Choreographer#doFrame slices (labelled spans of time) only for a given package name:

query("""
|SELECT
| slice.name,slice.ts,slice.dur
|FROM slice
| INNER JOIN thread_track on slice.track_id = thread_track.id
| INNER JOIN thread USING(utid)
| INNER JOIN process USING(upid)
|WHERE
| slice.name LIKE "
Choreographer#doFrame%" AND
| process.name LIKE "
$packageName"
"""
.trimMargin()
)

See also Perfetto project documentation:

See also
PerfettoTrace

Summary

Nested types

public static class TraceProcessor.Companion
public final class TraceProcessor.Session

Handle to query sql data from a PerfettoTrace.

Public constructors

Public methods

final @NonNull T
<T extends Object> loadTrace(
    @NonNull PerfettoTrace trace,
    @ExtensionFunctionType @NonNull Function1<@NonNull TraceProcessor.Session, @NonNull T> block
)

Loads a PerfettoTrace into the trace processor server to query data out of the trace.

Public constructors

TraceProcessor

Added in 1.4.0-alpha07
@ExperimentalTraceProcessorApi
public TraceProcessor(
    @NonNull ServerLifecycleManager serverLifecycleManager,
    @NonNull TraceProcessor.Tracer tracer,
    @NonNull TraceProcessor.EventCallback eventCallback
)

Public methods

loadTrace

Added in 1.4.0-alpha07
public final @NonNull T <T extends Object> loadTrace(
    @NonNull PerfettoTrace trace,
    @ExtensionFunctionType @NonNull Function1<@NonNull TraceProcessor.Session, @NonNull T> block
)

Loads a PerfettoTrace into the trace processor server to query data out of the trace.