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

Commit 1c762d83 authored by Corey Tabaka's avatar Corey Tabaka Committed by android-build-merger
Browse files

Merge "Fix VR surface attributes not being read on surface create." into oc-mr1-dev

am: 0249b61e

Change-Id: Id42ba94342d2d2692791a8867270acfd008a113c
parents 4a499745 0249b61e
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -243,18 +243,16 @@ Status<display::SurfaceInfo> DisplayService::OnCreateSurface(
          surface_status.GetErrorMessage().c_str());
    return ErrorStatus(surface_status.error());
  }
  auto surface = surface_status.take();
  message.SetChannel(surface);

  SurfaceType surface_type = surface_status.get()->surface_type();
  display::SurfaceUpdateFlags update_flags =
      surface_status.get()->update_flags();
  display::SurfaceInfo surface_info{surface_status.get()->surface_id(),
                                    surface_status.get()->visible(),
                                    surface_status.get()->z_order()};
  // Update the surface with the attributes supplied with the create call. For
  // application surfaces this has the side effect of notifying the display
  // manager of the new surface. For direct surfaces, this may trigger a mode
  // change, depending on the value of the visible attribute.
  surface->OnSetAttributes(message, attributes);

  message.SetChannel(surface_status.take());

  SurfaceUpdated(surface_type, update_flags);
  return {surface_info};
  return {{surface->surface_id(), surface->visible(), surface->z_order()}};
}

void DisplayService::SurfaceUpdated(SurfaceType surface_type,
+4 −6
Original line number Diff line number Diff line
@@ -26,14 +26,12 @@ namespace dvr {

DisplaySurface::DisplaySurface(DisplayService* service,
                               SurfaceType surface_type, int surface_id,
                               int process_id, int user_id,
                               const display::SurfaceAttributes& attributes)
                               int process_id, int user_id)
    : service_(service),
      surface_type_(surface_type),
      surface_id_(surface_id),
      process_id_(process_id),
      user_id_(user_id),
      attributes_(attributes),
      update_flags_(display::SurfaceUpdateFlags::NewSurface) {}

DisplaySurface::~DisplaySurface() {
@@ -471,8 +469,8 @@ Status<std::shared_ptr<DisplaySurface>> DisplaySurface::Create(
  if (direct) {
    const bool trusted = user_id == AID_ROOT || IsTrustedUid(user_id);
    if (trusted) {
      return {std::shared_ptr<DisplaySurface>{new DirectDisplaySurface(
          service, surface_id, process_id, user_id, attributes)}};
      return {std::shared_ptr<DisplaySurface>{
          new DirectDisplaySurface(service, surface_id, process_id, user_id)}};
    } else {
      ALOGE(
          "DisplaySurface::Create: Direct surfaces may only be created by "
@@ -482,7 +480,7 @@ Status<std::shared_ptr<DisplaySurface>> DisplaySurface::Create(
    }
  } else {
    return {std::shared_ptr<DisplaySurface>{new ApplicationDisplaySurface(
        service, surface_id, process_id, user_id, attributes)}};
        service, surface_id, process_id, user_id)}};
  }
}

+6 −9
Original line number Diff line number Diff line
@@ -53,8 +53,7 @@ class DisplaySurface : public pdx::Channel {

 protected:
  DisplaySurface(DisplayService* service, SurfaceType surface_type,
                 int surface_id, int process_id, int user_id,
                 const display::SurfaceAttributes& attributes);
                 int surface_id, int process_id, int user_id);

  // Utility to retrieve a shared pointer to this channel as the desired derived
  // type.
@@ -119,10 +118,9 @@ class DisplaySurface : public pdx::Channel {
class ApplicationDisplaySurface : public DisplaySurface {
 public:
  ApplicationDisplaySurface(DisplayService* service, int surface_id,
                            int process_id, int user_id,
                            const display::SurfaceAttributes& attributes)
                            int process_id, int user_id)
      : DisplaySurface(service, SurfaceType::Application, surface_id,
                       process_id, user_id, attributes) {}
                       process_id, user_id) {}

  std::shared_ptr<ConsumerQueue> GetQueue(int32_t queue_id);
  std::vector<int32_t> GetQueueIds() const override;
@@ -140,10 +138,9 @@ class ApplicationDisplaySurface : public DisplaySurface {
class DirectDisplaySurface : public DisplaySurface {
 public:
  DirectDisplaySurface(DisplayService* service, int surface_id, int process_id,
                       int user_id,
                       const display::SurfaceAttributes& attributes)
                       int user_id)
      : DisplaySurface(service, SurfaceType::Direct, surface_id, process_id,
                       user_id, attributes),
                       user_id),
        acquired_buffers_(kMaxPostedBuffers),
        metadata_(nullptr) {}
  std::vector<int32_t> GetQueueIds() const override;