There are multiple situations where the profile collection might not go as expected:
- The profile collection fails due to an internal error. If this happens, the
ProfilingResult
API tells you about the errors. - The profile collection fails due to rate limiting. For more information, see How rate limiting works
- The profile collection succeeds, but the app isn't immediately notified.
This can happen if the app crashes during long profile collections. If the
app closes, the system automatically stops and saves the profile. The app is
informed about the collected profile when it restarts and registers a
general listener with
ProfilingManager
.
How rate limiting works
ProfilingManager
includes a rate limiter for both individual apps and the
entire system. The rate limiter prevents apps from using too many system
resources by recording too many profiles, because a full profiling session uses
a lot of resources.
Both the app and system rate limiters assign a cost to each type of profile collected, because some profiles are more resource-intensive than others. The app limiter controls how much an individual app can record based on its total cost. The system limiter, however, controls the total cost of all profiles recorded by all apps.
The rate limiter sets a total cost that each app can use (this cost is the same for all apps). Each profile uses a part of this total cost, depending on its type.
The rate limiter uses three time periods:
- Per Hour: There's a maximum cost allowed per hour.
- Per Day: There's a maximum cost allowed per day.
- Per Week: There's a maximum cost allowed per week.
The rate limiter sets a total cost that can be used within each of these
periods. For example, an app might be allowed to record X profiles per hour, Y
per day, and Z per week. If your app reaches its limit in any of these periods,
future profile requests will result in an ERROR_FAILED_RATE_LIMIT_PROCESS
error.
These time periods work similarly for system-level rate limiting. However, the
system rate limiter is a global limit shared by all apps. This limit is set
separately from the individual app quotas, but every profile contributes to it,
using the same hourly, daily, and weekly periods. If this global limit is
reached, you will receive the ERROR_FAILED_RATE_LIMIT_SYSTEM
error.