ui: Simplify Spaghetti materialization to expensive-op cut points

Reduce the planner to a single pure rule: the output of every expensive
op (now including sort) becomes a cache table and everything else folds
into the next table or the output query. Drop the selected-node and
canvas fan-out rules along with free-op tracking.

Keep the SQL that actually built each cache entry instead of
overwriting it on cache hits, and show only the query body in
Materialization step cards. Label the output card as Standard SQL, since
it always runs as plain SQL for the DataGrid.

Make the PerfettoSQL Next formatter always emit a single query: write
unions as FROM <a> UNION ALL (<b>) ..., repeat steps used more than once
instead of emitting CREATE OR REPLACE PERFETTO TABLE scripts, and error
clearly when a SQL node input would nest a pipe query inside plain SQL.
7 files changed
tree: 3b466d814feff2b3e33fbb7663af43609202b93f
  1. .github/
  2. ai/
  3. bazel/
  4. build_overrides/
  5. buildtools/
  6. contrib/
  7. docs/
  8. examples/
  9. gn/
  10. include/
  11. infra/
  12. protos/
  13. python/
  14. sdk/
  15. src/
  16. test/
  17. third_party/
  18. tools/
  19. ui/
  20. .bazelignore
  21. .bazelrc
  22. .bazelversion
  23. .clang-format
  24. .clang-tidy
  25. .git-blame-ignore-revs
  26. .gitallowed
  27. .gitattributes
  28. .gitignore
  29. .gn
  30. .style.yapf
  31. Android.bp
  32. Android.bp.extras
  33. anrs.json
  34. binder.json
  35. binder2.json
  36. BUILD
  37. BUILD.extras
  38. BUILD.gn
  39. CHANGELOG
  40. CONTRIBUTORS.txt
  41. DIR_METADATA
  42. heapprofd.rc
  43. LICENSE
  44. meson.build
  45. METADATA
  46. MODULE.bazel
  47. MODULE.bazel.lock
  48. MODULE_LICENSE_APACHE2
  49. OWNERS
  50. OWNERS.github
  51. perfetto.rc
  52. perfetto_flags.aconfig
  53. PerfettoIntegrationTests.xml
  54. persistent_cfg.pbtxt
  55. README.chromium
  56. README.md
  57. TEST_MAPPING
  58. traced_perf.rc
  59. WORKSPACE
README.md

What is Perfetto?

Perfetto is an open-source suite of tools for recording, visualizing and analyzing traces: timelines of what software and the system under it were doing. It is the default tracing system for Android and Chromium. System-wide recording works on Android and Linux. The tracing SDK, the UI and Trace Processor also run on macOS and Windows.

  • Record the whole system. Scheduling, CPU frequency, memory, syscalls and any kernel tracepoint on Android and Linux, plus Android framework events, callstack sampling and Java and native heap profiles.
  • Instrument your own code. Add trace points with the C++ or Rust SDKs and see them next to everything else.
  • Open traces from other tools. Chrome JSON, Linux perf, Firefox Profiler, macOS Instruments, pprof, systrace, Fuchsia and more.
  • Explore multi-GB traces in the browser. The Perfetto UI needs no install and runs fully locally: traces are not uploaded anywhere.
  • Query everything with SQL. Trace Processor turns any trace into tables, with a standard library for common analyses. Use it from the command line, Python or C++.
  • Bring your AI agent. The Perfetto AI skill teaches coding agents to record and analyze traces.

Try it in your browser

Open an example Android trace without installing anything, or drag your own trace file onto ui.perfetto.dev.

The Perfetto UI on an Android trace: a binder transaction selected in SurfaceFlinger, with its call stack and frame timelines on the timeline, and its details, binder reply and arguments below

Quick start

Record a trace

On Android, with a device connected over adb:

curl -O https://raw.githubusercontent.com/google/perfetto/main/tools/record_android_trace
python3 record_android_trace -o trace.pftrace -t 10s sched freq gfx view am wm

The trace opens in the Perfetto UI when recording finishes.

On Linux, record scheduling activity with tracebox:

curl -LO https://get.perfetto.dev/tracebox && chmod +x tracebox
curl -LO https://raw.githubusercontent.com/google/perfetto/main/test/configs/scheduling.cfg
sudo ./tracebox -o trace.pftrace --txt -c scheduling.cfg

For Chrome, use the recording page in the UI. To trace your own app, see in-app tracing.

Query it with SQL

curl -LO https://get.perfetto.dev/trace_processor && chmod +x trace_processor
./trace_processor query trace.pftrace \
  "SELECT name, COUNT(*) AS cnt FROM slice GROUP BY name ORDER BY cnt DESC LIMIT 10"

Or from Python:

pip install perfetto
from perfetto.trace_processor import TraceProcessor

tp = TraceProcessor(trace='trace.pftrace')
print(tp.query('SELECT ts, dur, name FROM slice LIMIT 10').as_pandas_dataframe())

What can you do with it?

  • Android app and platform developers: root-cause slow startups, jank, ANRs and low memory kills, and profile Java/Kotlin and native memory. (Android guides)
  • C, C++ and Rust developers: instrument your code to see where time goes across threads and processes. (In-app tracing)
  • Linux kernel and systems developers: visualize scheduling, syscalls, interrupts and custom tracepoints. Perfetto is an efficient userspace daemon for ftrace. (Linux cookbook)
  • Chromium developers: Perfetto is the tracing backend behind chrome://tracing, for debugging the browser, V8 and Blink. (Chrome tracing)
  • Performance engineers: analyze traces from many tools in one place and automate the analysis with SQL across thousands of traces. (Trace analysis)

Not sure where to start? How do I start using Perfetto? picks a path based on what you want to do.

How it fits together

Perfetto's components: tracing daemons and SDKs that record traces, and the UI and Trace Processor that analyze them

Perfetto is a collection of components that work together:

  • Tracing daemons (traced, traced_probes) collect data from many processes and the kernel into a single trace file.
  • The tracing SDK writes your app's trace points with low overhead.
  • The Perfetto UI visualizes traces on a timeline.
  • Trace Processor parses traces into a SQL database for analysis.

See the documentation for the full picture.

Community and Support

See Community and getting help for more. We follow Google's Open Source Community Guidelines.

Contributing

Contributions are welcome. The contributor guide covers building, testing and sending pull requests.

Packages

The Debian packaging of Perfetto is maintained in the Debian Perfetto Salsa repository.

License

Apache 2.0. See LICENSE for details.