docs: show off Perfetto as a CPU profile viewer Add a Viewing CPU Profiles cookbook, rename the perf tag to performance and position Perfetto as a profile viewer in the READMEs and homepage.
diff --git a/README.md b/README.md index 3a3370b..d90587a 100644 --- a/README.md +++ b/README.md
@@ -1,8 +1,9 @@ # Perfetto - System profiling, app tracing and trace analysis 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. +**tracing** and **profiling** 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**. @@ -23,8 +24,10 @@ and Linux (e.g. scheduling states, CPU frequencies, memory profiling, callstack sampling). - **Browser-based UI:** A powerful, fully local UI for visualizing and exploring - large, multi-GB traces on a timeline. It works in all major browsers, requires - no installation, and can open traces from other tools. + large, multi-GB traces on a timeline, and for exploring CPU and memory + profiles with flamegraphs and call trees. It works in all major browsers, + requires no installation, and can open traces and profiles from other tools + such as pprof, Linux perf and simpleperf. - **SQL-based analysis library:** A powerful engine that allows you to programmatically query traces using SQL to automate analysis and extract custom metrics. @@ -50,10 +53,13 @@ - **For Chromium Developers:** Perfetto is the tracing backend for `chrome://tracing`. Use it to debug and root-cause issues in the browser, V8, and Blink. -- **For Performance Engineers & SREs:** Analyze and visualize a wide range of - profiling and tracing formats, not just Perfetto's. Use the powerful SQL - interface to programmatically analyze traces from tools like **Linux perf**, - **macOS Instruments**, **Chrome JSON traces**, and more. +- **For Performance Engineers & SREs:** Use Perfetto as a profile viewer for + CPU profiles from **pprof**, **Linux perf** and **simpleperf**: explore them + with flamegraphs and call trees, see samples on a timeline, and query them + with SQL. See + [Viewing CPU Profiles](https://perfetto.dev/docs/getting-started/viewing-cpu-profiles). + Perfetto also opens traces from tools like **macOS Instruments**, **Chrome + JSON traces**, and more. ## Getting Started
diff --git a/docs/AGENTS.md b/docs/AGENTS.md index 68bfeda..f77b8f0 100644 --- a/docs/AGENTS.md +++ b/docs/AGENTS.md
@@ -241,6 +241,50 @@ out/linux_msan/perfetto_unittests --gtest_brief=1 --gtest_filter="<TestSuiteName.*>" ``` +## Writing Documentation + +The docs in docs/ are published at https://perfetto.dev/docs. The sidebar is +defined by docs/toc.md. + +- **Never move or rename existing doc files.** File paths are the public URLs + and are linked from blogs, bugs and elsewhere. Reorganize the sidebar by + editing docs/toc.md instead: a page's position in the sidebar is independent + of where the file lives. +- **Follow the [Diátaxis](https://diataxis.fr/) framework.** Every page should + be exactly one of the four types, and file into the matching part of the + sidebar: + - *Tutorials* (learning-oriented lessons with a guaranteed outcome): + "Tutorials". + - *How-to guides* (goal-oriented recipes for someone who knows what they + want): "Cookbooks". + - *Explanation* (understanding-oriented background): "Concepts" and the + "Overview" pages. + - *Reference* (dry, complete descriptions of formats, APIs, tables, CLIs): + "Reference", "Data Sources" and similar. + Don't mix types on one page: e.g. a how-to guide should link to the + reference for details rather than repeating it. +- **Every page appears in docs/toc.md exactly once.** Sidebar labels can be + changed freely; avoid giving two nearby entries the same label. +- **Prefer extending an existing page over adding a new one.** Add a new page + only when the content has a distinct audience or task. Link to existing pages + rather than duplicating their content. +- **Tag every sidebar entry.** Tags (e.g. `{.tag-android .tag-performance}`) + drive the "Perfetto for:" audience switcher at the top of the sidebar, which + hides entries not relevant to the selected audience. Only add a tag if that + audience would *usually* need the page, not merely if it *could* apply: an + audience that sees everything sees nothing. The tags are: + - `tag-android`: Android app and platform developers. This is the primary + audience and the default selection. + - `tag-linux`: Linux kernel and system developers. + - `tag-cpp-rust`: developers instrumenting C/C++/Rust apps with the SDKs. + - `tag-chrome`: Chromium developers. + - `tag-performance`: general performance engineers who are not tied to one + of the platforms above, e.g. people profiling with pprof, Linux perf or + samply, or bringing traces and profiles from other tools. + - `tag-contrib`: contributors to Perfetto itself. +- Pages in the "Overview" section are left untagged so every audience sees + them. + ## Creating Pull Requests **Note:** This is the default PR workflow. If the user has their own way of
diff --git a/docs/README.md b/docs/README.md index 8afa578..5f1a997 100644 --- a/docs/README.md +++ b/docs/README.md
@@ -5,8 +5,9 @@ page first. Perfetto is an open-source suite of SDKs, daemons and tools which use -**tracing** to help developers understand the behaviour of the complex systems -and root-cause functional and performance issues on client / embedded systems. +**tracing** and **profiling** to help developers understand the behaviour of +complex systems and root-cause functional and performance issues on client / +embedded systems. It consists of: @@ -20,9 +21,10 @@ level (e.g. scheduling states, CPU frequencies, memory profiling, callstack sampling) context during the trace. - **Fully local, browser-based UI** for visualizing large amounts of complex, - interconnected data on a timeline. Our UI works in all major browsers, doesn't - require any installation, works offline, and can open traces recorded by other - (non-Perfetto) tracing tools. + interconnected data on a timeline and for exploring CPU and memory profiles + with flamegraphs and call trees. Our UI works in all major browsers, doesn't + require any installation, works offline, and can open traces and profiles + recorded by other tools, such as pprof, Linux perf and simpleperf. - **Powerful, SQL-based analysis library** for programmatically analyzing large amounts of complex, interconnected data on a timeline, even if it was not collected with Perfetto recording tooling. @@ -64,15 +66,20 @@ kernel issues via ftrace, scheduling latency or IPCs between processes. - **Collecting, analysing and visualizing heap profiles on Linux** to debug high memory usage of C/C++/Rust apps and libraries. -- **Analysing and visualizing CPU profiles (Linux perf profiles) on Linux** to - optimize CPU usage in C/C++/Rust apps and libraries. +- **Viewing and analysing CPU profiles from other profilers** such as pprof, + Linux perf and simpleperf, to optimize CPU usage of apps and libraries in + any language. See + [Viewing CPU Profiles](/docs/getting-started/viewing-cpu-profiles.md). - **Analyze and visualize a wide range of profiling and tracing formats.** Perfetto can open traces and profiles from various other tools, allowing you to use the Perfetto UI and its SQL-based query engine on many data sources, including: + - _pprof_ - _Chrome JSON format_ - _Firefox Profiler JSON format_ - _Linux perf (binary and text formats)_ + - _Android simpleperf_ + - _Collapsed stacks (Brendan Gregg's FlameGraph format)_ - _Linux ftrace text format_ - _macOS Instruments_ - _Fuchsia tracing format_
diff --git a/docs/getting-started/cpu-profiling.md b/docs/getting-started/cpu-profiling.md index bbb21db..6b9d301 100644 --- a/docs/getting-started/cpu-profiling.md +++ b/docs/getting-started/cpu-profiling.md
@@ -420,9 +420,10 @@ The perfetto profiling implementation is built for continuous (streaming) collection, and is therefore less optimised for short, high-frequency profiling. -If all you need are aggregated flamegraphs, consider `simpleperf` on Android and -`perf` on Linux. These tools are more mature and have a simpler user interface -for this use case. +If all you need is a short CPU profile, consider recording with `simpleperf` on +Android or `perf` on Linux instead. These recorders have a simpler command line +for this use case, and you can still open their profiles in the Perfetto UI: see +[Viewing CPU Profiles](/docs/getting-started/viewing-cpu-profiles.md). ## Next steps
diff --git a/docs/getting-started/start-using-perfetto.md b/docs/getting-started/start-using-perfetto.md index 4daee23..8bc075d 100644 --- a/docs/getting-started/start-using-perfetto.md +++ b/docs/getting-started/start-using-perfetto.md
@@ -38,6 +38,7 @@ B --> E["<a href='#c-cpp-developers'>C/C++ Developer (non-Android)</a>"]; B --> E2["<a href='#rust-developers'>Rust Developer</a>"]; B --> F["<a href='#chromium-developers'>Chromium Developer</a>"]; + B --> P["<a href='#cpu-profiles'>I have a CPU profile (pprof, perf, simpleperf...)</a>"]; B --> G["<a href='#trace-like-data'>I have trace-like data</a>"]; B --> H["<a href='#not-listed'>None of the above</a>"]; ``` @@ -222,7 +223,7 @@ - **Tutorial**: [Recording performance counters and CPU profiling with Perfetto](/docs/getting-started/cpu-profiling.md) - **Tutorial**: - [Visualizing simpleperf files](/docs/getting-started/other-formats.md#firefox-json-format) + [Viewing simpleperf profiles](/docs/getting-started/viewing-cpu-profiles.md#simpleperf) ### {#android-diagnosing-memory-issues} Diagnosing Memory Issues @@ -326,7 +327,7 @@ - **Tutorial**: [Recording performance counters and CPU profiling with Perfetto](/docs/getting-started/cpu-profiling.md) - **Guide**: - [Visualizing perf files](/docs/getting-started/other-formats.md#firefox-json-format) + [Viewing Linux perf profiles](/docs/getting-started/viewing-cpu-profiles.md#linux-perf) ## {#c-cpp-developers} C/C++ Developer (non-Android) @@ -405,6 +406,23 @@ [this Perf-Planet blog post](https://calendar.perfplanet.com/2023/digging-chrome-traces-introduction-example/) is also a helpful resource. +## {#cpu-profiles} Anyone with a CPU profile to explore + +Perfetto is also a CPU profile viewer. If you already profile with **pprof** +(e.g. from Go), **Linux perf** or Android **simpleperf**, you can open +those profiles directly in the Perfetto UI, without installing anything, and +explore them with flamegraphs and call trees. Where the profile has +timestamps, you can also see the samples on a timeline, and in all cases you +can query them with SQL. + +- **Guide**: + [Viewing CPU Profiles](/docs/getting-started/viewing-cpu-profiles.md) + (Commands to produce a profile with each tool and open it in Perfetto) +- **Tutorial**: + [Recording CPU profiles with Perfetto](/docs/getting-started/cpu-profiling.md) + (If you want to record profiles on Android or Linux with Perfetto's own + tooling, alongside other system data) + ## {#trace-like-data} Anyone with "trace-like" data to analyse/visualize Perfetto's powerful UI and Trace Processor are not limited to traces recorded by
diff --git a/docs/getting-started/viewing-cpu-profiles.md b/docs/getting-started/viewing-cpu-profiles.md new file mode 100644 index 0000000..e6e31d7 --- /dev/null +++ b/docs/getting-started/viewing-cpu-profiles.md
@@ -0,0 +1,194 @@ +# Cookbook: Viewing CPU profiles from other profilers + +This page collects **recipes** for opening CPU profiles recorded by other +profilers in the [Perfetto UI](https://ui.perfetto.dev): pprof, Linux `perf` +and Android `simpleperf`. Each recipe gives the commands to produce a profile +that Perfetto can open with function names intact, and describes what you will +see once it is loaded. + +The Perfetto UI runs entirely in your browser: profiles are processed locally +and never uploaded anywhere. To open a profile, either drag and drop the file +onto [ui.perfetto.dev](https://ui.perfetto.dev) or click "Open trace file" in +the sidebar. + +For the full details of each file format, see +[Opening traces and profiles from other tools](/docs/getting-started/other-formats.md). +If instead you want to record CPU profiles on Android or Linux with Perfetto's +own tooling, alongside other system data, see +[Recording CPU profiles](/docs/getting-started/cpu-profiling.md). + +## {#pprof} pprof profiles + +pprof profiles (`profile.proto`, usually gzipped) are produced by Go's +`runtime/pprof` and `net/http/pprof` packages, as well as other tools which +write the same format. + +1. Collect a profile. For example, from a Go server exposing `net/http/pprof`: + + ```bash + curl -o cpu.pb.gz 'http://localhost:6060/debug/pprof/profile?seconds=30' + ``` + + Or from Go benchmarks: + + ```bash + go test -bench . -cpuprofile cpu.pb.gz + ``` + +2. Open `cpu.pb.gz` in the Perfetto UI. There is no need to decompress it. + +Since pprof profiles do not record when each sample happened, they are shown on +the **Aggregate Profiles** page rather than on the timeline. The UI opens this +page automatically when the profile is the only thing loaded; otherwise it is +available from the sidebar. If the profile has several sample types (e.g. +`samples` and `cpu`, or allocation counts and sizes in a heap profile), pick the +one to display from the metric selector. + +To look at several pprof profiles at once, put them in a single `.zip` or `.tar` +archive and open that: each file shows up as a separate profile, and you can +step between them with the arrow keys. + +NOTE: pprof sample labels are not imported yet. + +## {#linux-perf} Linux perf profiles + +There are two ways to open profiles recorded with `perf record`. Converting to +text with `perf script` is the simplest, because `perf` itself resolves function +names. Opening `perf.data` directly keeps more information, but needs an extra +step to add symbols. + +### {#perf-script} Option 1: convert to text with `perf script` + +1. Record a profile with call stacks: + + ```bash + perf record -g -- ./my_program + ``` + + DWARF-based unwinding (`--call-graph dwarf`) also works with this option, + because `perf script` does the unwinding. + +2. Convert it to text on the same machine, so `perf` can find the binaries and + their symbols: + + ```bash + perf script > profile.txt + ``` + +3. Open `profile.txt` in the Perfetto UI. + +### {#perf-data} Option 2: open `perf.data` directly + +`perf.data` does not contain function names, only references to the binaries +that were running. Use `trace_processor bundle` to find those binaries (matched +by build ID) and package their symbols together with the profile: + +1. Record a profile using frame pointers (`-g`) for call stacks: + + ```bash + perf record -g -- ./my_program + ``` + + DWARF-based unwinding (`--call-graph dwarf`) is not supported when opening + `perf.data` directly: use [Option 1](#perf-script) for those profiles. + +2. Download `trace_processor` and bundle the profile with symbols: + + ```bash + curl -LO https://get.perfetto.dev/trace_processor + chmod +x trace_processor + ./trace_processor bundle perf.data profile.tar + ``` + + If your binaries with symbols live somewhere else, pass + `--symbol-paths /path/to/dir`. Add `--verbose` to see where + `trace_processor` looked. See + [Symbolization](/docs/learning-more/symbolization.md) for more details. + +3. Open `profile.tar` in the Perfetto UI. + +### What you will see + +`perf` profiles have timestamps, so the samples appear **on the timeline** as +callstack tracks under each process, one per thread plus one for the whole +process. Drag across a time range on those tracks to open a flamegraph of the +samples in that range. This lets you look at, for example, only the samples +during a slow request instead of the whole recording. + +TIP: If you want to line up a `perf` profile with a Perfetto trace recorded at +the same time, record with `perf record -k mono` (or `-k boot`). See +[Perf textual format](/docs/getting-started/other-formats.md#perf-textual-format) +for details. + +## {#simpleperf} Android simpleperf profiles + +1. Record a profile of your app with `app_profiler.py`, which ships in the + `simpleperf/` directory of the Android NDK: + + ```bash + python3 <NDK>/simpleperf/app_profiler.py \ + --app com.example.myapp \ + -r "-g --duration 10" + ``` + + This writes `perf.data` in the current directory. See the + [simpleperf documentation](https://android.googlesource.com/platform/system/extras/+/refs/heads/main/simpleperf/doc/README.md) + for more recording options. + +2. Open `perf.data` in the Perfetto UI. There is no need to convert it first. + +simpleperf stores the function names it finds on the device in `perf.data`, so +most frames are named without extra steps. If frames from your own native +libraries have no names (usually because the libraries on the device are +stripped), bundle the profile with the unstripped libraries from your build: + +```bash +./trace_processor bundle perf.data profile.tar \ + --symbol-paths app/build/intermediates/merged_native_libs +``` + +As with Linux `perf`, samples appear on the timeline and you can open a +flamegraph for any time range. + +## {#samply} samply profiles + +Perfetto can open the `profile.json` files written by +`samply record --save-only`, but it does not symbolize them yet: function names +are shown as addresses. + +## {#other-formats} Other profile formats + +Perfetto also opens: + +- [Firefox Profiler JSON](/docs/getting-started/other-formats.md#firefox-json-format), + e.g. from `perf script report gecko` or Python's `profiling.sampling` + module. +- [Collapsed stacks](/docs/getting-started/other-formats.md#collapsed-stack-format), + as used by Brendan Gregg's FlameGraph scripts. These are shown on the + Aggregate Profiles page, like pprof. +- [macOS Instruments XML exports](/docs/getting-started/other-formats.md#macos-instruments-format-xml-export-), + shown on the timeline. + +## {#exploring} Exploring the profile + +Whichever way a profile is opened, it is explored with the same flamegraph +panel: + +- Switch between **Flamegraph**, **Call Tree** and **Functions** views, and + between **Top Down** and **Bottom Up** orderings. +- Focus on or hide frames and stacks matching a regular expression, or pivot on + a function to see everything that calls it and everything it calls. +- Export the data shown as TSV, Markdown or JSON. + +For profiles shown on the timeline, see +[Area Selections](/docs/visualization/perfetto-ui.md#area-selections) for how +to select samples. Their samples can also be queried with SQL through the +`stack_sample` table: see +[PerfettoSQL Getting Started](/docs/analysis/perfetto-sql-getting-started.md). + +## {#memory} Memory profiles + +Perfetto is also a memory profile viewer. pprof heap profiles open on the +Aggregate Profiles page as above. For native heap profiles and Java heap dumps +on Android and Linux, see +[Memory Profiling](/docs/getting-started/memory-profiling.md).
diff --git a/docs/toc.md b/docs/toc.md index 3c892b6..2421f73 100644 --- a/docs/toc.md +++ b/docs/toc.md
@@ -11,22 +11,23 @@ - [System Tracing](getting-started/system-tracing.md) {.tag-android .tag-linux} - [In-App Tracing](getting-started/in-app-tracing.md) {.tag-cpp-rust} - [Rust SDK](getting-started/rust-sdk.md) {.tag-cpp-rust} - - [Memory Profiling](getting-started/memory-profiling.md) {.tag-android .tag-linux} - - [CPU Profiling](getting-started/cpu-profiling.md) {.tag-android .tag-linux} + - [Recording CPU Profiles](getting-started/cpu-profiling.md) {.tag-android .tag-linux .tag-performance} + - [Memory Profiling](getting-started/memory-profiling.md) {.tag-android .tag-linux .tag-performance} - [Instrumenting with atrace](getting-started/atrace.md) {.tag-android} - [Instrumenting with ftrace](getting-started/ftrace.md) {.tag-linux .tag-android} - [Recording Chrome Traces](getting-started/chrome-tracing.md) {.tag-chrome} - - [Importing Other Formats](getting-started/other-formats.md) {.tag-perf} - - [Converting Data to Perfetto](getting-started/converting.md) {.tag-perf} + - [Opening Traces & Profiles from Other Tools](getting-started/other-formats.md) {.tag-android .tag-linux .tag-cpp-rust .tag-performance} + - [Converting Data to Perfetto](getting-started/converting.md) {.tag-performance} - [Cookbooks](#) - [Recording Android Traces Locally](getting-started/local-android-trace-recording.md) {.tag-android} - [Analyzing Android Traces](getting-started/android-trace-analysis.md) {.tag-android} - - [Analyzing Traces from the Command Line](getting-started/command-line-analysis.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Viewing CPU Profiles](getting-started/viewing-cpu-profiles.md) {.tag-android .tag-linux .tag-cpp-rust .tag-performance} + - [Analyzing Traces from the Command Line](getting-started/command-line-analysis.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Tracing on Linux](getting-started/linux-cookbook.md) {.tag-linux} - [Capturing Periodic Trace Snapshots](getting-started/periodic-trace-snapshots.md) {.tag-android .tag-linux} - - [Using AI with Perfetto](getting-started/using-ai.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Using AI with Perfetto](getting-started/using-ai.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Case Studies](#) @@ -46,16 +47,16 @@ - [Buffers and Dataflow](concepts/buffers.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome} - [Trace Configuration](concepts/config.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome} - [Clock Synchronization](concepts/clock-sync.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome} - - [Trace merging](concepts/merging-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Trace merging](concepts/merging-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Concurrent Sessions](concepts/concurrent-tracing-sessions.md) {.tag-android .tag-linux .tag-cpp-rust} - [Recording](#) - [Tracing in Background](learning-more/tracing-in-background.md) {.tag-android .tag-linux} - [Advanced Android Tracing](learning-more/android.md) {.tag-android} - - [Symbolization and Deobfuscation](learning-more/symbolization.md) {.tag-android .tag-linux} + - [Symbolization and Deobfuscation](learning-more/symbolization.md) {.tag-android .tag-linux .tag-performance} - [Tracing across Reboots](data-sources/previous-boot-trace.md) {.tag-android .tag-linux} - - [Custom Proto Extensions](instrumentation/extensions.md) {.tag-cpp-rust .tag-android .tag-perf} + - [Custom Proto Extensions](instrumentation/extensions.md) {.tag-cpp-rust .tag-android .tag-performance} - [heapprofd API](instrumentation/heapprofd-api.md) {.tag-cpp-rust} - [Multi-machine recording](learning-more/multi-machine-tracing.md) {.tag-android .tag-linux} @@ -67,7 +68,7 @@ - [System Calls](data-sources/syscalls.md) {.tag-android .tag-linux} - [CPU Frequency](data-sources/cpu-freq.md) {.tag-android .tag-linux} - [Function Graph](data-sources/funcgraph.md) {.tag-android .tag-linux} - - [GPU](data-sources/gpu.md) {.tag-android .tag-linux .tag-perf} + - [GPU](data-sources/gpu.md) {.tag-android .tag-linux .tag-performance} - [Memory](#) @@ -92,46 +93,46 @@ - [Visualization](#) - - [Perfetto UI](visualization/perfetto-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Merging traces in the UI](visualization/merging-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Data Explorer](visualization/data-explorer.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Opening Large Traces](visualization/large-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Deep Linking](visualization/deep-linking-to-perfetto-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Embedding the UI](visualization/embedding-the-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Debug Tracks](analysis/debug-tracks.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Perfetto UI](visualization/perfetto-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Merging traces in the UI](visualization/merging-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Data Explorer](visualization/data-explorer.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Opening Large Traces](visualization/large-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Deep Linking](visualization/deep-linking-to-perfetto-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Embedding the UI](visualization/embedding-the-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Debug Tracks](analysis/debug-tracks.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Heap Dump Explorer](visualization/heap-dump-explorer.md) {.tag-android} - [Memscope & Memory Overview](visualization/memscope.md) {.tag-android .tag-linux} - [Extending the UI](#) - - [Overview](visualization/extending-the-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-perf} - - [UI Automation](visualization/ui-automation.md) {.tag-android .tag-linux .tag-cpp-rust .tag-perf} - - [Commands Reference](visualization/commands-automation-reference.md) {.tag-android .tag-linux .tag-cpp-rust .tag-perf} - - [Extension Servers](visualization/extension-servers.md) {.tag-android .tag-linux .tag-cpp-rust .tag-perf} + - [Overview](visualization/extending-the-ui.md) {.tag-android .tag-linux .tag-cpp-rust .tag-performance} + - [UI Automation](visualization/ui-automation.md) {.tag-android .tag-linux .tag-cpp-rust .tag-performance} + - [Commands Reference](visualization/commands-automation-reference.md) {.tag-android .tag-linux .tag-cpp-rust .tag-performance} + - [Extension Servers](visualization/extension-servers.md) {.tag-android .tag-linux .tag-cpp-rust .tag-performance} - [Trace Analysis](#) - - [Getting Started](analysis/getting-started.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Overview](analysis/getting-started.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [PerfettoSQL](#) - - [Getting Started](analysis/perfetto-sql-getting-started.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Syntax](analysis/perfetto-sql-syntax.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Standard Library](analysis/stdlib-docs.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Style Guide](analysis/style-guide.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Backwards Compatibility](analysis/perfetto-sql-backcompat.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Getting Started](analysis/perfetto-sql-getting-started.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Syntax](analysis/perfetto-sql-syntax.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Standard Library](analysis/stdlib-docs.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Style Guide](analysis/style-guide.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Backwards Compatibility](analysis/perfetto-sql-backcompat.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Trace Processor](#) - - [C++ Library](analysis/trace-processor.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Python Library](analysis/trace-processor-python.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Batch Trace Processor](analysis/batch-trace-processor.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [C++ Library](analysis/trace-processor.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Python Library](analysis/trace-processor-python.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Batch Trace Processor](analysis/batch-trace-processor.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - - [Merging traces from the command line](analysis/merging-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Trace Summarization](analysis/trace-summary.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Merging traces from the command line](analysis/merging-traces.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Trace Summarization](analysis/trace-summary.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Converting from Perfetto](quickstart/traceconv.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome} - - [FAQ](faq.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [FAQ](faq.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Diving Deep](#) @@ -149,19 +150,19 @@ - [Protos](#) - [Trace Config](reference/trace-config-proto.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome} - - [Trace Packet](reference/trace-packet-proto.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Trace Packet](reference/trace-packet-proto.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [PerfettoSQL](#) - - [Prelude Tables](analysis/sql-tables.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Built-in Functions](analysis/builtin.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Stats Table](analysis/sql-stats.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Prelude Tables](analysis/sql-tables.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Built-in Functions](analysis/builtin.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Stats Table](analysis/sql-stats.autogen) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - - [Synthetic Track Events](reference/synthetic-track-event.md) {.tag-perf} + - [Synthetic Track Events](reference/synthetic-track-event.md) {.tag-performance} - [Kernel Track Events](reference/kernel-track-event.md) {.tag-android .tag-linux} - - [Trace manifest format](reference/perfetto-manifest.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Extension Server Protocol](visualization/extension-server-protocol.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} - - [Embedding API](visualization/embedding-api-reference.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-perf} + - [Trace manifest format](reference/perfetto-manifest.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Extension Server Protocol](visualization/extension-server-protocol.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} + - [Embedding API](visualization/embedding-api-reference.md) {.tag-android .tag-linux .tag-cpp-rust .tag-chrome .tag-performance} - [Android Version Notes](reference/android-version-notes.md) {.tag-android} - [Advanced Topics](#) @@ -170,8 +171,8 @@ - [Interceptors](instrumentation/interceptors.md) {.tag-cpp-rust} - [Legacy (v1) Metrics](analysis/metrics.md) {.tag-android} - [Multi-machine architecture](deployment/multi-machine-architecture.md) {.tag-android .tag-linux} - - [BigTrace (Single Machine)](deployment/deploying-bigtrace-on-a-single-machine.md) {.tag-android .tag-perf} - - [BigTrace on Kubernetes](deployment/deploying-bigtrace-on-kubernetes.md) {.tag-android .tag-perf} + - [BigTrace (Single Machine)](deployment/deploying-bigtrace-on-a-single-machine.md) {.tag-android .tag-performance} + - [BigTrace on Kubernetes](deployment/deploying-bigtrace-on-kubernetes.md) {.tag-android .tag-performance} - [Contributing](#)
diff --git a/infra/perfetto.dev/src/template_index.html b/infra/perfetto.dev/src/template_index.html index 9b401a3..bc00a86 100644 --- a/infra/perfetto.dev/src/template_index.html +++ b/infra/perfetto.dev/src/template_index.html
@@ -12,7 +12,7 @@ <section class="home-highlights"> <a href="#profiling"><div class="icon"></div>System Profiling</a> <a href="#tracing"><div class="icon"></div>In-App Tracing</a> - <a href="#viewer"><div class="icon"></div>Trace Viewer</a> + <a href="#viewer"><div class="icon"></div>Trace & Profile Viewer</a> <a href="#analysis"><div class="icon"></div>Trace Analysis</a> </section> </div> @@ -71,16 +71,21 @@ <section class="home-section" id="viewer"> <img src="/assets/ui.png" alt="Trace viewer illustration"> <div> - <h2>Trace Viewer</h2> + <h2>Trace & Profile Viewer</h2> <div class="home-item"> <i class="material-icons-round">timeline</i> <h3>Interactive trace exploration</h3> <p>Record, view and process trace data with the Perfetto UI</p> </div> <div class="home-item"> + <i class="material-icons-round">local_fire_department</i> + <h3>CPU and memory profile viewer</h3> + <p>Flamegraphs and call trees for profiles from pprof, Linux perf and simpleperf</p> + </div> + <div class="home-item"> <i class="material-icons-round">file_copy</i> <h3>Supports popular trace format files</h3> - <p>TraceEvent JSON, Android systrace, ftrace text output</p> + <p>TraceEvent JSON, Android systrace, ftrace text output, Firefox Profiler JSON</p> </div> <div class="home-item"> <i class="material-icons-round">offline_bolt</i>