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
diff --git a/libs/vr/libvrflinger/display_service.cpp b/libs/vr/libvrflinger/display_service.cpp
index 4cc5f02..b180848 100644
--- a/libs/vr/libvrflinger/display_service.cpp
+++ b/libs/vr/libvrflinger/display_service.cpp
@@ -227,6 +227,12 @@
if (global_buffer == global_buffers_.end()) {
auto ion_buffer = std::make_unique<IonBuffer>(static_cast<int>(size), 1,
HAL_PIXEL_FORMAT_BLOB, usage);
+
+ // Some buffers are used internally. If they were configured with an
+ // invalid size or format, this will fail.
+ int result = hardware_composer_.OnNewGlobalBuffer(key, *ion_buffer.get());
+ if (result < 0)
+ return ErrorStatus(result);
global_buffer =
global_buffers_.insert(std::make_pair(key, std::move(ion_buffer)))
.first;
@@ -235,6 +241,17 @@
return {BorrowedNativeBufferHandle(*global_buffer->second, 0)};
}
+pdx::Status<void> DisplayService::DeleteGlobalBuffer(DvrGlobalBufferKey key) {
+ auto global_buffer = global_buffers_.find(key);
+ if (global_buffer != global_buffers_.end()) {
+ // Some buffers are used internally.
+ hardware_composer_.OnDeletedGlobalBuffer(key);
+ global_buffers_.erase(global_buffer);
+ }
+
+ return {0};
+}
+
void DisplayService::OnHardwareComposerRefresh() {
hardware_composer_.OnHardwareComposerRefresh();
}