Add support for consumer queue initial import and hangup.
- Add support for consumer queues to import buffers that are created
before the consumer queue is created, making multi-consumer queue
patterns possible. This is essential for VrFlinger operation.
- Add support for notifying consumer queues when the producer queue
hangs up.
- Correct the epoll event loop to check for hangups even when buffers
are available.
- Add method to retrieve the event fd from a queue.
- Add trace logging and minor cleanup.
- Improve bufferhubd dump state output.
Bug: 36401174
Test: build; bufferhub tests pass.
Change-Id: Idd6f38a3341c048192062734e288d11de48bc4d4
diff --git a/services/vr/bufferhubd/producer_channel.cpp b/services/vr/bufferhubd/producer_channel.cpp
index e452d04..398aa12 100644
--- a/services/vr/bufferhubd/producer_channel.cpp
+++ b/services/vr/bufferhubd/producer_channel.cpp
@@ -199,10 +199,15 @@
return ErrorStatus(EBUSY);
}
- if (meta_size_bytes_ != metadata.size())
+ if (meta_size_bytes_ != metadata.size()) {
+ ALOGD_IF(TRACE,
+ "ProducerChannel::OnProducerPost: Expected meta_size_bytes=%zu "
+ "got size=%zu",
+ meta_size_bytes_, metadata.size());
return ErrorStatus(EINVAL);
- std::copy(metadata.begin(), metadata.end(), meta_.get());
+ }
+ std::copy(metadata.begin(), metadata.end(), meta_.get());
post_fence_ = std::move(acquire_fence);
producer_owns_ = false;