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

Commit ce22c3eb authored by Fan Xu's avatar Fan Xu Committed by Android (Google) Code Review
Browse files

Merge "Move BufferNode off ionbuffer"

parents d977463f bb094a5d
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -45,7 +45,10 @@ cc_library_static {
        "-DATRACE_TAG=ATRACE_TAG_GRAPHICS",
    ],
    export_include_dirs: ["include"],
    header_libs: ["libdvr_headers"],
    header_libs: [
        "libdvr_headers",
        "libnativewindow_headers",
    ],
    shared_libs: sharedLibraries,
    static_libs: [
        "libbufferhub",
+10 −10
Original line number Diff line number Diff line
@@ -49,9 +49,9 @@ BufferChannel::~BufferChannel() {

BufferHubChannel::BufferInfo BufferChannel::GetBufferInfo() const {
  return BufferInfo(
      buffer_id(), /*consumer_count=*/0, buffer_node_->buffer().width(),
      buffer_node_->buffer().height(), buffer_node_->buffer().layer_count(),
      buffer_node_->buffer().format(), buffer_node_->buffer().usage(),
      buffer_id(), /*consumer_count=*/0, buffer_node_->buffer_desc().width,
      buffer_node_->buffer_desc().height, buffer_node_->buffer_desc().layers,
      buffer_node_->buffer_desc().format, buffer_node_->buffer_desc().usage,
      /*pending_count=*/0, /*state=*/0, /*signaled_mask=*/0,
      /*index=*/0);
}
@@ -85,17 +85,17 @@ Status<BufferTraits<BorrowedHandle>> BufferChannel::OnImport(

  // TODO(b/112057680) Move away from the GraphicBuffer-based IonBuffer.
  return BufferTraits<BorrowedHandle>{
      /*buffer_handle=*/buffer_node_->buffer().handle(),
      /*buffer_handle=*/buffer_node_->buffer_handle(),
      /*metadata_handle=*/buffer_node_->metadata().ashmem_handle().Borrow(),
      /*id=*/buffer_id(),
      /*client_state_mask=*/client_state_mask_,
      /*metadata_size=*/buffer_node_->metadata().metadata_size(),
      /*width=*/buffer_node_->buffer().width(),
      /*height=*/buffer_node_->buffer().height(),
      /*layer_count=*/buffer_node_->buffer().layer_count(),
      /*format=*/buffer_node_->buffer().format(),
      /*usage=*/buffer_node_->buffer().usage(),
      /*stride=*/buffer_node_->buffer().stride(),
      /*width=*/buffer_node_->buffer_desc().width,
      /*height=*/buffer_node_->buffer_desc().height,
      /*layer_count=*/buffer_node_->buffer_desc().layers,
      /*format=*/buffer_node_->buffer_desc().format,
      /*usage=*/buffer_node_->buffer_desc().usage,
      /*stride=*/buffer_node_->buffer_desc().stride,
      /*acquire_fence_fd=*/BorrowedHandle{},
      /*released_fence_fd=*/BorrowedHandle{}};
}
+31 −5
Original line number Diff line number Diff line
#include <errno.h>

#include <private/dvr/IBufferHub.h>
#include <private/dvr/buffer_hub_defs.h>
#include <private/dvr/buffer_node.h>
#include <ui/GraphicBufferAllocator.h>

namespace android {
namespace dvr {
@@ -19,14 +22,26 @@ void BufferNode::InitializeMetadata() {
BufferNode::BufferNode(uint32_t width, uint32_t height, uint32_t layer_count,
                       uint32_t format, uint64_t usage,
                       size_t user_metadata_size) {
  if (int ret = buffer_.Alloc(width, height, layer_count, format, usage)) {
    ALOGE(
        "DetachedBufferChannel::DetachedBufferChannel: Failed to allocate "
        "buffer: %s",
  uint32_t out_stride = 0;
  // graphicBufferId is not used in GraphicBufferAllocator::allocate
  int ret = GraphicBufferAllocator::get().allocate(
      width, height, format, layer_count, usage,
      const_cast<const native_handle_t**>(&buffer_handle_), &out_stride,
      /*graphicBufferId=*/0, IBufferHub::getServiceName());

  if (ret != OK || buffer_handle_ == nullptr) {
    ALOGE("BufferNode::BufferNode: Failed to allocate buffer: %s",
          strerror(-ret));
    return;
  }

  buffer_desc_.width = width;
  buffer_desc_.height = height;
  buffer_desc_.layers = layer_count;
  buffer_desc_.format = format;
  buffer_desc_.usage = usage;
  buffer_desc_.stride = out_stride;

  metadata_ = BufferHubMetadata::Create(user_metadata_size);
  if (!metadata_.IsValid()) {
    ALOGE("BufferNode::BufferNode: Failed to allocate metadata.");
@@ -35,6 +50,17 @@ BufferNode::BufferNode(uint32_t width, uint32_t height, uint32_t layer_count,
  InitializeMetadata();
}

// Free the handle
BufferNode::~BufferNode() {
  if (buffer_handle_ != nullptr) {
    status_t ret = GraphicBufferAllocator::get().free(buffer_handle_);
    if (ret != OK) {
      ALOGE("BufferNode::~BufferNode: Failed to free handle; Got error: %d",
            ret);
    }
  }
}

uint64_t BufferNode::GetActiveClientsBitMask() const {
  return active_clients_bit_mask_->load(std::memory_order_acquire);
}
+10 −6
Original line number Diff line number Diff line
#ifndef ANDROID_DVR_BUFFERHUBD_BUFFER_NODE_H_
#define ANDROID_DVR_BUFFERHUBD_BUFFER_NODE_H_

#include <android/hardware_buffer.h>
#include <private/dvr/ion_buffer.h>
#include <ui/BufferHubMetadata.h>

@@ -13,14 +14,16 @@ class BufferNode {
  BufferNode(uint32_t width, uint32_t height, uint32_t layer_count,
             uint32_t format, uint64_t usage, size_t user_metadata_size);

  // Returns whether the object holds a valid graphic buffer.
  bool IsValid() const { return buffer_.IsValid() && metadata_.IsValid(); }
  ~BufferNode();

  // Returns whether the object holds a valid metadata.
  bool IsValid() const { return metadata_.IsValid(); }

  size_t user_metadata_size() const { return metadata_.user_metadata_size(); }

  // Accessors of the IonBuffer.
  IonBuffer& buffer() { return buffer_; }
  const IonBuffer& buffer() const { return buffer_; }
  // Accessors of the buffer description and handle
  const native_handle_t* buffer_handle() const { return buffer_handle_; }
  const AHardwareBuffer_Desc& buffer_desc() const { return buffer_desc_; }

  // Accessors of metadata.
  const BufferHubMetadata& metadata() const { return metadata_; }
@@ -48,7 +51,8 @@ class BufferNode {
  void InitializeMetadata();

  // Gralloc buffer handles.
  IonBuffer buffer_;
  native_handle_t* buffer_handle_;
  AHardwareBuffer_Desc buffer_desc_;

  // Metadata in shared memory.
  BufferHubMetadata metadata_;
+4 −1
Original line number Diff line number Diff line
@@ -33,7 +33,10 @@ cc_test {
        "-DTRACE=0",
        "-DATRACE_TAG=ATRACE_TAG_GRAPHICS",
    ],
    header_libs: ["libdvr_headers"],
    header_libs: [
        "libdvr_headers",
        "libnativewindow_headers",
    ],
    static_libs: [
        "libbufferhub",
        "libbufferhubd",
Loading