Skip to content

iOS apps on OpenGL can sometimes get blocked while rendering frames #51809

@flar

Description

@flar

Normally the engine wakes up every hardware frame cycle and asks the dart code to make a new scene and then hands the scene off to a GPU thread to rasterize and then waits for the next vsync to do the cycle again.

Sometimes, when the engine goes to rasterize the scene, it will get blocked in an OpenGL call and won't resume work until the next vsync happens - putting the rendering behind by a frame. Usually this results in the same thing happening to the next frame, over and over so the app will then always be an extra frame behind.

This is likely due to overusing some iOS frame-related resource, but we haven't been able to find a simple way to avoid that. It doesn't seem to happen if an app is quietly doing an animation, but any system noise can trigger the symptom which will persist until some other external influence knocks the frame pumping loop out of it again.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Issues that are less important to the Flutter projectc: performanceRelates to speed or footprint issues (see "perf:" labels)engineflutter/engine related. See also e: labels.perf: speedPerformance issues related to (mostly rendering) speedplatform-iosiOS applications specificallyteam-engineOwned by Engine team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions