ui: com.android.ProcessState explorer for android.process_state
A page (sidebar 'Process state explorer', route /process_state) for AMS
ProcessStateController snapshots, plus a timeline track so the snapshots are
visible in context.
The explorer is organised as a Winscope-style seek bar over the snapshots, an
interactive graph, and a tabbed bottom panel; the graph/panel split is
vertically draggable.
Seek bar: a tick per snapshot positioned by time, a draggable playhead, and a
quiet device-state line for the current snapshot's GlobalState (awake, top
proc-state, memory level, unlocking/shade, idle-allowlist size, and clickable
home/heavy/previous/dozing-ui pids).
Graph: an SVG process-relationship graph laying processes out in oom-adj
importance columns (left = more important), sized by binding-degree so hubs read
at a glance. Empty tiers are skipped. Service (grey) and content-provider (blue,
dashed) edges run client->server, hidden by default and revealed on hover
(light) / pinned bold on click; arrowheads inherit the edge colour. Zoom/pan via
viewBox with auto-fit until the user adjusts.
Bottom panel tabs:
* Processes - the full process DataGrid for the snapshot.
* <selection> - structured detail for the clicked node or edge, rendered as
flat DataGrids: process state, how-this-adj-was-computed (the ordered
conditions the OomAdjuster applied - adj_compute / adj_step, with a fallback
to the most recent compute at-or-before the snapshot), hosted components,
and inbound/outbound service & content-provider bindings (filtered to the
current snapshot).
* Events - a trace-wide log of the per-process lifecycle MutationEvents from
ProcessStateController (process begin/end, oom-adj recompute, service &
provider bind/unbind, FGS, broadcast dispatch with the intent action,
frozen, hosting/capability/sched-group, instrumentation) with relative
timestamps and a clickable snapshot column; uid-level and global
device-state churn is excluded (it's already in the device-state line).
Clicking a pid anywhere drills into that process; clicking an edge shows its
binding detail (service short-names / provider authorities + connection count).
Selecting a snapshot slice on the timeline track opens a details panel with the
same graph and a horizontally-draggable graph|properties split, plus an
'Open full explorer' button that deep-links to that snapshot
(#!/process_state/<id>).
Change-Id: I42982e5e8efcce4bdc6c0b791c7365a41e474c22
Perfetto is an open-source suite of SDKs, daemons and tools which use tracing to help developers understand the behaviour of complex systems and root-cause functional and performance issues on client and embedded systems.
It is a production-grade tool that is the default tracing system for the Android operating system and the Chromium browser.
Perfetto is not a single tool, but a collection of components that work together:
Perfetto was designed to be a versatile and powerful tracing system for a wide range of use cases.
ftrace, allowing you to visualize scheduling, syscalls, interrupts, and custom kernel tracepoints on a timeline.chrome://tracing. Use it to debug and root-cause issues in the browser, V8, and Blink.We‘ve designed our documentation to guide you to the right information as quickly as possible, whether you’re a newcomer to performance analysis or an experienced developer.
New to tracing? If you're unfamiliar with concepts like tracing and profiling, start here:
Ready to dive in? Our “Getting Started” guide is the main entry point for all users. It will help you find the right tutorials and documentation for your specific needs:
Want the full overview? For a comprehensive look at what Perfetto is, why it's useful, and who uses it, see our main documentation page:
For users interested in the Debian distribution of Perfetto, the official source of truth and packaging efforts are maintained at Debian Perfetto Salsa Repository
Have questions? Need help?
We follow Google's Open Source Community Guidelines.