diff options
author | Sean Callanan <spyffe@google.com> | 2021-07-27 21:33:42 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-07-27 21:33:42 +0000 |
commit | f6178197c163ec7ce014640de9c2efac472fc856 (patch) | |
tree | b486bd87d41c0839fe41c59c59d76b88ad24fa2b | |
parent | 2cc6407faa4b312558310c0f0fc7749158f8ed7a (diff) | |
parent | 84cd15d69345eea274c4d03f6c77b5fd50ac626a (diff) | |
download | gchips-f6178197c163ec7ce014640de9c2efac472fc856.tar.gz |
Merge "Replace refcounting functions with buffer free" into sc-dev
-rw-r--r-- | gralloc4/src/Android.bp | 1 | ||||
-rw-r--r-- | gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h | 3 | ||||
-rw-r--r-- | gralloc4/src/libGralloc4Wrapper/wrapper.cpp | 54 |
3 files changed, 43 insertions, 15 deletions
diff --git a/gralloc4/src/Android.bp b/gralloc4/src/Android.bp index 2a4a5e3..a3a254d 100644 --- a/gralloc4/src/Android.bp +++ b/gralloc4/src/Android.bp @@ -67,6 +67,7 @@ cc_library_shared { "libnativewindow", "libion_google", "android.hardware.graphics.common@1.2", + "android.hardware.graphics.mapper@4.0", "libdmabufheap", "libgralloctypes", "libdrm", diff --git a/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h b/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h index 45054c8..cbd98d9 100644 --- a/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h +++ b/gralloc4/src/libGralloc4Wrapper/include/gralloc4/gralloc_vendor_interface.h @@ -43,8 +43,7 @@ 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); +int freeImportedHandle(void *handle); } // namespace android::hardware::graphics::allocator::priv diff --git a/gralloc4/src/libGralloc4Wrapper/wrapper.cpp b/gralloc4/src/libGralloc4Wrapper/wrapper.cpp index 07374ad..c9d3381 100644 --- a/gralloc4/src/libGralloc4Wrapper/wrapper.cpp +++ b/gralloc4/src/libGralloc4Wrapper/wrapper.cpp @@ -188,22 +188,50 @@ 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; +int freeImportedHandle(void *handle) +{ + using android::hardware::graphics::mapper::V4_0::IMapper; + using android::hardware::graphics::mapper::V4_0::Error; + + const private_handle_t *hnd = static_cast<private_handle_t *>(handle); + + struct UnmapWork { void *base; size_t alloc_size; }; + std::vector<UnmapWork> work(hnd->fd_count); + + for (size_t i = 0; i < hnd->fd_count; ++i) + { + work[i].base = reinterpret_cast<void*>(hnd->bases[i]); + work[i].alloc_size = hnd->alloc_sizes[i]; + } + + static android::sp<IMapper> mapper = IMapper::getService(); + if (!mapper) + { + ALOGE("libGralloc4Wrapper: %s failed to get a mapper", __func__); + return -1; } - 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; + if (mapper->freeBuffer(handle) != Error::NONE) + { + ALOGE("libGralloc4Wrapper: %s couldn't freeBuffer(%p\n", __func__, handle); + return -1; } - return android::hardware::graphics::mapper::V4_0::Error::NONE; + + { + bool unmapFailed = false; + for (const UnmapWork &w : work) + { + if (!w.base) { continue; } + if (int ret = munmap(w.base, w.alloc_size); ret) + { + ALOGE("libGralloc4Wrapper: %s couldn't unmap address %p (size %zu): %s", __func__, w.base, w.alloc_size, strerror(ret)); + unmapFailed = true; + } + } + if (unmapFailed) { return -1; } + } + + return 0; } } // namespace android::hardware::graphics::allocator::priv |