ui: show sampled stacks beneath callstack instant tracks Sampled callstacks can be inspected as individual instants or an aggregated flamegraph, but neither shows how stacks evolve over time. Add a sampled-stack child beneath each eligible thread's Callstacks track, retaining standard instant markers and sample selection on the parent. A CallstackTrack wrapper owns lazy preparation of frame runs and delegates rendering, layout, selection, and tooltips to SliceTrack. Concurrent rendering and restored-selection requests share one initialization promise, including failures. This needs no new initialization, render, mouse, or tooltip hooks in SliceTrack. The shared slice-track change is limited to expanding compressed rows on the first click without selecting an event. Sampled stacks use ordinary frame rectangles, function-name colors, sampled-duration tooltips, and frame details. There are no sampling-point diamonds, stems, overlays, or extra timestamp queries. The child is named Callstack flamechart. SQL classifies clock, cycle, and instruction timebases as eligible using structured session metadata. Every eligible thread without a slice track reveals its child with compressed rows; threads with slice tracks keep the child hidden initially. Visibility remains stable during pan and zoom. Per-session area selection is preserved. Code origin is classified once per mapping in SQL, independently of process names and symbol availability. In mapping-color mode, binary, library, kernel, and unknown colors use the same mapping-path shade on sample instants and flamechart frames. Library recognition uses filename conventions because mapping metadata does not identify executable versus shared-object ELF files. Final open frames use incomplete slices through trace end; details and time-range selection preserve that boundary. Flamechart frames default to function-name colors. Track settings offer Color by → Function name or Mapping, using the existing track settings and SliceTrack cache-key APIs and supporting bulk updates. Mapping mode matches the origin colors on sample instants. Integration tests expand track groups only when needed, including groups automatically revealed by flamecharts. Reviewed screenshot baselines cover the default presentation and switching to mapping colors. Validation: 22 targeted UI unit tests and 3 browser integration tests pass, including a clean screenshot comparison run in the CI browser container. The UI build, TypeScript checking, ESLint, and formatting pass. The underlying stack also passed 7 SQL diff tests and 12 native generator tests. This PR remains a draft.
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.