Repository navigation
Perfetto v59.1 #8297
LalitMaganti
announced in
Announcements
Perfetto v59.1
#8297
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
We’re excited to share Perfetto v59.1! This release brings traces that survive device reboots on Android, a much friendlier Trace Processor command line (rustc-style SQL errors, markdown output and a dedicated agent mode for AI coding tools), flamegraphs as call trees and function tables, sampled callstacks over time, a new
linux.smapsdata source, and a long list of UI, SQL standard library and SDK improvements.🔁 Persistent traces across reboots (Android)
Set
TraceConfig.persist_trace_across_rebootsand the trace file is kept on disk if the device reboots mid-trace, then recovered and uploaded on the next boot viaperfetto --upload-after-reboot. Recovered traces record why in the newtrace_recovery_reasonmetadata entry.🔥 New ways to look at profiles in the UI
Flamegraphs are great for spotting where cost goes, but they're only one way to read a profile. v59 adds two new views over the same data, plus a way to see how stacks change over time.
Sampled callstacks over time: the new Callstack flamechart track under surfaceflinger's main thread, with the flamegraph for an area selection and the new Flamegraph / Call Tree / Functions tabs below.
Call Tree view (top-down, fully expanded) for the same selection: total and self CPU time for every frame.
Functions view: self and total CPU time per function, summed over every call path.
🕸️ Flows that scale to dense graphs
Selecting a slice in a trace with a dense flow graph (build system dependency traces are a common example) used to make the UI follow the entire flow chain, which could grind it to a halt. Many people have hit this over time (#1004).
💻 A friendlier Trace Processor CLI
--> source:line:collocation naming where the SQL came from (query, module, macro or metric), a line-number gutter and a caret.trace_processor query --format markdownprints compact markdown tables, with configurable--max-rows,--max-bytesand--max-cell-widthlimits.CLAUDECODEorAI_AGENT) with stdout not a terminal, results default to markdown and errors become single-line JSON. Force it on or off with--agent/--no-agent.--no-progress, andNO_COLOR/FORCE_COLORsupport.Trace Processor CLI: a rustc-style error for a misspelled column, then query results printed as a markdown table with
--format markdown.Learn more about agent mode
🧠 Memory:
linux.smapsdata sourcetraced_perf can now record
/proc/pid/smapsfor selected processes, once or periodically. Processes can be selected by cmdline and uid range. The record page can also capture smaps snapshots alongside ART heap dumps.🔍 Symbolization without local binaries
Native profiles from Linux machines often arrive without the unstripped binaries needed to symbolize them. Trace Processor can now fetch debug files from debuginfod servers by build ID, so
trace_processor bundle --debuginfod input.pftrace output.tarproduces a symbolized bundle with no local binaries at all.--debuginfod. Servers come from--debuginfod-urlsorDEBUGINFOD_URLS, and local binaries are always tried first.--debuginfod-cache-pathto override), with configurable connection and stall timeouts.--verboseto see every lookup,--quietfor scripts, and a clean error instead of a crash when llvm-symbolizer can't be run.bundle.Learn more about symbolization
🐍 Python: connect to warm sessions
TraceProcessor(remote='my-session')connects to a runningtrace_processor server unixsession, so you can parse a large trace once and query it from many scripts. Onlyquery()is supported over Unix sockets for now.remotealso accepts HTTP addresses, andaddris deprecated in its favour.🖥️ UI Enhancements
shareable/downloadableflags (see the compatibility notes below).⚡ Trace Processor & SQL standard library
android.process_state(process and freezer state, exit reasons),android.lock_held,android.cpu.cluster_utilization,android.job_scheduler_states_track_events,std.gpu.vulkan_debug_names, plusandroid_cuj_blocking_calls.strace -f/-Toutput.🚂 Tracing Service and Probes
GpuRenderStagesConfig.drawcall_stages).🧩 SDK improvements
TraceContext::drop_count()(C++) /PerfettoDsTracerGetDropCount()(C).🔧 Build
perfetto_cxx_standard, andperfetto_use_system_{re2,zstd,linenoise,expat}.Perfetto v59 includes a few changes worth checking when upgrading:
shareable/downloadableflags (which replacelocalOnly) to control this.graph_reachable_dfs/graph_reachable_bfsnow return the start nodes when the graph has no edges, instead of an empty table. See PerfettoSQL backwards compatibility..dump,.load-metrics-sqland.run-metricsinteractive shell commands have been removed, and.widthand-W/--wideare deprecated and no longer do anything. Usetrace_processor export sqliteinstead of.dump.A huge thanks to everyone who contributed to making Perfetto v59 possible. A specific thanks to our first time contributors:
object-src: 'none'CSP directive is applied as intended #6988For complete details, see the v59.1 changelog or view all changes on GitHub.
Download Perfetto v59.1 from our releases page, get started at perfetto.dev, or try the UI directly at ui.perfetto.dev.
This discussion was created from the release Perfetto v59.1.
All reactions