Skip to main content

Mobile vitals

App start time​

With mobile vitals enabled, the SDK reports the cold mobile vital once per cold launch. From version 0.17.0 it also reports cold_hybrid. Both are in milliseconds and both are measured from process start:

Mobile vitalEnds when
coldThe first native screen is drawn (Android) or the app first becomes active (iOS)
cold_hybridThe first Flutter frame is on screen, including engine startup and Dart initialization

cold_hybrid does not wait for data: a first route that shows a loading spinner counts.

The two values relate differently on each platform:

  • iOS: cold ends when the launch screen appears, so cold_hybrid is larger, and the difference is the time Flutter adds to the launch. cold_hybrid includes the launch screen's 0.2 second fade-out, which Flutter completes before it reports the first frame.
  • Android: FlutterActivity holds its first draw until Flutter's first frame is ready, so cold already includes Flutter startup and ends shortly after cold_hybrid. Use cold_hybrid to compare launches across both platforms.

Both values are recorded natively as the launch happens, so they are reported whether you call initSdk in main() or later, for example after a splash route or a login screen.

cold_hybrid is reported only when the app launches into Flutter:

  • Android: the launch activity is a FlutterActivity or FlutterFragmentActivity.
  • iOS: the root view controller is a FlutterViewController, or a UINavigationController or UITabBarController showing one.

In add-to-app integrations, where the app launches into a native screen, cold_hybrid is not reported, because the first Flutter frame there is not part of the launch.

Note

cold_hybrid is reported once per process, for the first Flutter frame in that process. Launches longer than 60 seconds, which come from a process the system started in the background, are dropped, as are iOS prewarmed launches.

Last updated on
On this page
Was this page helpful?