Skip to content

[iOS] Migrate to embedder API #112232

@cyanglaz

Description

@cyanglaz

Migrate iOS embedder to use the embedder API

The current planned steps are: (Check marked items are in flutter/main)

  • Setup a runtime flag to enable and disable Embedder api during the migration.
  • ☂️ Migrate iOS embedder objective-c code to ARC (Auto Reference Counting) #137801
  • Initialize the FlutterEngineProcTable& embedderAPI property, with callbacks left as TODOs.
  • Implementing features. This can be separated to smaller patches, enable tests along the way if possible
  • Run all the tests with the embedder API, make sure there are no meaningless regressions.
  • Remove legacy code and make embedder API stable.

In step 3 above, some features are non-trivial. They are listed are listed below: (Check marked items are in flutter/main)

  • Initialize FlutterEngine with EmbedderAPI.
  • Render content on FlutterView.
  • Background Platform Channel message
  • Touch events.
  • Keyboard Events.
  • External View Embedder (PlatformView)
  • SemanticsUpdate
  • VsyncWaiter

Additional graphics-related work

  • Impeller integration
  • Swapchain integration
  • Wide gamut
  • Hook up graphics debugger

A draft PR that contains the full migration is maintained here: flutter/engine#39988 as a reference while working on individual patches.

Below is a list of completed features in the draft PR. (Check marked items are the ones completed in the flutter/engine#39988)

  • Initialize FlutterEngine with EmbedderAPI.
  • Render content on FlutterView.
  • Background Platform Channel message. (Workaround)
  • Background Platform Channel message.
  • Touch events.
  • Keyboard Events.
  • External View Embedder (PlatformView) (In progress)
  • SemanticsUpdate
  • VsyncWaiter

Currently, the embedder API doesn't support impeller. #112230 is required to enable iOS to use impeller by default after the migration.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listengineflutter/engine related. See also e: labels.platform-iosiOS applications specificallyteam-iosOwned by iOS platform teamtriaged-iosTriaged by iOS platform team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions