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

Commit 27200c99 authored by Corey Tabaka's avatar Corey Tabaka Committed by android-build-merger
Browse files

Merge "Revert "Deprecate producer/consumer usage: Step 3"" into oc-dev

am: cffef956

Change-Id: I9bc11e913ec84acbbe90a255ed95851dc1d953d0
parents b73fa1e5 cffef956
Loading
Loading
Loading
Loading
+52 −20
Original line number Diff line number Diff line
@@ -199,18 +199,27 @@ int BufferConsumer::SetIgnore(bool ignore) {
}

BufferProducer::BufferProducer(uint32_t width, uint32_t height, uint32_t format,
                               uint64_t usage, size_t metadata_size,
                               uint32_t usage, size_t metadata_size,
                               size_t slice_count)
    : BufferProducer(width, height, format, usage, usage, metadata_size,
                     slice_count) {}

BufferProducer::BufferProducer(uint32_t width, uint32_t height, uint32_t format,
                               uint64_t producer_usage, uint64_t consumer_usage,
                               size_t metadata_size, size_t slice_count)
    : BASE(BufferHubRPC::kClientPath) {
  ATRACE_NAME("BufferProducer::BufferProducer");
  ALOGD_IF(TRACE,
           "BufferProducer::BufferProducer: fd=%d width=%u height=%u format=%u "
           "usage=%" PRIx64 " metadata_size=%zu slice_count=%zu",
           event_fd(), width, height, format, usage, metadata_size,
           slice_count);
           "producer_usage=%" PRIx64 " consumer_usage=%" PRIx64
           " metadata_size=%zu slice_count=%zu",
           event_fd(), width, height, format, producer_usage, consumer_usage,
           metadata_size, slice_count);

  // (b/37881101) Deprecate producer/consumer usage
  auto status = InvokeRemoteMethod<BufferHubRPC::CreateBuffer>(
      width, height, format, usage, metadata_size, slice_count);
      width, height, format, (producer_usage | consumer_usage), metadata_size,
      slice_count);
  if (!status) {
    ALOGE(
        "BufferProducer::BufferProducer: Failed to create producer buffer: %s",
@@ -230,20 +239,29 @@ BufferProducer::BufferProducer(uint32_t width, uint32_t height, uint32_t format,

BufferProducer::BufferProducer(const std::string& name, int user_id,
                               int group_id, uint32_t width, uint32_t height,
                               uint32_t format, uint64_t usage,
                               uint32_t format, uint32_t usage,
                               size_t meta_size_bytes, size_t slice_count)
    : BufferProducer(name, user_id, group_id, width, height, format, usage,
                     usage, meta_size_bytes, slice_count) {}

BufferProducer::BufferProducer(const std::string& name, int user_id,
                               int group_id, uint32_t width, uint32_t height,
                               uint32_t format, uint64_t producer_usage,
                               uint64_t consumer_usage, size_t meta_size_bytes,
                               size_t slice_count)
    : BASE(BufferHubRPC::kClientPath) {
  ATRACE_NAME("BufferProducer::BufferProducer");
  ALOGD_IF(TRACE,
           "BufferProducer::BufferProducer: fd=%d name=%s user_id=%d "
           "group_id=%d width=%u height=%u format=%u usage=%" PRIx64
           " meta_size_bytes=%zu slice_count=%zu",
           "group_id=%d width=%u height=%u format=%u producer_usage=%" PRIx64
           " consumer_usage=%" PRIx64 " meta_size_bytes=%zu slice_count=%zu",
           event_fd(), name.c_str(), user_id, group_id, width, height, format,
           usage, meta_size_bytes, slice_count);
           producer_usage, consumer_usage, meta_size_bytes, slice_count);

  // (b/37881101) Deprecate producer/consumer usage
  auto status = InvokeRemoteMethod<BufferHubRPC::CreatePersistentBuffer>(
      name, user_id, group_id, width, height, format, usage, meta_size_bytes,
      slice_count);
      name, user_id, group_id, width, height, format,
      (producer_usage | consumer_usage), meta_size_bytes, slice_count);
  if (!status) {
    ALOGE(
        "BufferProducer::BufferProducer: Failed to create/get persistent "
@@ -263,19 +281,26 @@ BufferProducer::BufferProducer(const std::string& name, int user_id,
  }
}

BufferProducer::BufferProducer(uint64_t usage, size_t size)
BufferProducer::BufferProducer(uint32_t usage, size_t size)
    : BufferProducer(usage, usage, size) {}

BufferProducer::BufferProducer(uint64_t producer_usage, uint64_t consumer_usage,
                               size_t size)
    : BASE(BufferHubRPC::kClientPath) {
  ATRACE_NAME("BufferProducer::BufferProducer");
  ALOGD_IF(TRACE, "BufferProducer::BufferProducer: usage=%" PRIx64 " size=%zu",
           usage, size);
  ALOGD_IF(TRACE,
           "BufferProducer::BufferProducer: producer_usage=%" PRIx64
           " consumer_usage=%" PRIx64 " size=%zu",
           producer_usage, consumer_usage, size);
  const int width = static_cast<int>(size);
  const int height = 1;
  const int format = HAL_PIXEL_FORMAT_BLOB;
  const size_t meta_size_bytes = 0;
  const size_t slice_count = 1;

  // (b/37881101) Deprecate producer/consumer usage
  auto status = InvokeRemoteMethod<BufferHubRPC::CreateBuffer>(
      width, height, format, usage, meta_size_bytes,
      width, height, format, (producer_usage | consumer_usage), meta_size_bytes,
      slice_count);
  if (!status) {
    ALOGE("BufferProducer::BufferProducer: Failed to create blob: %s",
@@ -294,22 +319,29 @@ BufferProducer::BufferProducer(uint64_t usage, size_t size)
}

BufferProducer::BufferProducer(const std::string& name, int user_id,
                               int group_id, uint64_t usage, size_t size)
                               int group_id, uint32_t usage, size_t size)
    : BufferProducer(name, user_id, group_id, usage, usage, size) {}

BufferProducer::BufferProducer(const std::string& name, int user_id,
                               int group_id, uint64_t producer_usage,
                               uint64_t consumer_usage, size_t size)
    : BASE(BufferHubRPC::kClientPath) {
  ATRACE_NAME("BufferProducer::BufferProducer");
  ALOGD_IF(TRACE,
           "BufferProducer::BufferProducer: name=%s user_id=%d group=%d "
           "usage=%" PRIx64 " size=%zu",
           name.c_str(), user_id, group_id, usage, size);
           "producer_usage=%" PRIx64 " consumer_usage=%" PRIx64 " size=%zu",
           name.c_str(), user_id, group_id, producer_usage, consumer_usage,
           size);
  const int width = static_cast<int>(size);
  const int height = 1;
  const int format = HAL_PIXEL_FORMAT_BLOB;
  const size_t meta_size_bytes = 0;
  const size_t slice_count = 1;

  // (b/37881101) Deprecate producer/consumer usage
  auto status = InvokeRemoteMethod<BufferHubRPC::CreatePersistentBuffer>(
      name, user_id, group_id, width, height, format, usage, meta_size_bytes,
      slice_count);
      name, user_id, group_id, width, height, format,
      (producer_usage | consumer_usage), meta_size_bytes, slice_count);
  if (!status) {
    ALOGE(
        "BufferProducer::BufferProducer: Failed to create persistent "
+19 −5
Original line number Diff line number Diff line
@@ -111,9 +111,13 @@ class BufferHubBuffer : public pdx::Client {
  uint32_t height() const { return slices_[0].height(); }
  uint32_t stride() const { return slices_[0].stride(); }
  uint32_t format() const { return slices_[0].format(); }
  uint64_t usage() const { return slices_[0].usage(); }
  uint32_t usage() const { return slices_[0].usage(); }
  uint32_t layer_count() const { return slices_[0].layer_count(); }

  // TODO(b/37881101) Clean up producer/consumer usage.
  uint64_t producer_usage() const { return slices_[0].usage(); }
  uint64_t consumer_usage() const { return slices_[0].usage(); }

 protected:
  explicit BufferHubBuffer(LocalChannelHandle channel);
  explicit BufferHubBuffer(const std::string& endpoint_path);
@@ -220,8 +224,11 @@ class BufferProducer : public pdx::ClientBase<BufferProducer, BufferHubBuffer> {

  // Constructs a buffer with the given geometry and parameters.
  BufferProducer(uint32_t width, uint32_t height, uint32_t format,
                 uint64_t usage, size_t metadata_size = 0,
                 uint32_t usage, size_t metadata_size = 0,
                 size_t slice_count = 1);
  BufferProducer(uint32_t width, uint32_t height, uint32_t format,
                 uint64_t producer_usage, uint64_t consumer_usage,
                 size_t metadata_size, size_t slice_count);

  // Constructs a persistent buffer with the given geometry and parameters and
  // binds it to |name| in one shot. If a persistent buffer with the same name
@@ -237,15 +244,22 @@ class BufferProducer : public pdx::ClientBase<BufferProducer, BufferHubBuffer> {
  // effective user or group id of the calling process.
  BufferProducer(const std::string& name, int user_id, int group_id,
                 uint32_t width, uint32_t height, uint32_t format,
                 uint64_t usage, size_t metadata_size = 0,
                 uint32_t usage, size_t metadata_size = 0,
                 size_t slice_count = 1);
  BufferProducer(const std::string& name, int user_id, int group_id,
                 uint32_t width, uint32_t height, uint32_t format,
                 uint64_t producer_usage, uint64_t consumer_usage,
                 size_t metadata_size, size_t slice_count);

  // Constructs a blob (flat) buffer with the given usage flags.
  BufferProducer(uint64_t usage, size_t size);
  BufferProducer(uint32_t usage, size_t size);
  BufferProducer(uint64_t producer_usage, uint64_t consumer_usage, size_t size);

  // Constructs a persistent blob (flat) buffer and binds it to |name|.
  BufferProducer(const std::string& name, int user_id, int group_id,
                 uint64_t usage, size_t size);
                 uint32_t usage, size_t size);
  BufferProducer(const std::string& name, int user_id, int group_id,
                 uint64_t producer_usage, uint64_t consumer_usage, size_t size);

  // Constructs a channel to persistent buffer by name only. The buffer must
  // have been previously created or made persistent.
+17 −3
Original line number Diff line number Diff line
#include "include/dvr/display_manager_client.h"

#include <dvr/dvr_buffer.h>
#include <grallocusage/GrallocUsageConversion.h>
#include <private/android/AHardwareBufferHelpers.h>
#include <private/dvr/buffer_hub_client.h>
#include <private/dvr/display_manager_client_impl.h>
@@ -45,11 +46,24 @@ void dvrDisplayManagerClientDestroy(DvrDisplayManagerClient* client) {

DvrBuffer* dvrDisplayManagerSetupNamedBuffer(DvrDisplayManagerClient* client,
                                             const char* name, size_t size,
                                             uint64_t usage) {
                                             uint64_t hardware_buffer_usage,
                                             uint64_t unused) {
  uint64_t producer_usage = 0;
  uint64_t consumer_usage = 0;

  // Note: AHardwareBuffer no longer uses usage0/usage1
  uint64_t gralloc_usage =
      android::AHardwareBuffer_convertToGrallocUsageBits(usage);
      android::AHardwareBuffer_convertToGrallocUsageBits(hardware_buffer_usage);

  // Note: split producer/consumer usage is deprecated, grallocV2 uses single
  // 64-bits usage
  // And, currently, 64-bits gralloc usage flags can safely be truncated to
  // 32-bits
  android_convertGralloc0To1Usage((uint32_t)gralloc_usage, &producer_usage,
                                  &consumer_usage);

  auto ion_buffer = client->client->SetupNamedBuffer(name, size, gralloc_usage);
  auto ion_buffer = client->client->SetupNamedBuffer(
      name, size, (producer_usage | consumer_usage));
  if (ion_buffer) {
    return CreateDvrBufferFromIonBuffer(std::move(ion_buffer));
  }
+4 −7
Original line number Diff line number Diff line
#include "include/dvr/dvr_surface.h"

#include <private/android/AHardwareBufferHelpers.h>
#include <private/dvr/display_client.h>

using namespace android;
@@ -11,8 +10,8 @@ struct DvrSurface {

extern "C" {

int dvrSurfaceCreate(int width, int height, int format, uint64_t usage,
                     int flags, DvrSurface** out_surface) {
int dvrSurfaceCreate(int width, int height, int format, uint64_t usage0,
                     uint64_t usage1, int flags, DvrSurface** out_surface) {
  if (out_surface == nullptr) {
    ALOGE("dvrSurfaceCreate: invalid inputs: out_surface=%p.", out_surface);
    return -EINVAL;
@@ -25,12 +24,10 @@ int dvrSurfaceCreate(int width, int height, int format, uint64_t usage,
    return error;
  }

  // The following convertion is sort of unnecessary as AHARDWAREBUFFER_USAGE
  // and BufferUsage should be synced up now.
  uint64_t gralloc_usage = AHardwareBuffer_convertToGrallocUsageBits(usage);
  // TODO(hendrikw): When we move to gralloc1, pass both usage0 and usage1 down.
  std::unique_ptr<dvr::DisplaySurfaceClient> surface =
      client->CreateDisplaySurface(
          width, height, static_cast<int>(gralloc_usage), format, flags);
          width, height, static_cast<int>(usage0 | usage1), format, flags);

  DvrSurface* dvr_surface = new DvrSurface;
  dvr_surface->display_surface_ = std::move(surface);
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ void dvrDisplayManagerClientDestroy(DvrDisplayManagerClient* client);

DvrBuffer* dvrDisplayManagerSetupNamedBuffer(DvrDisplayManagerClient* client,
                                             const char* name, size_t size,
                                             uint64_t usage);
                                             uint64_t usage0, uint64_t usage1);

// Return an event fd for checking if there was an event on the server
// Note that the only event which will be flagged is POLLIN. You must use
Loading