Skip to content

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

Open

Description

@abdullah517

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?


Activity

  1. jtmcdole commented on Aug 5, 2026

    @jtmcdole
    Member

    From the startup traces
    significantly more time

    Do you have any data to share with us (offline if needed) as "significantly" is not a measurable artifact.

    Is this expected behavior for Impeller on OpenGL ES

    It is expected that they are not going to be the same, but without data I can't tell you if your case is expected.

    OpenGL ES initialization take noticeably longer than Vulkan

    Vulkan and OpenGL are two different backends for different eras of computer graphics.

  2. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Aug 5, 2026
  3. abdullah517 commented on Aug 6, 2026

    @abdullah517
    Author

    when disable impeller on infinix x6835 here is startuptrace
    {
    "engineEnterTimestampMicros": 747668093297,
    "timeToFrameworkInitMicros": 1044200,
    "timeToFirstFrameRasterizedMicros": 2297655,
    "timeToFirstFrameMicros": 1083789,
    "timeAfterFrameworkInitMicros": 39589
    }
    when enable impeller on infinix x6835 here is startuptrace this device use impeller rendering backend opengles because it not support vulkan
    {
    "engineEnterTimestampMicros": 748152180499,
    "timeToFrameworkInitMicros": 1012992,
    "timeToFirstFrameRasterizedMicros": 4899094,
    "timeToFirstFrameMicros": 1041987,
    "timeAfterFrameworkInitMicros": 28995
    }

  4. removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Aug 6, 2026
  5. jtmcdole commented on Aug 7, 2026

    @jtmcdole
    Member

    2.6 seconds is not expected. We dont' have this gpu in our device lab. Can you give us:

    • The output of flutter doctor -v
    • Any timeline / traces you can give us.

    We have a bug template specifically for these types of reports to help the team diagnose issues: https://github.com/flutter/flutter/issues/new?template=05_performance_speed.yml

  6. added
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Aug 7, 2026
  7. abdullah517 commented on Aug 7, 2026

    @abdullah517
    Author

    this is flutter doctor -v result
    macbookpro@192 ~ % flutter doctor -v
    [✓] Flutter (Channel stable, 3.44.1, on macOS 15.7.1 24G231 darwin-x64, locale
    en-US) [4.6s]
    • Flutter version 3.44.1 on channel stable at
    /Users/macbookpro/flutterdev/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 924134a (2 months ago), 2026-05-29 12:13:22 -0400
    • Engine revision c416acf
    • Dart version 3.12.1
    • DevTools version 2.57.0
    • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop,
    enable-windows-desktop, enable-android, enable-ios, cli-animations,
    enable-native-assets, enable-swift-package-manager,
    omit-legacy-version-file, enable-lldb-debugging, enable-uiscene-migration

    [✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0)
    [10.8s]
    • Android SDK at /Users/macbookpro/Library/Android/sdk
    • Emulator version 36.3.10.0 (build_id 14472402) (CL:N/A)
    • Platform android-37.0, build-tools 36.1.0
    • ANDROID_HOME = /Users/macbookpro/Library/Android/sdk
    • ANDROID_SDK_ROOT = /Users/macbookpro/Library/Android/sdk
    • Java binary at: /Applications/Android
    Studio.app/Contents/jbr/Contents/Home/bin/java
    This is the JDK bundled with the latest Android Studio installation on
    this machine.
    To manually set the JDK path, use: flutter config --jdk-dir="path/to/jdk".
    • Java version OpenJDK Runtime Environment (build 21.0.8+-14196175-b1038.72)
    • All Android licenses accepted.

    [✓] Xcode - develop for iOS and macOS (Xcode 26.2) [8.5s]
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 17C52
    • CocoaPods version 1.16.2

    [✓] Chrome - develop for the web [21ms]
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

    [✓] Connected device (2 available) [9.9s]
    • macOS (desktop) • macos • darwin-x64 • macOS 15.7.1 24G231 darwin-x64
    • Chrome (web) • chrome • web-javascript • Google Chrome 151.0.7922.76

    [✓] Network resources [1,229ms]
    • All expected network resources are available.

    • No issues found!

    this is the gpu of device infinix x6835 MediaTek Helio G37

    i have attach below full stacktrace of startup of this device and this device use impeller rendering backend opengles kindly priortize this issue as we face warning in google play because its policy is less than 5 seconds cold start

    start_up_info.json
    start_up_timeline.json

  8. removed
    waiting for responseThe Flutter team cannot make further progress on this issue until the original reporter responds
    on Aug 7, 2026
  9. walley892 commented on Aug 10, 2026

    @walley892
    Contributor

    Hi @abdullah517, could you try re-running your performance testing at main/master instead of stable? We have some recent changes that should improve startup time for Impeller with the OpenGL backend.

  10. gaaclarke commented on Aug 10, 2026

    @gaaclarke
    Member

    In general vulkan is going to be faster than opengles. If they were the same speed we wouldn't have gone through the trouble to implement the vulkan backend =). Vulkan allows use to do a bit more work at compilation time that speeds up initialization.

    On windows I was seeing a huge difference with debug builds versus profile builds too, for what it's worth. There are slow things happening to maintain the ability to debug the engine.

  11. added
    P2Important issues not at the top of the work list
    on Aug 10, 2026
  12. abdullah517 commented on Aug 11, 2026

    @abdullah517
    Author

    Now here is the latest comparision by using Flutter 3.47.0-1.0.pre-502 • channel master branch here is stacktrace

    start_up_info.json

    and the old flutter 3.44.1 stable stacktrace is this

    start_up_info.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listteam-engineOwned by Engine teamtriaged-engineTriaged by Engine team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions