Bug 1966308 - Use weak android symbol instead of dlopen/dlsym for AndroidHardwareBuffer.cpp r=jnicol

Differential Revision: https://phabricator.services.mozilla.com/D249223
This commit is contained in:
serge-sans-paille
2025-05-16 07:04:51 +00:00
committed by sguelton@mozilla.com
parent c878226a2b
commit 0336e618cb

View File

@@ -6,8 +6,6 @@
#include "AndroidHardwareBuffer.h" #include "AndroidHardwareBuffer.h"
#include <dlfcn.h>
#include "mozilla/gfx/2D.h" #include "mozilla/gfx/2D.h"
#include "mozilla/gfx/gfxVars.h" #include "mozilla/gfx/gfxVars.h"
#include "mozilla/layers/ImageBridgeChild.h" #include "mozilla/layers/ImageBridgeChild.h"
@@ -55,41 +53,22 @@ void AndroidHardwareBufferApi::Shutdown() { sInstance = nullptr; }
AndroidHardwareBufferApi::AndroidHardwareBufferApi() {} AndroidHardwareBufferApi::AndroidHardwareBufferApi() {}
bool AndroidHardwareBufferApi::Load() { bool AndroidHardwareBufferApi::Load() {
void* handle = dlopen("libandroid.so", RTLD_LAZY | RTLD_LOCAL); if (__builtin_available(android 26, *)) {
MOZ_ASSERT(handle); mAHardwareBuffer_allocate = AHardwareBuffer_allocate; // API 26
if (!handle) { mAHardwareBuffer_acquire = AHardwareBuffer_acquire; // API 26
gfxCriticalNote << "Failed to load libandroid.so"; mAHardwareBuffer_release = AHardwareBuffer_release; // API 26
return false; mAHardwareBuffer_describe = AHardwareBuffer_describe; // API 26
} mAHardwareBuffer_lock = AHardwareBuffer_lock; // API 26
mAHardwareBuffer_unlock = AHardwareBuffer_unlock; // API 26
mAHardwareBuffer_allocate =
(_AHardwareBuffer_allocate)dlsym(handle, "AHardwareBuffer_allocate");
mAHardwareBuffer_acquire =
(_AHardwareBuffer_acquire)dlsym(handle, "AHardwareBuffer_acquire");
mAHardwareBuffer_release =
(_AHardwareBuffer_release)dlsym(handle, "AHardwareBuffer_release");
mAHardwareBuffer_describe =
(_AHardwareBuffer_describe)dlsym(handle, "AHardwareBuffer_describe");
mAHardwareBuffer_lock =
(_AHardwareBuffer_lock)dlsym(handle, "AHardwareBuffer_lock");
mAHardwareBuffer_unlock =
(_AHardwareBuffer_unlock)dlsym(handle, "AHardwareBuffer_unlock");
mAHardwareBuffer_sendHandleToUnixSocket = mAHardwareBuffer_sendHandleToUnixSocket =
(_AHardwareBuffer_sendHandleToUnixSocket)dlsym( AHardwareBuffer_sendHandleToUnixSocket; // API 26
handle, "AHardwareBuffer_sendHandleToUnixSocket");
mAHardwareBuffer_recvHandleFromUnixSocket = mAHardwareBuffer_recvHandleFromUnixSocket =
(_AHardwareBuffer_recvHandleFromUnixSocket)dlsym( AHardwareBuffer_recvHandleFromUnixSocket; // API 26
handle, "AHardwareBuffer_recvHandleFromUnixSocket"); return true;
} else {
if (!mAHardwareBuffer_allocate || !mAHardwareBuffer_acquire ||
!mAHardwareBuffer_release || !mAHardwareBuffer_describe ||
!mAHardwareBuffer_lock || !mAHardwareBuffer_unlock ||
!mAHardwareBuffer_sendHandleToUnixSocket ||
!mAHardwareBuffer_recvHandleFromUnixSocket) {
gfxCriticalNote << "Failed to load AHardwareBuffer"; gfxCriticalNote << "Failed to load AHardwareBuffer";
return false; return false;
} }
return true;
} }
void AndroidHardwareBufferApi::Allocate(const AHardwareBuffer_Desc* aDesc, void AndroidHardwareBufferApi::Allocate(const AHardwareBuffer_Desc* aDesc,