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 vital | Ends when |
|---|---|
cold | The first native screen is drawn (Android) or the app first becomes active (iOS) |
cold_hybrid | The 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:
coldends when the launch screen appears, socold_hybridis larger, and the difference is the time Flutter adds to the launch.cold_hybridincludes the launch screen's 0.2 second fade-out, which Flutter completes before it reports the first frame. - Android:
FlutterActivityholds its first draw until Flutter's first frame is ready, socoldalready includes Flutter startup and ends shortly aftercold_hybrid. Usecold_hybridto 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
FlutterActivityorFlutterFragmentActivity. - iOS: the root view controller is a
FlutterViewController, or aUINavigationControllerorUITabBarControllershowing 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.
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.