Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bcb03d00 authored by Hendrik Wagenaar's avatar Hendrik Wagenaar
Browse files

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
parent bce1dead
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -167,6 +167,19 @@ Status<Metrics> DisplayClient::GetDisplayMetrics() {
  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;
+0 −14
Original line number Diff line number Diff line
@@ -70,20 +70,6 @@ pdx::Status<void> DisplayManagerClient::DeleteGlobalBuffer(
  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>(
+1 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ class Surface : public pdx::ClientBase<Surface> {
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(
+0 −1
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ class DisplayManagerClient : public pdx::ClientBase<DisplayManagerClient> {
  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) {
+9 −9
Original line number Diff line number Diff line
@@ -186,6 +186,12 @@ struct SurfaceInfo {
  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 @@ struct DisplayProtocol {
  // Op codes.
  enum {
    kOpGetMetrics = 0,
    kOpGetConfigurationData,
    kOpGetGlobalBuffer,
    kOpIsVrAppRunning,
    kOpCreateSurface,
@@ -207,6 +214,8 @@ struct DisplayProtocol {

  // 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 @@ struct DisplayProtocol {
                    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 @@ struct DisplayManagerProtocol {
    kOpGetSurfaceState = 0,
    kOpGetSurfaceQueue,
    kOpSetupGlobalBuffer,
    kOpGetConfigurationData,
    kOpDeleteGlobalBuffer,
  };

@@ -250,8 +252,6 @@ struct DisplayManagerProtocol {
  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));
};
Loading