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
diff --git a/libs/vr/libdisplay/display_client.cpp b/libs/vr/libdisplay/display_client.cpp
index 6d39cdb..ef50a0f 100644
--- a/libs/vr/libdisplay/display_client.cpp
+++ b/libs/vr/libdisplay/display_client.cpp
@@ -216,7 +216,8 @@
return 0;
}
-pdx::Status<void> DisplayClient::SetViewerParams(const ViewerParams& viewer_params) {
+pdx::Status<void> DisplayClient::SetViewerParams(
+ const ViewerParams& viewer_params) {
auto status = InvokeRemoteMethod<DisplayRPC::SetViewerParams>(viewer_params);
if (!status) {
ALOGE("DisplayClient::SetViewerParams: Failed to set viewer params: %s",
@@ -252,16 +253,20 @@
return DisplaySurfaceClient::Create(width, height, format, usage, flags);
}
-std::unique_ptr<BufferConsumer> DisplayClient::GetPoseBuffer() {
- auto status = InvokeRemoteMethod<DisplayRPC::GetPoseBuffer>();
+std::unique_ptr<IonBuffer> DisplayClient::GetNamedBuffer(
+ const std::string& name) {
+ auto status = InvokeRemoteMethod<DisplayRPC::GetNamedBuffer>(name);
if (!status) {
ALOGE(
- "DisplayClient::GetPoseBuffer: Failed to get pose buffer %s",
- status.GetErrorMessage().c_str());
+ "DisplayClient::GetNamedBuffer: Failed to get pose buffer. name=%s, "
+ "error=%s",
+ name.c_str(), status.GetErrorMessage().c_str());
return nullptr;
}
- return BufferConsumer::Import(std::move(status));
+ auto ion_buffer = std::make_unique<IonBuffer>();
+ status.take().Import(ion_buffer.get());
+ return ion_buffer;
}
bool DisplayClient::IsVrAppRunning() {
diff --git a/libs/vr/libdisplay/display_manager_client_impl.cpp b/libs/vr/libdisplay/display_manager_client_impl.cpp
index 7993fce..44b3c4b 100644
--- a/libs/vr/libdisplay/display_manager_client_impl.cpp
+++ b/libs/vr/libdisplay/display_manager_client_impl.cpp
@@ -31,19 +31,22 @@
return 0;
}
-std::unique_ptr<BufferProducer> DisplayManagerClient::SetupPoseBuffer(
- size_t extended_region_size, int usage) {
- auto status = InvokeRemoteMethod<DisplayManagerRPC::SetupPoseBuffer>(
- extended_region_size, usage);
+std::unique_ptr<IonBuffer> DisplayManagerClient::SetupNamedBuffer(
+ const std::string& name, size_t size, uint64_t producer_usage,
+ uint64_t consumer_usage) {
+ auto status = InvokeRemoteMethod<DisplayManagerRPC::SetupNamedBuffer>(
+ name, size, producer_usage, consumer_usage);
if (!status) {
ALOGE(
- "DisplayManagerClient::SetupPoseBuffer: Failed to create the pose "
- "buffer %s",
- status.GetErrorMessage().c_str());
+ "DisplayManagerClient::SetupNamedBuffer: Failed to create the named "
+ "buffer: name=%s, error=%s",
+ name.c_str(), status.GetErrorMessage().c_str());
return {};
}
- return BufferProducer::Import(std::move(status));
+ auto ion_buffer = std::make_unique<IonBuffer>();
+ status.take().Import(ion_buffer.get());
+ return ion_buffer;
}
} // namespace dvr
diff --git a/libs/vr/libdisplay/include/private/dvr/display_client.h b/libs/vr/libdisplay/include/private/dvr/display_client.h
index 378f67c..fec2ea5 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_client.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_client.h
@@ -108,7 +108,7 @@
std::unique_ptr<DisplaySurfaceClient> CreateDisplaySurface(
int width, int height, int format, int usage, int flags);
- std::unique_ptr<BufferConsumer> GetPoseBuffer();
+ std::unique_ptr<IonBuffer> GetNamedBuffer(const std::string& name);
// Temporary query for current VR status. Will be removed later.
bool IsVrAppRunning();
diff --git a/libs/vr/libdisplay/include/private/dvr/display_manager_client_impl.h b/libs/vr/libdisplay/include/private/dvr/display_manager_client_impl.h
index 144cd3b..b0a7d13 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_manager_client_impl.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_manager_client_impl.h
@@ -17,8 +17,10 @@
int GetSurfaceList(std::vector<DisplaySurfaceInfo>* surface_list);
- std::unique_ptr<BufferProducer> SetupPoseBuffer(size_t extended_region_size,
- int usage);
+ std::unique_ptr<IonBuffer> SetupNamedBuffer(const std::string& name,
+ size_t size,
+ uint64_t producer_usage,
+ uint64_t consumer_usage);
using Client::event_fd;
using Client::GetChannel;
diff --git a/libs/vr/libdisplay/include/private/dvr/display_rpc.h b/libs/vr/libdisplay/include/private/dvr/display_rpc.h
index ac08650..c12b090 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_rpc.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_rpc.h
@@ -9,6 +9,7 @@
#include <pdx/rpc/remote_method.h>
#include <pdx/rpc/serializable.h>
#include <pdx/rpc/variant.h>
+#include <private/dvr/bufferhub_rpc.h>
#include <private/dvr/display_types.h>
namespace android {
@@ -218,7 +219,7 @@
kOpCreateVideoMeshSurface,
kOpVideoMeshSurfaceCreateProducerQueue,
kOpSetViewerParams,
- kOpGetPoseBuffer,
+ kOpGetNamedBuffer,
kOpIsVrAppRunning,
};
@@ -247,8 +248,8 @@
LocalChannelHandle(Void));
PDX_REMOTE_METHOD(SetViewerParams, kOpSetViewerParams,
void(const ViewerParams& viewer_params));
- PDX_REMOTE_METHOD(GetPoseBuffer, kOpGetPoseBuffer,
- LocalChannelHandle(Void));
+ PDX_REMOTE_METHOD(GetNamedBuffer, kOpGetNamedBuffer,
+ LocalNativeBufferHandle(const std::string& name));
PDX_REMOTE_METHOD(IsVrAppRunning, kOpIsVrAppRunning, int(Void));
};
@@ -260,7 +261,7 @@
enum {
kOpGetSurfaceList = 0,
kOpUpdateSurfaces,
- kOpSetupPoseBuffer,
+ kOpSetupNamedBuffer,
};
// Aliases.
@@ -273,8 +274,11 @@
PDX_REMOTE_METHOD(
UpdateSurfaces, kOpUpdateSurfaces,
int(const std::map<int, DisplaySurfaceAttributes>& updates));
- PDX_REMOTE_METHOD(SetupPoseBuffer, kOpSetupPoseBuffer,
- LocalChannelHandle(size_t extended_region_size, int usage));
+ PDX_REMOTE_METHOD(SetupNamedBuffer, kOpSetupNamedBuffer,
+ LocalNativeBufferHandle(const std::string& name,
+ size_t size,
+ uint64_t producer_usage,
+ uint64_t consumer_usage));
};
struct ScreenshotData {