Move dvr config data from display manager to display service
* The limitation of creating only one display manager client
is preventing config data access on multiple threads
Bug: 38269706
Test: DvrDisplayManagerTest::ConfigurationData
Change-Id: Ifc14cf0dd79248aea6367aca70c4e4f8359a25de
diff --git a/libs/vr/libdisplay/display_client.cpp b/libs/vr/libdisplay/display_client.cpp
index 5a0c3d0..6175da7 100644
--- a/libs/vr/libdisplay/display_client.cpp
+++ b/libs/vr/libdisplay/display_client.cpp
@@ -167,6 +167,19 @@
return InvokeRemoteMethod<DisplayProtocol::GetMetrics>();
}
+Status<std::string> DisplayClient::GetConfigurationData(
+ ConfigFileType config_type) {
+ auto status =
+ InvokeRemoteMethod<DisplayProtocol::GetConfigurationData>(config_type);
+ if (!status && status.error() != ENOENT) {
+ ALOGE(
+ "DisplayClient::GetConfigurationData: Unable to get"
+ "configuration data. Error: %s",
+ status.GetErrorMessage().c_str());
+ }
+ return status;
+}
+
Status<std::unique_ptr<Surface>> DisplayClient::CreateSurface(
const SurfaceAttributes& attributes) {
int error;
diff --git a/libs/vr/libdisplay/display_manager_client.cpp b/libs/vr/libdisplay/display_manager_client.cpp
index 37d6ff9..098b725 100644
--- a/libs/vr/libdisplay/display_manager_client.cpp
+++ b/libs/vr/libdisplay/display_manager_client.cpp
@@ -70,20 +70,6 @@
return status;
}
-pdx::Status<std::string> DisplayManagerClient::GetConfigurationData(
- ConfigFileType config_type) {
- auto status =
- InvokeRemoteMethod<DisplayManagerProtocol::GetConfigurationData>(
- config_type);
- if (!status && status.error() != ENOENT) {
- ALOGE(
- "DisplayManagerClient::GetConfigurationData: Unable to get "
- "configuration data. Error: %s",
- status.GetErrorMessage().c_str());
- }
- return status;
-}
-
pdx::Status<std::unique_ptr<ConsumerQueue>>
DisplayManagerClient::GetSurfaceQueue(int surface_id, int queue_id) {
auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceQueue>(
diff --git a/libs/vr/libdisplay/include/private/dvr/display_client.h b/libs/vr/libdisplay/include/private/dvr/display_client.h
index e5b3340..ce0bc80 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_client.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_client.h
@@ -68,6 +68,7 @@
class DisplayClient : public pdx::ClientBase<DisplayClient> {
public:
pdx::Status<Metrics> GetDisplayMetrics();
+ pdx::Status<std::string> GetConfigurationData(ConfigFileType config_type);
pdx::Status<std::unique_ptr<IonBuffer>> GetGlobalBuffer(
DvrGlobalBufferKey key);
pdx::Status<std::unique_ptr<Surface>> CreateSurface(
diff --git a/libs/vr/libdisplay/include/private/dvr/display_manager_client.h b/libs/vr/libdisplay/include/private/dvr/display_manager_client.h
index c5ec231..7281b76 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_manager_client.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_manager_client.h
@@ -27,7 +27,6 @@
pdx::Status<std::unique_ptr<ConsumerQueue>> GetSurfaceQueue(int surface_id,
int queue_id);
- pdx::Status<std::string> GetConfigurationData(ConfigFileType config_type);
using Client::event_fd;
pdx::Status<int> GetEventMask(int events) {
diff --git a/libs/vr/libdisplay/include/private/dvr/display_protocol.h b/libs/vr/libdisplay/include/private/dvr/display_protocol.h
index b857d48..d1787e6 100644
--- a/libs/vr/libdisplay/include/private/dvr/display_protocol.h
+++ b/libs/vr/libdisplay/include/private/dvr/display_protocol.h
@@ -186,6 +186,12 @@
PDX_SERIALIZABLE_MEMBERS(SurfaceInfo, surface_id, visible, z_order);
};
+enum class ConfigFileType : uint32_t {
+ kLensMetrics,
+ kDeviceMetrics,
+ kDeviceConfiguration
+};
+
struct DisplayProtocol {
// Service path.
static constexpr char kClientPath[] = "system/vr/display/client";
@@ -193,6 +199,7 @@
// Op codes.
enum {
kOpGetMetrics = 0,
+ kOpGetConfigurationData,
kOpGetGlobalBuffer,
kOpIsVrAppRunning,
kOpCreateSurface,
@@ -207,6 +214,8 @@
// Methods.
PDX_REMOTE_METHOD(GetMetrics, kOpGetMetrics, Metrics(Void));
+ PDX_REMOTE_METHOD(GetConfigurationData, kOpGetConfigurationData,
+ std::string(ConfigFileType config_type));
PDX_REMOTE_METHOD(GetGlobalBuffer, kOpGetGlobalBuffer,
LocalNativeBufferHandle(DvrGlobalBufferKey key));
PDX_REMOTE_METHOD(IsVrAppRunning, kOpIsVrAppRunning, bool(Void));
@@ -219,12 +228,6 @@
void(const SurfaceAttributes& attributes));
};
-enum class ConfigFileType : uint32_t {
- kLensMetrics,
- kDeviceMetrics,
- kDeviceConfiguration
-};
-
struct DisplayManagerProtocol {
// Service path.
static constexpr char kClientPath[] = "system/vr/display/manager";
@@ -234,7 +237,6 @@
kOpGetSurfaceState = 0,
kOpGetSurfaceQueue,
kOpSetupGlobalBuffer,
- kOpGetConfigurationData,
kOpDeleteGlobalBuffer,
};
@@ -250,8 +252,6 @@
PDX_REMOTE_METHOD(SetupGlobalBuffer, kOpSetupGlobalBuffer,
LocalNativeBufferHandle(DvrGlobalBufferKey key, size_t size,
uint64_t usage));
- PDX_REMOTE_METHOD(GetConfigurationData, kOpGetConfigurationData,
- std::string(ConfigFileType config_type));
PDX_REMOTE_METHOD(DeleteGlobalBuffer, kOpDeleteGlobalBuffer,
void(DvrGlobalBufferKey key));
};