| # 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. |