blob: dcb7049359163fdbdc7f9445157fd8b180e95929 [file] [view]
# Root Presenter
This directory contains the Root Presenter, a service which manages input device lifecycle,
lower-level input event dispatch, creation of the root of the global scene graph, and connection of
root-level Views by clients such as Sys UI.
This collection of code has a lot of complexity, and you may find various workarounds that exist for
very specific purposes. Additionally, the code and comments make assumptions (both explicit and
implicit) that may no longer hold. Please don't make plans and patches based on what you see in the
repository! Instead, reach out to the OWNERS to coordinate your intended work.
## Usage
This program is a server, and so is not started directly. See the `present_view` tool.
## CMX file and integration tests
Note that the `meta/` directory has two CMX files. One is for production, the
other for tests.
The production package `//src/ui/bin/root_presenter:root_presenter` includes
`meta/root_presenter.cmx`, which exists to enable access to the input device files in
`/dev/class/input-report`. The regular content is pulled in from
`meta/root_presenter_base.cmx`.
Test packages should include `meta/root_presenter_base.cmx`, which omits the
driver access. Generally, test packages should include their own copy of a
component (including CMX file) to ensure hermeticity with respect to package
loading semantics.
Integration tests don't require access to the device files, because (1) input
injection occurs at a different protocol in Root Presenter, and (2) exposure to
the actual device files is a flake liability for these tests.
During regular maintenance, when adding a new service dependency, add it to
`meta/root_presenter_base.cmx`, so that it is seen in both tests and production.