We’re excited to share Perfetto v53.0! This release introduces an initial Rust SDK, FreeBSD support, native pprof visualization, and a completely redesigned Overview page.
📜 Custom Sorting for JSON
You can now control the layout of your JSON traces with standard process_sort_index and thread_sort_index fields! This lets you explicitly control the order of tracks in the UI. This was a long requested feature (#378, #555, #764) and we were finally able to make all the necessary changes to make this happen.
process_sort_index and thread_sort_index are now respected by Perfetto!
🦀 Rust SDK & Community Contrib
We are excited to launch the initial Rust SDK (perfetto-sdk on crates.io)! This is the first project hosted in our new contrib/ directory, a space dedicated to community-maintained projects.
Special thanks to @dreveman, @jon-rv and @zytyz (from Rivos) for their contributions on this feature!
🏠 Revamped Overview Page
The "Info and Stats" page has been transformed into a modern, tabbed Overview dashboard. This new design provides a high-level summary of your trace making it significantly easier to debug trace import issues.
🖥️ UI Enhancements
- Resize Pinned Tracks: You can now drag to set a fixed height for the pinned tracks area! Double-click to restore auto-sizing.
- SQL Data Analysis: The SQL table viewer now features an "Analyze" submenu for quick data transformations like column casting.
- Path-based Filtering: Commands like Pin and Expand now support filtering by the full track path (e.g., process_name > thread_name).
- Network Recording: Added a 'Network' section to the Recording page for WiFi debugging.
- Log Tables: Find what you need faster with a more intuitive layout and powerful, case-insensitive search.
🔥 Flamegraph & Callstack Improvements
- TrackEvent Callstacks: You can now attach callstacks to events when converting traces to Perfetto! Selecting an area will aggregate these callstacks into a flamegraph.
- Inline Functions: Flamegraphs are now capable of visually distinguishing inlined functions, making it easier to identify compiler optimizations. Currently this is only supported for pprof but we plan to extend this to other file formats where applicable.
Learn more about adding callstacks to events
⚡ Trace Processor & SQL
- New SQL Function: Added unhex to convert hexadecimal strings to 64-bit integers.
- Python API: The Python trace processor now exposes trace metadata.
- Breaking Change: Added arg_set_id column to the thread table. Queries joining threads with other tables containing this column (like slice) may need to qualify the column name (e.g., thread.arg_set_id) to avoid ambiguity.
🚂 Tracing Service and Probes
- FreeBSD Support: Perfetto tracing service and SDK can now be built and run on FreeBSD. Thanks to @erikarn for this contribution!
- Lock-Free Task Runner: We've enabled a lock-free task runner on non-Android platforms to reduce lock contention. Curious readers can check out the design doc.
- Optimized Encoding: linux.ftrace now uses denser_generic_event_encoding by default, reducing trace size.
- Reduced CPU Usage: SharedMemoryArbiter optimizations reduce overhead for high-throughput workloads.
- Process Synchronization: Added --notify-fd flag to perfetto cmd to wait for all data sources to start.
- Stack Sampling: Supports filtering of events by their source (user-space, kernel or hypervisor).
📈 pprof & Simpleperf Support
Perfetto now supports importing and visualizing pprof profiles directly in the UI. This includes a dedicated page for analyzing pprof data. We've also added support for ingesting simpleperf's protobuf format.
Pprof:
Simpleperf:
Learn more about visualizing external trace formats
Happy Tracing!
A huge thanks to everyone, both inside and outside of Google, who contributed to making Perfetto v53 a success.
For complete details, see the changelog or view all changes on GitHub.
Download Perfetto v53.0 from our releases page, get started at docs.perfetto.dev, or try the UI directly at ui.perfetto.dev.