xref: /aosp_15_r20/external/perfetto/docs/README.md (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker# Perfetto - System profiling, app tracing and trace analysis
2*6dbdd20aSAndroid Build Coastguard Worker
3*6dbdd20aSAndroid Build Coastguard WorkerPerfetto is a production-grade open-source stack for performance
4*6dbdd20aSAndroid Build Coastguard Workerinstrumentation and trace analysis. It offers services and libraries for
5*6dbdd20aSAndroid Build Coastguard Workerrecording system-level and app-level traces, native + java heap profiling, a
6*6dbdd20aSAndroid Build Coastguard Workerlibrary for analyzing traces using SQL and a web-based UI to visualize and
7*6dbdd20aSAndroid Build Coastguard Workerexplore multi-GB traces.
8*6dbdd20aSAndroid Build Coastguard Worker
9*6dbdd20aSAndroid Build Coastguard Worker![Perfetto stack](/docs/images/perfetto-stack.svg)
10*6dbdd20aSAndroid Build Coastguard Worker
11*6dbdd20aSAndroid Build Coastguard Worker## Recording traces
12*6dbdd20aSAndroid Build Coastguard Worker
13*6dbdd20aSAndroid Build Coastguard WorkerAt its core, Perfetto introduces a novel userspace-to-userspace
14*6dbdd20aSAndroid Build Coastguard Worker[tracing protocol](/docs/design-docs/api-and-abi.md#tracing-protocol-abi) based
15*6dbdd20aSAndroid Build Coastguard Workeron direct protobuf serialization onto a shared memory buffer. The tracing
16*6dbdd20aSAndroid Build Coastguard Workerprotocol is used both internally for the built-in data sources and exposed to
17*6dbdd20aSAndroid Build Coastguard WorkerC++ apps through the [Tracing SDK](/docs/instrumentation/tracing-sdk.md) and the
18*6dbdd20aSAndroid Build Coastguard Worker[Track Event Library](/docs/instrumentation/track-events.md).
19*6dbdd20aSAndroid Build Coastguard Worker
20*6dbdd20aSAndroid Build Coastguard WorkerThis new tracing protocol allows dynamic configuration of all aspects of tracing
21*6dbdd20aSAndroid Build Coastguard Workerthrough an extensible protobuf-based capability advertisement and data source
22*6dbdd20aSAndroid Build Coastguard Workerconfiguration mechanism (see
23*6dbdd20aSAndroid Build Coastguard Worker[Trace configuration docs](/docs/concepts/config.md)).
24*6dbdd20aSAndroid Build Coastguard WorkerDifferent data sources can be multiplexed onto different subsets of
25*6dbdd20aSAndroid Build Coastguard Workeruser-defined buffers, allowing also streaming of
26*6dbdd20aSAndroid Build Coastguard Worker[arbitrarily long traces](/docs/concepts/config.md#long-traces) into the
27*6dbdd20aSAndroid Build Coastguard Workerfilesystem.
28*6dbdd20aSAndroid Build Coastguard Worker
29*6dbdd20aSAndroid Build Coastguard Worker### System-wide tracing on Android and Linux
30*6dbdd20aSAndroid Build Coastguard Worker
31*6dbdd20aSAndroid Build Coastguard WorkerOn Linux and Android, Perfetto bundles a number of data sources that are able to
32*6dbdd20aSAndroid Build Coastguard Workergather detailed performance data from different system interfaces. For the full
33*6dbdd20aSAndroid Build Coastguard Workersets and details see the _Data Sources_ section of the documentation. Some
34*6dbdd20aSAndroid Build Coastguard Workerexamples:
35*6dbdd20aSAndroid Build Coastguard Worker
36*6dbdd20aSAndroid Build Coastguard Worker* [Kernel tracing](/docs/data-sources/cpu-scheduling.md): Perfetto integrates
37*6dbdd20aSAndroid Build Coastguard Worker  with [Linux's ftrace][ftrace] and allows to record kernel events (e.g
38*6dbdd20aSAndroid Build Coastguard Worker  scheduling events, syscalls) into the trace.
39*6dbdd20aSAndroid Build Coastguard Worker
40*6dbdd20aSAndroid Build Coastguard Worker* [/proc and /sys pollers](/docs/data-sources/memory-counters.md), which allow
41*6dbdd20aSAndroid Build Coastguard Worker  to sample the state of process-wide or system-wide cpu and memory counters
42*6dbdd20aSAndroid Build Coastguard Worker  over time.
43*6dbdd20aSAndroid Build Coastguard Worker
44*6dbdd20aSAndroid Build Coastguard Worker* Integration with Android HALs modules for recording [battery and energy-usage
45*6dbdd20aSAndroid Build Coastguard Worker  counters](/docs/data-sources/battery-counters.md).
46*6dbdd20aSAndroid Build Coastguard Worker
47*6dbdd20aSAndroid Build Coastguard Worker* [Native heap profiling](/docs/data-sources/native-heap-profiler.md): a
48*6dbdd20aSAndroid Build Coastguard Worker  low-overhead heap profiler for hooking malloc/free/new/delete and associating
49*6dbdd20aSAndroid Build Coastguard Worker  memory to call-stacks, based on out-of-process unwinding, configurable
50*6dbdd20aSAndroid Build Coastguard Worker  sampling, attachable to already running processes.
51*6dbdd20aSAndroid Build Coastguard Worker
52*6dbdd20aSAndroid Build Coastguard Worker* Capturing [Java heap dumps](/docs/data-sources/java-heap-profiler.md) with an
53*6dbdd20aSAndroid Build Coastguard Worker  out-of-process profiler tightly integrated with the Android RunTime that
54*6dbdd20aSAndroid Build Coastguard Worker  allows to get full snapshots of the managed heap retention graph (types,
55*6dbdd20aSAndroid Build Coastguard Worker  field names, retained size and references to other objects) without, however,
56*6dbdd20aSAndroid Build Coastguard Worker  dumping the full heap contents (strings and bitmaps) and hence reducing the
57*6dbdd20aSAndroid Build Coastguard Worker  serialization time and output file size.
58*6dbdd20aSAndroid Build Coastguard Worker
59*6dbdd20aSAndroid Build Coastguard WorkerOn Android, Perfetto is the next-generation system tracing system and replaces
60*6dbdd20aSAndroid Build Coastguard Workerthe chromium-based systrace.
61*6dbdd20aSAndroid Build Coastguard Worker[ATrace-based instrumentation](/docs/data-sources/atrace.md) remains fully
62*6dbdd20aSAndroid Build Coastguard Workersupported.
63*6dbdd20aSAndroid Build Coastguard WorkerSee [Android developer docs](https://developer.android.com/topic/performance/tracing)
64*6dbdd20aSAndroid Build Coastguard Workerfor more details.
65*6dbdd20aSAndroid Build Coastguard Worker
66*6dbdd20aSAndroid Build Coastguard Worker### Tracing SDK and user-space instrumentation
67*6dbdd20aSAndroid Build Coastguard Worker
68*6dbdd20aSAndroid Build Coastguard WorkerThe [Perfetto Tracing SDK](/docs/instrumentation/tracing-sdk.md) enables C++
69*6dbdd20aSAndroid Build Coastguard Workerdevelopers to enrich traces with app-specific trace points. You can choose
70*6dbdd20aSAndroid Build Coastguard Workerbetween the flexibility of defining your own strongly-typed events and creating
71*6dbdd20aSAndroid Build Coastguard Workercustom data sources or using the easier-to-use
72*6dbdd20aSAndroid Build Coastguard Worker[Track Event Library](/docs/instrumentation/track-events.md) which allows to
73*6dbdd20aSAndroid Build Coastguard Workereasily create time-bounded slices, counters and time markers using annotations
74*6dbdd20aSAndroid Build Coastguard Workerof the form `TRACE_EVENT("category", "event_name", "x", "str", "y", 42)`.
75*6dbdd20aSAndroid Build Coastguard Worker
76*6dbdd20aSAndroid Build Coastguard WorkerThe SDK is designed for tracing of multi-process systems and multi-threaded
77*6dbdd20aSAndroid Build Coastguard Workerprocesses. It is based on [ProtoZero](/docs/design-docs/protozero.md), a library
78*6dbdd20aSAndroid Build Coastguard Workerfor direct writing of protobuf events on thread-local shared memory buffers.
79*6dbdd20aSAndroid Build Coastguard Worker
80*6dbdd20aSAndroid Build Coastguard WorkerThe same code can work both in fully-in-process mode, hosting an instance of the
81*6dbdd20aSAndroid Build Coastguard WorkerPerfetto tracing service on a dedicated thread, or in _system mode_, connecting
82*6dbdd20aSAndroid Build Coastguard Workerto the Linux/Android tracing daemon through a UNIX socket, allowing to combine
83*6dbdd20aSAndroid Build Coastguard Workerapp-specific instrumentation points with system-wide tracing events.
84*6dbdd20aSAndroid Build Coastguard Worker
85*6dbdd20aSAndroid Build Coastguard WorkerThe SDK is based on portable C++17 code [tested](/docs/contributing/testing.md)
86*6dbdd20aSAndroid Build Coastguard Workerwith the major C++ sanitizers (ASan, TSan, MSan, LSan). It doesn't rely on
87*6dbdd20aSAndroid Build Coastguard Workerrun-time code modifications or compiler plugins.
88*6dbdd20aSAndroid Build Coastguard Worker
89*6dbdd20aSAndroid Build Coastguard Worker### Tracing in Chromium
90*6dbdd20aSAndroid Build Coastguard Worker
91*6dbdd20aSAndroid Build Coastguard WorkerPerfetto has been designed from the grounds to replace the internals of the
92*6dbdd20aSAndroid Build Coastguard Worker[chrome://tracing infrastructure][chrome-tracing]. Tracing in Chromium and its
93*6dbdd20aSAndroid Build Coastguard Workerinternals are based on Perfetto's codebase on all major platforms (Android,
94*6dbdd20aSAndroid Build Coastguard WorkerCrOS, Linux, MacOS, Windows).
95*6dbdd20aSAndroid Build Coastguard WorkerThe same [service-based architecture](/docs/concepts/service-model.md) of
96*6dbdd20aSAndroid Build Coastguard Workersystem-wide tracing applies, but internally the Chromium Mojo IPC system is
97*6dbdd20aSAndroid Build Coastguard Workerused instead of Perfetto's own UNIX socket.
98*6dbdd20aSAndroid Build Coastguard Worker
99*6dbdd20aSAndroid Build Coastguard WorkerBy default tracing works in in-process mode in Chromium, recording only data
100*6dbdd20aSAndroid Build Coastguard Workeremitted by Chromium processes. On Android (and on Linux, if disabling the
101*6dbdd20aSAndroid Build Coastguard WorkerChromium sandbox) tracing can work in hybrid in-process+system mode, combining
102*6dbdd20aSAndroid Build Coastguard Workerchrome-specific trace events with Perfetto system events.
103*6dbdd20aSAndroid Build Coastguard Worker
104*6dbdd20aSAndroid Build Coastguard Worker_(Googlers: see [go/chrometto](https://goto.google.com/chrometto) for more)_
105*6dbdd20aSAndroid Build Coastguard Worker
106*6dbdd20aSAndroid Build Coastguard Worker## Trace analysis
107*6dbdd20aSAndroid Build Coastguard Worker
108*6dbdd20aSAndroid Build Coastguard WorkerBeyond the trace recording capabilities, the Perfetto codebase includes a
109*6dbdd20aSAndroid Build Coastguard Workerdedicated project for importing, parsing and querying new and legacy trace
110*6dbdd20aSAndroid Build Coastguard Workerformats, [Trace Processor](/docs/analysis/trace-processor.md).
111*6dbdd20aSAndroid Build Coastguard Worker
112*6dbdd20aSAndroid Build Coastguard WorkerTrace Processor is a portable C++17 library that provides column-oriented
113*6dbdd20aSAndroid Build Coastguard Workertable storage, designed ad-hoc for efficiently holding hours of trace data
114*6dbdd20aSAndroid Build Coastguard Workerinto memory and exposes a SQL query interface based on the popular SQLite query
115*6dbdd20aSAndroid Build Coastguard Workerengine.
116*6dbdd20aSAndroid Build Coastguard WorkerThe trace data model becomes a set of
117*6dbdd20aSAndroid Build Coastguard Worker[SQL tables](/docs/analysis/sql-tables.autogen) which can be queried and joined
118*6dbdd20aSAndroid Build Coastguard Workerin extremely powerful and flexible ways to analyze the trace data.
119*6dbdd20aSAndroid Build Coastguard Worker
120*6dbdd20aSAndroid Build Coastguard WorkerOn top of this, Trace Processor includes also a
121*6dbdd20aSAndroid Build Coastguard Worker[trace-based metrics subsystem](/docs/analysis/metrics.md) consisting of
122*6dbdd20aSAndroid Build Coastguard Workerpre-baked and extensible queries that can output strongly-typed summaries
123*6dbdd20aSAndroid Build Coastguard Workerabout a trace in the form of JSON or protobuf messages (e.g., the CPU usage
124*6dbdd20aSAndroid Build Coastguard Workerat different frequency states, breakdown by process and thread).
125*6dbdd20aSAndroid Build Coastguard Worker
126*6dbdd20aSAndroid Build Coastguard WorkerTrace-based metrics allow an easy integration of traces in performance testing
127*6dbdd20aSAndroid Build Coastguard Workerscenarios or batch analysis or large corpuses of traces.
128*6dbdd20aSAndroid Build Coastguard Worker
129*6dbdd20aSAndroid Build Coastguard WorkerTrace Processor is also designed for low-latency queries and for building
130*6dbdd20aSAndroid Build Coastguard Workertrace visualizers. Today Trace Processor is used by the
131*6dbdd20aSAndroid Build Coastguard Worker[Perfetto UI](https://ui.perfetto.dev) as a Web Assembly module,
132*6dbdd20aSAndroid Build Coastguard Worker[Android Studio](https://developer.android.com/studio) and
133*6dbdd20aSAndroid Build Coastguard Worker[Android GPU Inspector](https://gpuinspector.dev/) as native C++ library.
134*6dbdd20aSAndroid Build Coastguard Worker
135*6dbdd20aSAndroid Build Coastguard Worker## Trace visualization
136*6dbdd20aSAndroid Build Coastguard Worker
137*6dbdd20aSAndroid Build Coastguard WorkerPerfetto provides also a brand new trace visualizer for opening and querying
138*6dbdd20aSAndroid Build Coastguard Workerhours-long traces, available at [ui.perfetto.dev](https://ui.perfetto.dev).
139*6dbdd20aSAndroid Build Coastguard WorkerThe new visualizer takes advantage of modern web platform technologies.
140*6dbdd20aSAndroid Build Coastguard WorkerIts multi-threading design based WebWorkers keeps the UI always responsive;
141*6dbdd20aSAndroid Build Coastguard Workerthe analytical power of Trace Processor and SQLite is fully available in-browser
142*6dbdd20aSAndroid Build Coastguard Workerthrough WebAssembly.
143*6dbdd20aSAndroid Build Coastguard Worker
144*6dbdd20aSAndroid Build Coastguard WorkerThe Perfetto UI works fully offline after it has been opened once. Traces opened
145*6dbdd20aSAndroid Build Coastguard Workerwith the UI are processed locally by the browser and do not require any
146*6dbdd20aSAndroid Build Coastguard Workerserver-side interaction.
147*6dbdd20aSAndroid Build Coastguard Worker
148*6dbdd20aSAndroid Build Coastguard Worker![Perfetto UI screenshot](/docs/images/perfetto-ui-screenshot.png)
149*6dbdd20aSAndroid Build Coastguard Worker
150*6dbdd20aSAndroid Build Coastguard Worker## Contributing
151*6dbdd20aSAndroid Build Coastguard Worker
152*6dbdd20aSAndroid Build Coastguard WorkerSee the [Contributing -> Getting started page](/docs/contributing/getting-started.md).
153*6dbdd20aSAndroid Build Coastguard Worker
154*6dbdd20aSAndroid Build Coastguard Worker## Bugs
155*6dbdd20aSAndroid Build Coastguard Worker
156*6dbdd20aSAndroid Build Coastguard WorkerFor bugs affecting Android or the tracing internals:
157*6dbdd20aSAndroid Build Coastguard Worker
158*6dbdd20aSAndroid Build Coastguard Worker* **Googlers**: use the internal bug tracker [go/perfetto-bugs](http://goto.google.com/perfetto-bugs)
159*6dbdd20aSAndroid Build Coastguard Worker
160*6dbdd20aSAndroid Build Coastguard Worker* **Non-Googlers**: use [GitHub issues](https://github.com/google/perfetto/issues).
161*6dbdd20aSAndroid Build Coastguard Worker
162*6dbdd20aSAndroid Build Coastguard WorkerFor bugs affecting Chrome Tracing:
163*6dbdd20aSAndroid Build Coastguard Worker
164*6dbdd20aSAndroid Build Coastguard Worker* **Googlers**: use the internal bug tracker [go/chrometto-bugs](http://goto.google.com/chrometto-bugs)
165*6dbdd20aSAndroid Build Coastguard Worker
166*6dbdd20aSAndroid Build Coastguard Worker* **Non-Googlers**: use [crbug.com](https://bugs.chromium.org/p/chromium/issues/list?q=component%3ASpeed%3ETracing%20label%3APerfetto)
167*6dbdd20aSAndroid Build Coastguard Workerto [file new bugs](https://bugs.chromium.org/p/chromium/issues/entry?components=Speed%3ETracing&labels=Perfetto).
168*6dbdd20aSAndroid Build Coastguard Worker
169*6dbdd20aSAndroid Build Coastguard Worker[ftrace]: https://www.kernel.org/doc/Documentation/trace/ftrace.txt
170*6dbdd20aSAndroid Build Coastguard Worker[chrome-tracing]: https://www.chromium.org/developers/how-tos/trace-event-profiling-tool
171