52ea25cf06cef250ec73052611b48556b3fce4d5 |
|
14-Sep-2017 |
Corey Tabaka <eieio@google.com> |
Add shared memory based buffer metadata This CLs reduces BufferHub CPU consumption by adding asynchronous state transition so that out-of-process VR composition can run on 2016 pixel devices smoothly. In addition, this CL addresses a couple corner cases in the existing bufferhub logic, which fixes various blackscreen issues. 1/ Tracks buffer transition states (gained, posted, acquired, released) from the client side via atomic shared memory and adds PostAsync/AcquireAsync/ReleaseAsync/GainAsync with metadata and fence support. 2/ Adds dequeue order guarantee for buffers enqueued with dvrWriteBufferQueuePostBuffer. 3/ Synchronous BuffeHub operations are still supported. 4/ Bump up the bufferhubd's soft limit of open file descriptor. 5/ Handle orphaned consumer in acquired state. This is a corner case that consumer process goes aways (most likely due to a crash) leaving buffer stuck in acquired state with inconsistent buffer state. 6/ Fixes a race condition for released buffer to be Gain'ed and Acquire'd when a new consumer is created in released state. 7/ Improve silent consumer queue efficiency: Silent queues no longer import buffers or receive signals about new buffers and they are limited to only spawning other consumers and notifications about producers hanging up. 8/ Modify PDX/UDS channel event signaling to work around epoll behavior. PDX UDS uses a combination of an eventfd and an epoll set to simulate the original PDX transport channel events. An odd behavior discovered in the kernel implementation of epoll was found that causes the epoll fd to "unsignal" itself whenever epoll_wait() is called on it, regardless of whether it should still be pending. This breaks the edge triggerd behavior in nested epoll sets that channel events depend on. Since this is unlikely to ever be fixed in the kernel we work around the behavior by using the epoll set only as a logical OR of two eventfds and never calling epoll_wait() on it. When polling is required we use regluar poll() with the eventfds and data fd to avoid the bad behavior in epoll_wait(). 9/ Keep reading data after PDX hangup signal. UDS will signal hangup when the other end of the socket closes. However, data could still be in the kerenl buffer and should be consumed. Fix an issue where the service misses an impulse sent right before the socket is closed. Bug: 65455724 Bug: 65458354 Bug: 65458312 Bug: 64027135 Bug: 67424527 Test: libpdx_uds_tests bufferhub_tests buffer_hub_queue-test buffer_hub_queue_producer-test dvr_api-test Change-Id: Id07db1f206ccf4e06f7ee3c671193334408971ca
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
005f45d7bb059c0ef8d69f1cac81bca4f70852af |
|
05-Aug-2017 |
Jiwen 'Steve' Cai <jwcai@google.com> |
BufferHubQueueProducer reset buffers on disconnect When Surface.cpp disconnects a IGraphicBufferProducer, it clears up all the buffer cache it holds. Thus our implementation should do the same. New tests: 1/ BufferHubQueueProducerTest.ConnectDisconnectReconnect: tests IGraphicBufferProducer to behave proper after disconnect and re-connect. 2/ BufferHubQueueTest.TestFreeAllBuffers: tests BufferHubQueue handles FreeAllBuffers() properly under different producer/consumer state. Bug: 64402829 Test: Pause and resume GVR video player demo and observer no more fails around IGraphicBufferProducer::requestBuffer and Surface::dequeueBuffer. Change-Id: Ia61e3f991248135cecf22039045f6960226bda42
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
8fa4e107ab6cbc24c0e54d44db3341f006fe939a |
|
25-May-2017 |
Jiwen 'Steve' Cai <jwcai@google.com> |
buffer_hub_queue_client: Batch allocate buffers Bug: 36147743 Test: buffer_hub_queue-test, buffer_hub_queue_producer-test, dvr_api-test Change-Id: I40a9babfa8d28d4496e27a7ccecb7ae1b9bc7bd5
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
bb701dbac7c9c9eb2a7d0ec48c5e020f1272de13 |
|
23-May-2017 |
Jiwen 'Steve' Cai <jwcai@google.com> |
BufferHubQueue rename DetachBuffer to RemoveBuffer Test: buffer_hub_queue_producer-test, buffer_hub_queue-test, dvr_api-test Bug: 37164481 Change-Id: I05ba0f9f96cf60b64cb8b76482301440d40aa82a
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
6bffc67cec8bd8ad086d5a6265dedb737073bdea |
|
19-May-2017 |
Jiwen 'Steve' Cai <jwcai@google.com> |
Add more attribute when creating ProducerQueue Add `is_async`, `default_width`, `default_height` and `default_format`. Note that these attributes are currently treated as immutable after queue gets created. Bug: 38324405 Bug: 38430974 Bug: 36724099 Test: buffer_hub_queue_producer-test, buffer_hub_queue-test, dvr_api-test Change-Id: Id242a15388a1f1457ad89d11336f5643685e8361
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
cbd32bfd3a8dbac30228acbaee1daaf2466d643f |
|
19-May-2017 |
Jiwen 'Steve' Cai <jwcai@google.com> |
Simplify ProducerQueue::Create This is a preparation CL that simplifies ProducerQueue's constructor, Create(), and bufferhub_rpc::CreateProducerQueue prior to introducing more queue attributes (is_async, width, height, max_capacity, etc) on creation. 1/ Consolidate and/or remove unnecessary ProducerQueue::Create's overloading (we had way too many overloads of the create function and I figured it's awfully painful to introduce new attributes). 2/ Use UsagePolicy in ProducerQueue::Create. Also added default values for UsagePolicy, so that empty uniform initialization gives us a default policy. This helps us removing all ProducerQueue::Create overloading on whether default usage policy is needed. 3/ Move |meta_size_bytes| into ProducerQueueConfig. Bug: 38430974 Test: buffer_hub_queue_producer-test, buffer_hub_queue-test, dvr_api-test Change-Id: Ieba9f4d1bce2162bd1e6063989985afc8d014dc7
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
b7ca5dee2045d9426e68f863b244012a2b223ea8 |
|
09-May-2017 |
Corey Tabaka <eieio@google.com> |
Clean up BufferHubQueue API and internal bookkeeping. - Simplify buffer hangup accounting. - Add extra checks to gracefully handle the epoll set and slots array being out of sync. - Add tests for detaching buffers. - Switch to using Status<T> for all return/error values. - Fix minor bug in BufferHubQueueProducer from earlier Status<T> return value change. Bug: 36401174 Test: buffer_hub_queue-test passes. Change-Id: If7f86a45cc048dc77daa2ede56585d3f882dd24f
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
108e84f7e6a9117b66dba000dcf16c6d8c862e16 |
|
08-May-2017 |
Hendrik Wagenaar <hendrikw@google.com> |
dvrapi: Pass layer_count down * We were missing layer count, which would prevent multiview from working Bug: 37245304 Test: MultiLayerBufferQueue Change-Id: I88b41f1aa7665df01e89a7386cbc23b15c9a79b0
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
4d3590f3fd0fd65f4e8758d3228de9f55cf135d0 |
|
07-May-2017 |
Hendrik Wagenaar <hendrikw@google.com> |
Remove slices from buffers * code no longer required, as it will be handled in vrcore Bug: 38076195 Test: Manually ran testing Change-Id: Id28918a3bf73b99cbb57aad4c21251b7a9623074
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
2b99ee560ba14b617ebb4c1997e8b8004f2de22f |
|
04-May-2017 |
Corey Tabaka <eieio@google.com> |
Support multiple consumer queues. - Add support for importing posted buffers when spawing a new consumer queue. - Correctly handle adding signaled buffers to epoll with edge triggered mode set. - Add test for multi-consumer behavior. Bug: 36401174 Test: buffer_hub_queue-test passes. Change-Id: Id09f01502a1b18bf80a0ae465c2941b548cde2e4
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
9d8bd09569322f452fddf91e581904f1e8f6849c |
|
26-Apr-2017 |
Corey Tabaka <eieio@google.com> |
Return pdx::Status<T> from BufferHubQueue::Dequeue. Switch to using Status<T> to return buffers or meaningful errors from BufferHubQueue::Dequeue. This enables determining whether an error is normal (e.g. timeout) or abnormal (e.g. disconnect). Bug: 36401174 Test: buffer_hub_queue-test passes. Change-Id: Ifef5f737a5e737b70d19bdbffd7544a993438e1c
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
1db8a5d7e3b0565b976e77859e28d77f6a451a2b |
|
22-Mar-2017 |
Corey Tabaka <eieio@google.com> |
Update BufferHubQueue in preparation for VrFlinger refactor. - Expose buffer hub queue id to the client. This helpful as an id in queue enumeration in the DisplayManager API. - Address log convention deviations. - Clean up BufferHub service error paths. - Clean up queue importing logic to query the service for queue parameters to avoid accidental abuse. - Make spawning consumer queues more efficient in RPC only cases. - Clean up ConsumerQueue constructor logic; move to pdx::Client base class (through BufferHubQueue) instead of pdx::ClientBase. ConsumerQueue::Create doesn't make sense as a ConsumerQueue can only be created from another queue. Bug: 36401174 Test: build; run buffer_hub_queue-test Change-Id: I0530f64ecb514d0f37bb13f9ce201b6ff51502b6
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
ed6543224138fd753eeea909918bb8d1d2efb1e6 |
|
14-Mar-2017 |
Jiwen 'Steve' Cai <jwcai@google.com> |
Expose acquire_fence though ConsumerQueue::Dequeue The current compositor implementation will be refactored to use BufferHubQueue instead of ad-hoc BufferHub operations. We need this to expose release_fence to compositor so that it can wait for buffers to become avaiable by checking fence properly. Bug: 36033302 Bug: 36148608 Test: Built and ran buffer_hub_queue-test Change-Id: I75cfcb02e06a4b9e7e89b89690ca2d92ee09a678
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|
e4eec20f6263f4a42ae462456f60ea6c4518bb0a |
|
27-Jan-2017 |
Alex Vakulenko <avakulenko@google.com> |
Add DaydreamVR native libraries and services Upstreaming the main VR system components from master-dreamos-dev into goog/master. Bug: None Test: `m -j32` succeeds. Sailfish boots and basic_vr sample app works Change-Id: I853015872afc443aecee10411ef2d6b79184d051
/frameworks/native/libs/vr/libbufferhubqueue/tests/buffer_hub_queue-test.cpp
|