History log of /frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
f5d491cafa3cedf5ec01b07bb9c58b98a0361361 26-Jan-2018 John Bates <jbates@google.com> Workaround missing OnChannelClose for DisplayManagerService

After several doff/don cycles in a stress test, DisplayManagerService
eventually got into a state where it would not allow new connections
despite the old connection being long gone. We confirmed that it
had a display_manager_ pointer set when it should not have, which
means there was a missing OnChannelClose for probably some error
case that directly closed the channel without synthesizing the close.

Those cases should be fixed in followup CLs, but this change will
be helpful to guarantee Display Manager Service continues to operate
regardless. This service is uniquely sensitive to this bug.

Bug: 69004445
Test: Continuously doffed and donned with script
Change-Id: I46c47da38f1024b61dad0f6c19c64aeec53015a6
(cherry picked from commit 8dbbe5584b2fb9589fceed81333a0d5ff6c913a3)
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
b3732f08c0655998b2f31c76aac8595a343b511e 16-Sep-2017 Corey Tabaka <eieio@google.com> Deal with unreliable VSYNC signals due to scheduler.

We see two sources of scheduler jank when waiting for VSYNC:
- A kernfs issue that wakes up threads using a normal priority
work queue that may be delayed or have other work on it.
- The VSYNC callback from HWC is handled by a normal priority
HwBinder thread that may be delayed by other work.

Change the VrFlinger frame post thread to use an absolute timer-
based dead reckoning loop. VSYNC timestamps from the display
driver are reliable, even if the delivery of the value takes time.
Predict the VSYNC time into the future based on the last known
VSYNC time. If we see that VSYNC has not been signaled by the time
we need to post a frame to HWC we assume that the driver and/or
HWC was delayed so much that the previous frame is still pending
and skip the upcoming frame to avoid double stuffing the driver.

Bug: 65064949
Test: Extensive system tests and systraces. See bug for details.
Change-Id: Iae6c4173b8eac1d179adc3fc8004d3d475b3f156
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
99c2d73588dad4a4d12a17d37354237b8c11a16a 08-Jun-2017 Corey Tabaka <eieio@google.com> Move global buffer ops to VR display service.

The original home for these ops was the VR display manager service,
which is a protected singleton service that may only have one client.
Since more than one service needs to create global buffers, move these
ops to the display service. They are already protected by permission
checks.

Bug: 62424911
Test: dvr_api-test passes
Change-Id: Ia2f57fdf8a5258b52a652935d160e90db0f1cf9e
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
bcb03d005a4ccca20a0723f087e90e8b503b4848 23-May-2017 Hendrik Wagenaar <hendrikw@google.com> Move dvr config data from display manager to display service

* The limitation of creating only one display manager client
is preventing config data access on multiple threads

Bug: 38269706
Test: DvrDisplayManagerTest::ConfigurationData
Change-Id: Ifc14cf0dd79248aea6367aca70c4e4f8359a25de
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
954796e27e89209b38b35779949c243bec490c28 11-May-2017 John Bates <jbates@google.com> Add shmem config buffer to libvrflinger

This allows VrCore to configure some tunable behaviors
of libvrflinger.

- Added dvrDisplayManagerDeleteNamedBuffer for testing config buffer
creation.
- Added tests for named buffers, including one for the config buffer.
- Added IsValid to broadcast_ring to avoid tracking redundant state
externally.

Bug: 38193993
Test: Run dvr_named_buffer-test
Change-Id: I52722dd314233b5bea1ca6377c14b5c856825746
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
36d23803882c64b1006cd3b8a47e00a4193a9b49 16-May-2017 Okan Arikan <okana@google.com> Int key for the named buffers.

Also, rename them to global buffers from named buffers.

Bug: 38320428
Test: Run frameworks/native/libs/vr/libdvr/tests on device
Change-Id: I2109aea77e35f2ccd8055208058df4b7287c1d5e
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
010fe955420fa98caa7570a4d33c5f9bac2c5607 10-May-2017 Hendrik Wagenaar <hendrikw@google.com> Add ability to pass device metrics to GVR

* Passes config file data for the device to VrCore

Bug: 36215727
Test: DvrDisplayManagerTest::ConfigurationData - on marlin, SELinux on,
with and without setenforce.
Change-Id: Iee05b90a21937ed9b60658c70da87a8c99dfcbb2
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
2251d822dac2a96aad4184a6fdc2690f0a58af7c 21-Apr-2017 Corey Tabaka <eieio@google.com> Remove the VR compositor from the framework.

Remove the VR compositor framework and enable out-of-process VR composition
in VrCore.

This CL seems large due to the ripple effect of changing the VrFlinger
API and protocol types. There are three major modules that require
concurrent changes:
1. Protocol definitions and low-level VrFlinger API in libdisplay.
* Additional changes needed to keep old interfaces working for
a short time while replacing the dependent code (dvrGraphics*).
2. VrFlinger service implementation changes to support VrCore compositor
and the removal of the internal compositor.
3. Changes to libdvr platform library API due to changes in #1 and #2.

Because of the nature of the interdependence of types and other defs it is
difficult to break this CL into smaller chunks. However, review of the three
major modules (libdisplay, libdvr, and libvrflinger) may be done separately
to ease the mental burden on reviewers.

Change Summary:
- Remove obsolete screenshot service. VR screenshots will be implemented
by VrCore.
- Update display protocol definitions for changes in VrFlinger service
requirements. The majority of the changes in libdisplay are a
consequence of these protocol and service changes.
- Update VrFlinger to support two kinds of surfaces:
1. Application - use by VR apps.
2. Direct - used by VrCore (protected by permission check).
- Remove VrFlinger internal compositor and GL context.
- Remove obsolete debug console.
- Update VrFlinger hardware composer interface to handle direct
surfaces only, removing the concept of GPU (compositor) layers.
- Update display manager to expose access to application surface info
to VrCore (protected by permission check).
- Update libdvr platform library interfaces for changes to VrFlinger
API / protocol.
- Clean up libdvr API struct setup using a common include.
- Add C++ header-only helpers for DVR platform library opaque types.

Bug: 36401174
Test: Build; run VrFlinger display test tool.
Change-Id: I15abfde5f72dbb3725a3f58621486afba6b64902
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
3f82d31341f66d0c58e1ec3360ea5f528ffe0ea4 20-Apr-2017 Corey Tabaka <eieio@google.com> Remove unnecessary clients and rename files.

- Remove clients for obsolete services.
- Rename display protocol defs file to match purpose.
- Rename display manager client file. "impl" does not match naming
conventions used by DVR libraries.
- Remove video mesh surface interface. This will be replaced by more
general surface support in the unified O compositor.

Bug: 36401174
Test: Build; run cube sea.
Change-Id: Idb782623319329f6fa1b0aa45005d9fee3b9957d
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
0057fddc71d1c3c3de8f9d0bd45a51bb293bfa3c 02-May-2017 Jiwen 'Steve' Cai <jwcai@google.com> Deprecate producer/consumer usage: Step 2

Clean up bufferhub_rpc, display_rpc and service side producer/consumer
usage reference.

Next (final) step is to remove all remaining client side reference to
producer/consumer usage and update dvr_xxx API.

This also fixes a minor typo in dvr_named_buffer-test

Bug: 37881101
Test: Build, flash, ran particles.apk and buffer_hub_queue-test
Change-Id: Ibae4376c1fd1ed964843d8b2ad2fb27204fe5e28
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
eaa5522feac452703a0836310047d4b15702487d 06-Apr-2017 Hendrik Wagenaar <hendrikw@google.com> Convert the pose buffer into a more generic named buffer

* It's likely that we'll have more than one pose buffer
* It's cleaner to separate the vsync info into a separate buffer

Bug: 37001881
Bug: 37240552
Test: Added and manually ran TestNamedBuffersSetup
Change-Id: I76621d3cfa8c21c9d5d1e6e648854067673be9ab
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
f0a7bd033941e26e380232a0515e903cf8e678e5 01-Apr-2017 Alex Vakulenko <avakulenko@google.com> pdx: Rework error reporting when transfering file and channel handles

There is a lot of confusion about reporting errors when passing file
and channel handles over PDX transport between client and service.

Methods like Message::PushFileHandle return an integer which means
both a file handle reference value (if positive) and a possible error
code (if negative). But file handles could contain negative values too
(when they are empty). This is used frequently when passing buffer
fences around (when a fence is not being used, its fd is set to -1).

This results in a special case of when PushFileHandle is called with
a file handle with value of -1, the return value is actually "-errno"
which becomes dependent on a global state (errno is not set by
PushFileHandle itself in case file handle value is negative) and results
in unpredicted behavior (sometimes errno is 0, sometimes its >0).

Cleaned this all up by using Status<T> everywhere we used an int to
pass value payload along with possible error code.

Now the semantics of the calls are more clear.

Bug: 36866492
Test: `m -j32` for sailfish-eng succeeds
Ran unit tests on device (pdx_tests, libpdx_uds_tests, bufferhub_tests,
buffer_hub_queue-test, buffer_hub_queue_producer-test), all pass
Ran CubeSea, NativeTreasureHunt and Ithaca on Sailfish with vrflinger
enabled, was able to use controller and screen rendered correctly.

Change-Id: I0f40c3f356fcba8bc217d5219a0ddf9685e57fd7
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
10e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848 15-Mar-2017 Hendrik Wagenaar <hendrikw@google.com> Add dvr_buffer apis

Test: None
Bug: None
Change-Id: I234d7ef4dabb4453cdbc67d3112adf2ffbbadaf4
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
5c46fc496a2e9537f318efef9a08d1e76f5e7a5f 10-Mar-2017 Jiwen 'Steve' Cai <jwcai@google.com> Remove dvrDisplayManagerClientGetSurfaceBuffers

This should be replaced with BufferHubQueue

Bug: 36033302
Test: Build device targets
Change-Id: I658514e1b56b0bdbd523d3fa322f0f2b6a1fc7e8

Signed-off-by: Jiwen 'Steve' Cai <jwcai@google.com>
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp
a8a92784bc5f6a50ce00311c6161fbcfc0898c5a 27-Jan-2017 Alex Vakulenko <avakulenko@google.com> Add libvrflinger for use in SurfaceFlinger

A separate CL uses this code from SurfaceFlinger.

Bug: None
Test: Manually ran modified SurfaceFlinger
Change-Id: I34588df1365588c0a0265e1e2325e3dd5516206a
/frameworks/native/libs/vr/libvrflinger/display_manager_service.cpp