commit | 3fbab51c0319d1ae1e0032bdd572eddc07f46217 | [log] [tgz] |
---|---|---|
author | Alexander Biggs <akbiggs@google.com> | Sat Jul 16 19:50:05 2022 +0000 |
committer | Alexander Biggs <akbiggs@google.com> | Sat Jul 16 19:50:05 2022 +0000 |
tree | 8713c767ce38ec34c78c66c15cf4df5b88be4cf5 | |
parent | feb6aa2acf7cd0addef9496744d28c9374e129f4 [diff] |
[embedder] Software rendering using Flatland. The Flutter Embedder for Fuchsia is a new in-progress version of the Flutter runtime for Fuchsia, built on the Bazel SDK and using the ELF runner. - Cherrypicks in a CL for acquiring a software surface in the embedder API to libflutter_engine.so. - Adds a FlatlandViewProvider to initialize the view. - Adds software rendering callbacks to acquire and present the surface. Acquiring the surface is largely copied from our Flutter Engine code. - Add a FlatlandConnection helper class for interacting with Flatland. This is a common helper that is copied from our Flutter Engine code. - Currently only presents a single frame. Next steps: - Write unit tests. - Write integration test once screenshot support lands in the SDK. - Get fonts working. - Get multiple frames working (add an example app with an animation, e.g. a spinning cube). - Fix bug where sometimes the app fails to start rendering. Screenshot: https://photos.app.goo.gl/DMUAdraXVEXz443h9 Bug: 46971 Change-Id: Ie6421ab03e3d9f4a0a8d53da79100c8cab1dae53
The Flutter Embedder for Fuchsia is a new in-progress runtime for Flutter apps on Fuchsia. This runtime is built on top of Flutter's embedder platform.
This repository is a work in progress and should be considered experimental.
Install a Bazel version no older than the one defined in the WORKSPACE.bazel file, by following the instructions at https://bazel.build/install. In some Linux distributions, sudo apt-get install bazel
should be enough.
Make sure this repository has the required submodules:
git submodule update --recursive --init
Ensure that there are Fuchsia SSH keys in your host machine. You will need them for running the Fuchsia emulator.
[[ -f "${HOME}/.ssh/fuchsia_ed25519" ]] || ssh-keygen -P "" -t ed25519 -f "${HOME}/.ssh/fuchsia_ed25519" -C "${USER}@$(hostname -f) Shared SSH Key for Fuchsia" [[ -f "${HOME}/.ssh/fuchsia_authorized_keys" ]] || ssh-keygen -y -f "${HOME}/.ssh/fuchsia_ed25519" > "${HOME}/.ssh/fuchsia_authorized_keys"
Now the repository is ready to build the sample.
Fetch an emulator image and start an emulator:
tools/ffx product-bundle get workstation.qemu-x64 # If running in a graphical environment: tools/ffx emu start workstation.qemu-x64 # If running in a terminal environment: tools/ffx emu start --headless workstation.qemu-x64
(optional) Watch the device log in a separate window:
tools/ffx log
Run the sample app component:
scripts/build_and_run_sample_app.sh
TODO(akbiggs): The app occasionally gets stuck on a loading screen instead of rendering. Re-running the app usually fixes it. We need to fix this.
Occasionally you will need to update the Flutter Engine artifacts (embedder.h and libengine_flutter.so) that are used by the embedder to run Flutter apps. A script is provided for this workflow.
$ENGINE_DIR
should be set to the src
folder of your Flutter Engine checkout, for example ~/engine/src
.$FUCHSIA_EMBEDDER_DIR
should be set to your flutter-embedder.git checkout, for example ~/flutter-embedder
.$DEPOT_TOOLS
should be set to your depot_tools
location, for example ~/depot_tools
.git stash
or git commit
any local changes to the Flutter Engine or the script will fail.You can run the script with a flutter/engine
Git commit to sync the Engine artifacts to that revision.
scripts/sync_engine_artifacts_to_revision.sh <ENGINE_COMMIT_SHA>
A common workflow is to sync your Engine commit to the Flutter tool in this repository. To do this:
scripts/sync_engine_artifacts_to_revision.sh $(cat $FUCHSIA_EMBEDDER_DIR/third_party/dart-pkg/internal/flutter/flutter/bin/internal/engine.version)