OSDN Git Service

Revert "Deprecate producer/consumer usage: Step 3"
authorCorey Tabaka <eieio@google.com>
Fri, 5 May 2017 18:14:54 +0000 (18:14 +0000)
committerCorey Tabaka <eieio@google.com>
Fri, 5 May 2017 18:14:54 +0000 (18:14 +0000)
These changes are effectively handled as part of another, higher priority CL.

This reverts commit 7cab28591d5cdc26913a0882df1b28e3f5393066.

Change-Id: I4cf47eee219870b2758997fe5bd6019d83b82451

libs/vr/libbufferhub/buffer_hub_client.cpp
libs/vr/libbufferhub/include/private/dvr/buffer_hub_client.h
libs/vr/libdvr/display_manager_client.cpp
libs/vr/libdvr/dvr_surface.cpp
libs/vr/libdvr/include/dvr/display_manager_client.h
libs/vr/libdvr/include/dvr/dvr_api.h
libs/vr/libdvr/include/dvr/dvr_surface.h
libs/vr/libdvr/tests/dvr_named_buffer-test.cpp

index 60dbe92..07c921f 100644 (file)
@@ -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 "
index 16ddad7..dbd4110 100644 (file)
@@ -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.
index 8c010fc..6830085 100644 (file)
@@ -1,6 +1,7 @@
 #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));
   }
index 6daabca..a04ed50 100644 (file)
@@ -1,6 +1,5 @@
 #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);
index a2c69b2..8cd948c 100644 (file)
@@ -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
index 8849942..3cd401d 100644 (file)
@@ -48,7 +48,7 @@ typedef void (*DvrDisplayManagerClientSurfaceListDestroyPtr)(
     DvrDisplayManagerClientSurfaceList* surface_list);
 typedef DvrBuffer* (*DvrDisplayManagerSetupNamedBufferPtr)(
     DvrDisplayManagerClient* client, const char* name, size_t size,
-    uint64_t usage);
+    uint64_t usage0, uint64_t usage1);
 typedef size_t (*DvrDisplayManagerClientSurfaceListGetSizePtr)(
     DvrDisplayManagerClientSurfaceList* surface_list);
 typedef int (*DvrDisplayManagerClientSurfaceListGetSurfaceIdPtr)(
@@ -119,7 +119,7 @@ typedef int (*DvrReadBufferQueueDequeuePtr)(DvrReadBufferQueue* read_queue,
 // dvr_surface.h
 typedef int (*DvrGetNamedBufferPtr)(const char* name, DvrBuffer** out_buffer);
 typedef int (*DvrSurfaceCreatePtr)(int width, int height, int format,
-                                   uint64_t usage, int flags,
+                                   uint64_t usage0, uint64_t usage1, int flags,
                                    DvrSurface** out_surface);
 typedef int (*DvrSurfaceGetWriteBufferQueuePtr)(
     DvrSurface* surface, DvrWriteBufferQueue** out_writer);
index a9d02d6..e5228d6 100644 (file)
@@ -14,8 +14,8 @@ typedef struct DvrSurfaceParameter DvrSurfaceParameter;
 // Get a pointer to the global pose buffer.
 int dvrGetNamedBuffer(const char* name, DvrBuffer** out_buffer);
 
-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);
 
 // TODO(eieio, jwcai) Change this once we have multiple buffer queue support.
 int dvrSurfaceGetWriteBufferQueue(DvrSurface* surface,
index 32bdcee..6a02342 100644 (file)
@@ -32,11 +32,11 @@ class DvrNamedBufferTest : public ::testing::Test {
 TEST_F(DvrNamedBufferTest, TestNamedBuffersSameName) {
   const char* buffer_name = "same_name";
   DvrBuffer* buffer1 =
-      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0);
+      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0, 0);
   ASSERT_NE(nullptr, buffer1);
 
   DvrBuffer* buffer2 =
-      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0);
+      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, 0, 0);
   ASSERT_NE(nullptr, buffer2);
 
   AHardwareBuffer* hardware_buffer1 = nullptr;
@@ -96,12 +96,12 @@ TEST_F(DvrNamedBufferTest, TestMultipleNamedBuffers) {
   const char* buffer_name1 = "test1";
   const char* buffer_name2 = "test2";
   DvrBuffer* setup_buffer1 =
-      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name1, 10, 0);
+      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name1, 10, 0, 0);
   ASSERT_NE(nullptr, setup_buffer1);
   dvrBufferDestroy(setup_buffer1);
 
   DvrBuffer* setup_buffer2 =
-      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name2, 10, 0);
+      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name2, 10, 0, 0);
   ASSERT_NE(nullptr, setup_buffer2);
   dvrBufferDestroy(setup_buffer2);
 
@@ -129,7 +129,7 @@ TEST_F(DvrNamedBufferTest, TestNamedBufferUsage) {
   const int64_t usage = AHARDWAREBUFFER_USAGE_VIDEO_ENCODE;
 
   DvrBuffer* setup_buffer =
-      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, usage);
+      dvrDisplayManagerSetupNamedBuffer(client_, buffer_name, 10, usage, 0);
   ASSERT_NE(nullptr, setup_buffer);
 
   AHardwareBuffer* hardware_buffer = nullptr;