Why does Flutter cold start take significantly longer on Impeller/OpenGL ES than Impeller/Vulkan?


I'm investigating Flutter cold start performance because Google Play Android Vitals reports poor cold start performance on some devices.

To isolate the issue, I tested with a minimal Flutter app:

void main() {
  runApp(const MyApp());
}

There are no plugins, no Firebase, no async initialization, and no work before runApp().

From the startup traces, I noticed:

  • Devices using Impeller with Vulkan start quickly.

  • Devices using Impeller with OpenGL ES spend significantly more time during engine initialization before my Dart code executes.

This makes it appear that the additional startup time comes from the rendering backend rather than my application.

My questions are:

  1. Is this expected behavior for Impeller on OpenGL ES?

  2. Why does OpenGL ES initialization take noticeably longer than Vulkan?

  3. Is there any way for Flutter developers to reduce this startup cost, or is it entirely controlled by the Flutter engine?

  4. Does Google Play Android Vitals include this engine initialization time in its cold start metric?

Has anyone observed similar behavior across different Android GPUs or devices?


1
Aug 5 at 2:12 PM
User AvatarAbdullah Shahzad
#android#flutter#performance#startup#impeller

No answer found for this question yet.