[flatland] Handle fence overflow in flatland_connection.cc (#53366)

flatland_connection.cc used to allow an arbitrary number of acquire and release fences to be scheduled for each frame.

Sadly, Fuchsia has a limitation of (1) the number of total handles that can be sent per a FIDL call, but also (2) the Flatland protocol only supports sending up to 16 fences per each fence type.

Now, normally there should be very few scheduled fences per frame. But if frames get skipped, we could amass many fences which would then crash our attempts to send all of them to the Flatland `Present` endpoint.

This change introduces two fence multiplexer, which allow us to signal more than 16 fences per type, at a performance penalty. We expect to be able *not* to crash the FIDL subsystem using this approach, and may even be able to hobble along for a bit, until the fences issue is hopefully self-resolved.

That said, this issue seems to indicate there are frame scheduling problems elsewhere. But this is a fairly straightforward change to make without affecting the rest of the flatland code or integration, so we opt to do that first.

Issues: [#150136](https://github.com/flutter/engine/pull/53366)

- [] I updated/added relevant documentation (doc comments with `///`).
5 files changed
tree: efdba680ec9e400c970c5d0aec7c52836df3e23e
  1. .github/
  2. assets/
  3. benchmarking/
  4. bin/
  5. build/
  6. build_overrides/
  7. ci/
  8. common/
  9. display_list/
  10. docs/
  11. examples/
  12. flow/
  13. flutter_frontend_server/
  14. flutter_vma/
  15. fml/
  16. impeller/
  17. lib/
  18. runtime/
  19. shell/
  20. skia/
  21. sky/
  22. testing/
  23. third_party/
  24. tools/
  25. vulkan/
  26. wasm/
  27. web_sdk/
  28. .ci.yaml
  29. .clang-format
  30. .clang-tidy
  31. .clangd
  32. .engine-release.version
  33. .gitattributes
  34. .gitignore
  35. .pylintrc
  36. .style.yapf
  37. analysis_options.yaml
  38. AUTHORS
  39. BUILD.gn
  40. CODEOWNERS
  41. CONTRIBUTING.md
  42. DEPS
  43. Doxyfile
  44. LICENSE
  45. README.md
README.md

Flutter Engine

Flutter CI Status OpenSSF Scorecard SLSA 1

Flutter is Google's SDK for crafting beautiful, fast user experiences for mobile, web, and desktop from a single codebase. Flutter works with existing code, is used by developers and organizations around the world, and is free and open source.

The Flutter Engine is a portable runtime for hosting Flutter applications. It implements Flutter's core libraries, including animation and graphics, file and network I/O, accessibility support, plugin architecture, and a Dart runtime and compile toolchain. Most developers will interact with Flutter via the Flutter Framework, which provides a modern, reactive framework, and a rich set of platform, layout and foundation widgets.

If you want to run/contribute to Flutter Web engine, more tooling can be found at felt. This is a tool written to make web engine development experience easy.

If you are new to Flutter, then you will find more general information on the Flutter project, including tutorials and samples, on our Web site at Flutter.dev. For specific information about Flutter's APIs, consider our API reference which can be found at the docs.flutter.dev.

Flutter is a fully open source project, and we welcome contributions. Information on how to get started can be found at our contributor guide.