Perfetto in Chrome


Perfetto is a project intended to provide a common platform for performance instrumentation and logging across Chrome and Android, and this directory contains the code integrating the Perfetto library into Chrome. Specifically it provides a Mojo-based transportation layer which any individual new data source can build on to send logging protos to Perfetto, and an implementation which lets about://tracing generate a Chrome Tracing trace (TRACE_EVENT0, etc) using Perfetto rather than /base/trace_event/ as a backend.

The library itself lives in AOSP and is rolled in /third_party/chrome/.

Perfetto Documentation

Project page

Life of a Perfetto tracing Session

Internal documentation

Directory Structure

//services/tracing/                   <-- Perfetto is embedded by the tracing service
              /perfetto/              <-- Internal service implementation code
                     /cpp/perfetto    <-- C++ client libraries used by the data source providers.
                     /mojom/          <-- Mojom interfaces
//third_party/perfetto/               <-- DEPS-rolled external library

Adding a new data source

A data source is a provider of a specific type of data in the form of protobufs, like Chrome Trace Events, memory-infra memory dumps, netlog, etc. It registers itself with Perfetto with a given string identifier (e.g. org.chromium.trace-event) and if enabled by the central Perfetto service, writes its protos into the provided Perfetto TraceWriter(s).

These data source providers can live in any child process, and the Mojo transportation layer will take care of the details of passing them to the central service through shared memory buffers.

To add a new data source:


For any questions about Perfetto in Chrome or adding a new data source, please start a thread on