Choose the right profiling method

You can collect profiles using two primary methods: manual profile collection and the ProfilingManager API.

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. Because ProfilingManager 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.