[roll] Roll fuchsia [carnelian] Limited support for multiple displays

This is a reland of a reverted CL, 58ee00ae7727c934139c8582414d721419496123,

This changes adds limited multiple monitor support to Carnelian when
running directly on the display controller, enough to allow virtcon2 to
function in an acceptable manner. Future changes will improve on this
support so that applications can make good choices about what to do as
monitors come and go.

To make this work, I added a view mode enum (as suggested by reveman@)
to application Config. Auto works as environment detection has always
worked. Hosted is for apps that only wish to create views when hosted
by Scenic or Flatland. Direct is for apps that only wish to create
views directly on the display controller.

This view mode is necessary as it isn't possible to tell whether the
hosted environment is present if a Carnelian application is launched
before the display controller comes up.

This change stops using the Framebuffer struct from the
fuchsia-framebuffer crate with the eye towards eventually deprecating
that crate. https://fxbug.dev/84524

An implementation detail of this change is that it uses the display ID
of displays as the view key for views so that it is easy to map display
controller messages like Vsync to the view hosted on the display. If
that ends up being problematic a different mapping mechanism should be
introduced in a future CL.

Since this change separates application startup and view creation into
two steps it is a complete solution for https://fxbug.dev/83859.

I removed the early out in view creation in virtcon2, as it did not
behave correctly if a single monitor was unplugged then plugged in
again. I also used config to make virtcon always run in view mode
direct.

To test virtcon I made it the default and confirmed that it recovered
from have the monitor unplugged and replugged.

I tested the system recovery UI, which had no changes in behavior.

To test terminal I ran it under the terminal product configuration and
confirmed that it started up and rendered correctly.

I ran all the examples in view mode direct with and without Spinel. All
the examples that ran with Spinel before continue to work in view mode
direct. I will file individual bugs for the examples that work
incorrectly under Spinel.

Removed the get_frame_buffer_size trait function as that isn't used anymore and doesn't fit well with multi display support.

I tested a selection of examples under Scenic in the terminal product.

Testing: manual, see above for details.
Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/615188
Original-Revision: 1d096eaa36581d78125e9df5166c8c94f22250a5
GitOrigin-RevId: 21b39e956e5f00558663b47f9a4587e9d517be1d
Change-Id: I991158a7dc74b053efe63194d7e0981a0a7f9177
1 file changed
tree: 5838949e3b0428894bb5c51ec1adf2bb4c9e8187
  1. infra/
  2. third_party/
  3. cts
  4. firmware
  5. flower
  6. jiri.lock
  7. minimal
  8. prebuilts
  9. README.md
  10. stem
  11. test_durations
README.md

Integration

This repository contains Fuchsia's Global Integration manifest files.

Making changes

All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.

Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.

Obtaining the source

First install Jiri.

Next run:

$ jiri init
$ jiri import minimal https://fuchsia.googlesource.com/integration
$ jiri update

Third party

Third party projects should have their own subdirectory in ./third_party.