Loading services/vr/bufferhubd/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -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", Loading services/vr/bufferhubd/buffer_channel.cpp +10 −10 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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{}}; } Loading services/vr/bufferhubd/buffer_node.cpp +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 { Loading @@ -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."); Loading @@ -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); } Loading services/vr/bufferhubd/include/private/dvr/buffer_node.h +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> Loading @@ -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_; } Loading Loading @@ -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_; Loading services/vr/bufferhubd/tests/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
services/vr/bufferhubd/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -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", Loading
services/vr/bufferhubd/buffer_channel.cpp +10 −10 Original line number Diff line number Diff line Loading @@ -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); } Loading Loading @@ -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{}}; } Loading
services/vr/bufferhubd/buffer_node.cpp +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 { Loading @@ -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."); Loading @@ -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); } Loading
services/vr/bufferhubd/include/private/dvr/buffer_node.h +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> Loading @@ -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_; } Loading Loading @@ -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_; Loading
services/vr/bufferhubd/tests/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -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