Loading libs/ui/tests/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ cc_test { name: "BufferHubBuffer_test", header_libs: [ "libbufferhub_headers", "libdvr_headers" "libdvr_headers", "libnativewindow_headers", ], shared_libs: [ "android.frameworks.bufferhub@1.0", Loading libs/ui/tests/BufferHubBuffer_test.cpp +18 −13 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <android/frameworks/bufferhub/1.0/IBufferClient.h> #include <android/frameworks/bufferhub/1.0/IBufferHub.h> #include <android/hardware_buffer.h> #include <gtest/gtest.h> #include <hidl/ServiceManagement.h> #include <hwbinder/IPCThreadState.h> Loading @@ -41,6 +42,7 @@ using frameworks::bufferhub::V1_0::BufferHubStatus; using frameworks::bufferhub::V1_0::IBufferClient; using frameworks::bufferhub::V1_0::IBufferHub; using hardware::hidl_handle; using hardware::graphics::common::V1_2::HardwareBufferDescription; using hidl::base::V1_0::IBase; using pdx::LocalChannelHandle; Loading Loading @@ -124,19 +126,22 @@ TEST_F(BufferHubBufferTest, DuplicateBufferHubBuffer) { return; } TEST_F(BufferHubBufferTest, ConnectHidlServer) { sp<IBufferHub> bufferhub = IBufferHub::getService(); ASSERT_NE(nullptr, bufferhub.get()); // TODO(b/116681016): Fill in real test once the interface gets implemented.. hidl_handle handle; EXPECT_TRUE(bufferhub ->importBuffer(handle, [](const auto& client, const auto& ret) { EXPECT_EQ(client, nullptr); EXPECT_EQ(ret, BufferHubStatus::NO_ERROR); }) .isOk()); TEST_F(BufferHubBufferTest, AllocateBuffer) { // TODO(b/116681016): directly test on BufferHubBuffer instead of the service. sp<IBufferHub> bufferHub = IBufferHub::getService(); ASSERT_NE(nullptr, bufferHub.get()); // Stride is an output, rfu0 and rfu1 are reserved data slot for future use. AHardwareBuffer_Desc aDesc = {kWidth, kHeight, kLayerCount, kFormat, kUsage, /*stride=*/0UL, /*rfu0=*/0UL, /*rfu1=*/0ULL}; HardwareBufferDescription desc; memcpy(&desc, &aDesc, sizeof(HardwareBufferDescription)); IBufferHub::allocateBuffer_cb callback = [](const auto& client, const auto& status) { EXPECT_EQ(status, BufferHubStatus::NO_ERROR); EXPECT_NE(nullptr, client.get()); }; EXPECT_TRUE(bufferHub->allocateBuffer(desc, kUserMetadataSize, callback).isOk()); } } // namespace Loading services/bufferhub/Android.bp +6 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,12 @@ cc_binary { srcs: [ "main_bufferhub.cpp" ], header_libs: [ "libbufferhub_headers", "libdvr_headers", "libnativewindow_headers", "libpdx_headers", ], shared_libs: [ "android.frameworks.bufferhub@1.0", "libbufferhubservice", Loading services/bufferhub/BufferHubService.cpp +22 −4 Original line number Diff line number Diff line Loading @@ -14,7 +14,9 @@ * limitations under the License. */ #include <android/hardware_buffer.h> #include <bufferhub/BufferHubService.h> #include <log/log.h> namespace android { namespace frameworks { Loading @@ -24,11 +26,27 @@ namespace implementation { using hardware::Void; Return<void> BufferHubService::allocateBuffer(const HardwareBufferDescription& /*description*/, const uint32_t /*userMetadataSize*/, Return<void> BufferHubService::allocateBuffer(const HardwareBufferDescription& description, const uint32_t userMetadataSize, allocateBuffer_cb _hidl_cb) { // TODO(b/118614333): implement buffer allocation _hidl_cb(/*bufferClient=*/nullptr, /*status=*/BufferHubStatus::NO_ERROR); AHardwareBuffer_Desc desc; memcpy(&desc, &description, sizeof(AHardwareBuffer_Desc)); std::shared_ptr<BufferNode> node = std::make_shared<BufferNode>(desc.width, desc.height, desc.layers, desc.format, desc.usage, userMetadataSize); if (node == nullptr || !node->IsValid()) { ALOGE("%s: creating BufferNode failed.", __FUNCTION__); _hidl_cb(/*bufferClient=*/nullptr, /*status=*/BufferHubStatus::ALLOCATION_FAILED); return Void(); } sp<BufferClient> client = new BufferClient(node); // Add it to list for bookkeeping and dumpsys. std::lock_guard<std::mutex> lock(mClientListMutex); mClientList.push_back(client); _hidl_cb(/*bufferClient=*/client, /*status=*/BufferHubStatus::NO_ERROR); return Void(); } Loading services/bufferhub/include/bufferhub/BufferClient.h +11 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define ANDROID_FRAMEWORKS_BUFFERHUB_V1_0_BUFFER_CLIENT_H #include <android/frameworks/bufferhub/1.0/IBufferClient.h> #include <bufferhub/BufferNode.h> namespace android { namespace frameworks { Loading @@ -27,9 +28,19 @@ namespace implementation { using hardware::Return; // Forward declaration to avoid circular dependency class BufferHubService; class BufferClient : public IBufferClient { public: // Creates a server-side buffer client from an existing BufferNode. Note that // this funciton takes ownership of the shared_ptr. explicit BufferClient(const std::shared_ptr<BufferNode>& node) : mBufferNode(node){}; Return<void> duplicate(duplicate_cb _hidl_cb) override; private: std::shared_ptr<BufferNode> mBufferNode; }; } // namespace implementation Loading Loading
libs/ui/tests/Android.bp +2 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,8 @@ cc_test { name: "BufferHubBuffer_test", header_libs: [ "libbufferhub_headers", "libdvr_headers" "libdvr_headers", "libnativewindow_headers", ], shared_libs: [ "android.frameworks.bufferhub@1.0", Loading
libs/ui/tests/BufferHubBuffer_test.cpp +18 −13 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #include <android/frameworks/bufferhub/1.0/IBufferClient.h> #include <android/frameworks/bufferhub/1.0/IBufferHub.h> #include <android/hardware_buffer.h> #include <gtest/gtest.h> #include <hidl/ServiceManagement.h> #include <hwbinder/IPCThreadState.h> Loading @@ -41,6 +42,7 @@ using frameworks::bufferhub::V1_0::BufferHubStatus; using frameworks::bufferhub::V1_0::IBufferClient; using frameworks::bufferhub::V1_0::IBufferHub; using hardware::hidl_handle; using hardware::graphics::common::V1_2::HardwareBufferDescription; using hidl::base::V1_0::IBase; using pdx::LocalChannelHandle; Loading Loading @@ -124,19 +126,22 @@ TEST_F(BufferHubBufferTest, DuplicateBufferHubBuffer) { return; } TEST_F(BufferHubBufferTest, ConnectHidlServer) { sp<IBufferHub> bufferhub = IBufferHub::getService(); ASSERT_NE(nullptr, bufferhub.get()); // TODO(b/116681016): Fill in real test once the interface gets implemented.. hidl_handle handle; EXPECT_TRUE(bufferhub ->importBuffer(handle, [](const auto& client, const auto& ret) { EXPECT_EQ(client, nullptr); EXPECT_EQ(ret, BufferHubStatus::NO_ERROR); }) .isOk()); TEST_F(BufferHubBufferTest, AllocateBuffer) { // TODO(b/116681016): directly test on BufferHubBuffer instead of the service. sp<IBufferHub> bufferHub = IBufferHub::getService(); ASSERT_NE(nullptr, bufferHub.get()); // Stride is an output, rfu0 and rfu1 are reserved data slot for future use. AHardwareBuffer_Desc aDesc = {kWidth, kHeight, kLayerCount, kFormat, kUsage, /*stride=*/0UL, /*rfu0=*/0UL, /*rfu1=*/0ULL}; HardwareBufferDescription desc; memcpy(&desc, &aDesc, sizeof(HardwareBufferDescription)); IBufferHub::allocateBuffer_cb callback = [](const auto& client, const auto& status) { EXPECT_EQ(status, BufferHubStatus::NO_ERROR); EXPECT_NE(nullptr, client.get()); }; EXPECT_TRUE(bufferHub->allocateBuffer(desc, kUserMetadataSize, callback).isOk()); } } // namespace Loading
services/bufferhub/Android.bp +6 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,12 @@ cc_binary { srcs: [ "main_bufferhub.cpp" ], header_libs: [ "libbufferhub_headers", "libdvr_headers", "libnativewindow_headers", "libpdx_headers", ], shared_libs: [ "android.frameworks.bufferhub@1.0", "libbufferhubservice", Loading
services/bufferhub/BufferHubService.cpp +22 −4 Original line number Diff line number Diff line Loading @@ -14,7 +14,9 @@ * limitations under the License. */ #include <android/hardware_buffer.h> #include <bufferhub/BufferHubService.h> #include <log/log.h> namespace android { namespace frameworks { Loading @@ -24,11 +26,27 @@ namespace implementation { using hardware::Void; Return<void> BufferHubService::allocateBuffer(const HardwareBufferDescription& /*description*/, const uint32_t /*userMetadataSize*/, Return<void> BufferHubService::allocateBuffer(const HardwareBufferDescription& description, const uint32_t userMetadataSize, allocateBuffer_cb _hidl_cb) { // TODO(b/118614333): implement buffer allocation _hidl_cb(/*bufferClient=*/nullptr, /*status=*/BufferHubStatus::NO_ERROR); AHardwareBuffer_Desc desc; memcpy(&desc, &description, sizeof(AHardwareBuffer_Desc)); std::shared_ptr<BufferNode> node = std::make_shared<BufferNode>(desc.width, desc.height, desc.layers, desc.format, desc.usage, userMetadataSize); if (node == nullptr || !node->IsValid()) { ALOGE("%s: creating BufferNode failed.", __FUNCTION__); _hidl_cb(/*bufferClient=*/nullptr, /*status=*/BufferHubStatus::ALLOCATION_FAILED); return Void(); } sp<BufferClient> client = new BufferClient(node); // Add it to list for bookkeeping and dumpsys. std::lock_guard<std::mutex> lock(mClientListMutex); mClientList.push_back(client); _hidl_cb(/*bufferClient=*/client, /*status=*/BufferHubStatus::NO_ERROR); return Void(); } Loading
services/bufferhub/include/bufferhub/BufferClient.h +11 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ #define ANDROID_FRAMEWORKS_BUFFERHUB_V1_0_BUFFER_CLIENT_H #include <android/frameworks/bufferhub/1.0/IBufferClient.h> #include <bufferhub/BufferNode.h> namespace android { namespace frameworks { Loading @@ -27,9 +28,19 @@ namespace implementation { using hardware::Return; // Forward declaration to avoid circular dependency class BufferHubService; class BufferClient : public IBufferClient { public: // Creates a server-side buffer client from an existing BufferNode. Note that // this funciton takes ownership of the shared_ptr. explicit BufferClient(const std::shared_ptr<BufferNode>& node) : mBufferNode(node){}; Return<void> duplicate(duplicate_cb _hidl_cb) override; private: std::shared_ptr<BufferNode> mBufferNode; }; } // namespace implementation Loading