From b7ea9bfe7df8d8d0023cf07cdcbe4a0a39e1e4d0 Mon Sep 17 00:00:00 2001 From: Przemyslaw Szczepaniak Date: Thu, 14 Nov 2019 16:05:43 +0000 Subject: Add stubs to libnativewindow.so. Add AHardwareBuffer_createFromHandle and AHardwareBuffer_getNativeHandle apex accessible API. This allows com.android.neuralnetworks APEX to use system libnativewindow.so, greatly reducing its size and dependencies. Test: Flashed pixel device & run NNAPI tests. Bug: 140440028 Bug: 144488395 Change-Id: I3eef0b9cde4dd5c8dc5955d6ca37079cd6cf706b Merged-In: I3eef0b9cde4dd5c8dc5955d6ca37079cd6cf706b (cherry picked from commit 7864fbc2b8c4402c2694941a17fa736ef4c830ef) --- libs/nativewindow/Android.bp | 5 +++++ libs/nativewindow/libnativewindow.map.txt | 4 ++-- libs/nativewindow/tests/AHardwareBufferTest.cpp | 29 +++++++++++++++++++++++-- 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/libs/nativewindow/Android.bp b/libs/nativewindow/Android.bp index 27ab482676..55400c7b32 100644 --- a/libs/nativewindow/Android.bp +++ b/libs/nativewindow/Android.bp @@ -85,6 +85,11 @@ cc_library { export_header_lib_headers: [ "libnativebase_headers", ], + + stubs: { + symbol_file: "libnativewindow.map.txt", + versions: ["29"], + }, } llndk_library { diff --git a/libs/nativewindow/libnativewindow.map.txt b/libs/nativewindow/libnativewindow.map.txt index fece733bea..db1c9b784e 100644 --- a/libs/nativewindow/libnativewindow.map.txt +++ b/libs/nativewindow/libnativewindow.map.txt @@ -2,9 +2,9 @@ LIBNATIVEWINDOW { global: AHardwareBuffer_acquire; AHardwareBuffer_allocate; - AHardwareBuffer_createFromHandle; # llndk + AHardwareBuffer_createFromHandle; # llndk # apex AHardwareBuffer_describe; - AHardwareBuffer_getNativeHandle; # llndk + AHardwareBuffer_getNativeHandle; # llndk # apex AHardwareBuffer_isSupported; # introduced=29 AHardwareBuffer_lock; AHardwareBuffer_lockAndGetInfo; # introduced=29 diff --git a/libs/nativewindow/tests/AHardwareBufferTest.cpp b/libs/nativewindow/tests/AHardwareBufferTest.cpp index cc2731d908..71b1f9f021 100644 --- a/libs/nativewindow/tests/AHardwareBufferTest.cpp +++ b/libs/nativewindow/tests/AHardwareBufferTest.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include @@ -100,9 +101,33 @@ TEST(AHardwareBufferTest, ConvertToAndFromGrallocBits) { (uint64_t)BufferUsage::CPU_WRITE_RARELY, AHARDWAREBUFFER_USAGE_CPU_READ_RARELY | AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY)); -EXPECT_TRUE(TestUsageConversion( + EXPECT_TRUE(TestUsageConversion( (uint64_t)BufferUsage::GPU_RENDER_TARGET | (uint64_t)BufferUsage::GPU_TEXTURE | - 1ull << 29 | 1ull << 57, + 1ull << 29 | 1ull << 57, AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT | AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE | AHARDWAREBUFFER_USAGE_VENDOR_1 | AHARDWAREBUFFER_USAGE_VENDOR_13)); } + +TEST(AHardwareBufferTest, GetCreateHandleTest) { + AHardwareBuffer_Desc desc{ + .width = 64, + .height = 1, + .layers = 1, + .format = AHARDWAREBUFFER_FORMAT_BLOB, + .usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN, + .stride = 64, + }; + + AHardwareBuffer* buffer = nullptr; + EXPECT_EQ(0, AHardwareBuffer_allocate(&desc, &buffer)); + const native_handle_t* handle = AHardwareBuffer_getNativeHandle(buffer); + EXPECT_NE(nullptr, handle); + + AHardwareBuffer* otherBuffer = nullptr; + EXPECT_EQ(0, AHardwareBuffer_createFromHandle( + &desc, handle, AHARDWAREBUFFER_CREATE_FROM_HANDLE_METHOD_CLONE, &otherBuffer)); + EXPECT_NE(nullptr, otherBuffer); + + AHardwareBuffer_release(buffer); + AHardwareBuffer_release(otherBuffer); +} -- cgit v1.2.3-59-g8ed1b