diff options
author | Anthony Han <modan@google.com> | 2021-01-28 19:43:19 +0000 |
---|---|---|
committer | Anthony Han <modan@google.com> | 2021-01-29 02:01:11 +0000 |
commit | 5d0a08fd60ba9d3b15da81c512195abd755dcd46 (patch) | |
tree | 9d92f0908dcaf0af17d68bc0df01868d24b5764e | |
parent | a413770d0d7b1a3f5daae8caf85a37818b639a38 (diff) | |
download | gchips-5d0a08fd60ba9d3b15da81c512195abd755dcd46.tar.gz |
libGralloc4Wrapper: Add retain and release
These functions are useful for counting references of buffers created by
libGralloc4Wrapper.
Bug: 168763166
Test: run aion_test multiple times, use dumpsys meminfo to verify
there's no ion memory leak
Change-Id: I4b192e25c23f5903167f31f13a0fa6c791258c4b
-rw-r--r-- | gralloc4/src/Android.bp | 1 | ||||
-rw-r--r-- | gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h | 4 | ||||
-rw-r--r-- | gralloc4/src/libGralloc4Wrapper/wrapper.cpp | 20 |
3 files changed, 25 insertions, 0 deletions
diff --git a/gralloc4/src/Android.bp b/gralloc4/src/Android.bp index 0b4b64a..4cc6e77 100644 --- a/gralloc4/src/Android.bp +++ b/gralloc4/src/Android.bp @@ -41,6 +41,7 @@ cc_library_shared { "core/format_info.cpp", "core/mali_gralloc_formats.cpp", "core/mali_gralloc_bufferallocation.cpp", + "core/mali_gralloc_reference.cpp", "core/mali_gralloc_debug.cpp", ":libgralloc_hidl_common_shared_metadata", ], diff --git a/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h b/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h index 6387845..45054c8 100644 --- a/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h +++ b/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h @@ -23,6 +23,7 @@ #include <sys/types.h> #include <cstdint> #include <system/graphics-base-v1.0.h> +#include <android/hardware/graphics/mapper/4.0/IMapper.h> namespace android::hardware::graphics::allocator::priv { @@ -42,6 +43,9 @@ void setFormat(Descriptor &descriptor, int format); buffer_handle_t createNativeHandle(const Descriptor &descriptor); +android::hardware::graphics::mapper::V4_0::Error retain(buffer_handle_t handle); +android::hardware::graphics::mapper::V4_0::Error release(buffer_handle_t handle); + } // namespace android::hardware::graphics::allocator::priv #endif diff --git a/gralloc4/src/libGralloc4Wrapper/wrapper.cpp b/gralloc4/src/libGralloc4Wrapper/wrapper.cpp index c516f21..07374ad 100644 --- a/gralloc4/src/libGralloc4Wrapper/wrapper.cpp +++ b/gralloc4/src/libGralloc4Wrapper/wrapper.cpp @@ -5,6 +5,7 @@ #include "core/format_info.h" #include "core/mali_gralloc_bufferdescriptor.h" #include "core/mali_gralloc_bufferallocation.h" +#include "core/mali_gralloc_reference.h" #include "allocator/mali_gralloc_ion.h" #include "hidl_common/SharedMetadata.h" #include "gralloc_priv.h" @@ -186,4 +187,23 @@ buffer_handle_t createNativeHandle(const Descriptor &descriptor) { return tmp_buffer; } + +android::hardware::graphics::mapper::V4_0::Error retain(buffer_handle_t handle) { + int err = mali_gralloc_reference_retain(handle); + if (err == -EINVAL) { + return android::hardware::graphics::mapper::V4_0::Error::BAD_BUFFER; + } else if (err) { + return android::hardware::graphics::mapper::V4_0::Error::NO_RESOURCES; + } + return android::hardware::graphics::mapper::V4_0::Error::NONE; +} + +android::hardware::graphics::mapper::V4_0::Error release(buffer_handle_t handle) { + int err = mali_gralloc_reference_release(handle, true); + if (err) { + return android::hardware::graphics::mapper::V4_0::Error::BAD_BUFFER; + } + return android::hardware::graphics::mapper::V4_0::Error::NONE; +} + } // namespace android::hardware::graphics::allocator::priv |