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
diff --git a/libs/vr/libdisplay/display_client.cpp b/libs/vr/libdisplay/display_client.cpp
index 935ca2e..72db0dc 100644
--- a/libs/vr/libdisplay/display_client.cpp
+++ b/libs/vr/libdisplay/display_client.cpp
@@ -138,13 +138,13 @@
ALOGD_IF(TRACE, "Surface::CreateQueue: Allocating %zu buffers...", capacity);
for (size_t i = 0; i < capacity; i++) {
size_t slot;
- const int ret = producer_queue->AllocateBuffer(width, height, layer_count,
- format, usage, &slot);
- if (ret < 0) {
+ auto allocate_status = producer_queue->AllocateBuffer(
+ width, height, layer_count, format, usage, &slot);
+ if (!allocate_status) {
ALOGE(
"Surface::CreateQueue: Failed to allocate buffer on queue_id=%d: %s",
- producer_queue->id(), strerror(-ret));
- return ErrorStatus(ENOMEM);
+ producer_queue->id(), allocate_status.GetErrorMessage().c_str());
+ return allocate_status.error_status();
}
ALOGD_IF(
TRACE,