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

Commit 7864fbc2 authored by Przemyslaw Szczepaniak's avatar Przemyslaw Szczepaniak
Browse files

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
parent 96e335bb
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -85,6 +85,11 @@ cc_library {
    export_header_lib_headers: [
        "libnativebase_headers",
    ],

    stubs: {
        symbol_file: "libnativewindow.map.txt",
        versions: ["29"],
    },
}

llndk_library {
+2 −2
Original line number Diff line number Diff line
@@ -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
+27 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <android/hardware_buffer.h>
#include <private/android/AHardwareBufferHelpers.h>
#include <android/hardware/graphics/common/1.0/types.h>
#include <vndk/hardware_buffer.h>

#include <gtest/gtest.h>

@@ -106,3 +107,27 @@ EXPECT_TRUE(TestUsageConversion(
        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);
}