You can collect profiles using two primary methods: manual profile collection
and the ProfilingManager
API.
- Manual profile collection involves manually running Perfetto on your local device to record profiles. You can do this using commands as described in Recording system traces with Perfetto or by using the Quick Settings tile, as explained in Record using Quick Settings tile.
ProfilingManager
lets apps collect profiles in production.
We recommend using ProfilingManager
for collecting and analyzing data from
many users or for debugging rare issues. However, for issues that are easier to
reproduce, manual profiling might be a better choice.
The following table shows how these two methods for recording profiles differ:
ProfilingManager | Manual profile collection | |
---|---|---|
Profile timing control | More | Less |
Profile source | Local device and public users | Local device only |
Profile output | Redacted | Unredacted |
Event based profiling | Yes | No |
Profile customizability | Less | More |
Scalability | High | Low |
The following sections briefly describe the differences between the profile recording methods.
Profile timing control
The ProfilingManager
API provides more control over when an app starts or
stops a profile compared to manual profiling, where timing profile
initialization might be difficult. ProfilingManager
also makes it easier to
profile unexpected behavior because you can collect a profile even if you cannot
reproduce the behavior locally.
Profile source
With ProfilingManager
, you can gather data from public users to find and fix
performance issues. In contrast, manual profiling only lets you reproduce issues
on your own device.
Profile output
ProfilingManager
and manual collection produce different types of profile
outputs:
ProfilingManager
produces redacted traces. Redacted traces show information about your app's process but hide data from other apps on the system. BecauseProfilingManager
collects and redacts before returning them, you can collect traces from public users while protecting their privacy by not showing data from other apps.Manual profile collection produces unredacted traces. When you manually record a system trace, the output might include all processes running on the system. While these unredacted traces offer more complete data for debugging, you can only access them locally due to privacy concerns.
Event-based profiling
ProfilingManager
can also collect profiles when specific events happen, such
as an Application Not Responding (ANR) error or app startup. ProfilingManager
will handle the starting and stopping of profiles for event-based collection.
Profile customizability
Manual profiling provides the most customization, while ProfilingManager
offers fewer customization options.
Scalability
ProfilingManager
is the best way to scale tracing because it's the only option
that lets app developers record profiles from public users. With
ProfilingManager
, you can set up large-scale trace collection and analysis.
Manual profiling is limited to local use.