Provide access to the bitmap's SharedMemory.

The shared memory object can then be passed through HIDL
to avoid unecessary copying of pixel data.

Test: WearOS DisplayOffload
Bug: 260872900
Change-Id: I7f78d2940a295190bd1f1076a01419481dd0d15c
diff --git a/libs/hwui/jni/Bitmap.cpp b/libs/hwui/jni/Bitmap.cpp
index 540abec..c68a6b9 100755
--- a/libs/hwui/jni/Bitmap.cpp
+++ b/libs/hwui/jni/Bitmap.cpp
@@ -422,6 +422,11 @@
     return ret;
 }
 
+static jint Bitmap_getAshmemFd(JNIEnv* env, jobject, jlong bitmapHandle) {
+    LocalScopedBitmap bitmap(bitmapHandle);
+    return (bitmap.valid()) ? bitmap->bitmap().getAshmemFd() : -1;
+}
+
 static void Bitmap_destruct(BitmapWrapper* bitmap) {
     delete bitmap;
 }
@@ -1257,6 +1262,7 @@
         (void*)Bitmap_copyAshmem },
     {   "nativeCopyAshmemConfig",   "(JI)Landroid/graphics/Bitmap;",
         (void*)Bitmap_copyAshmemConfig },
+    {   "nativeGetAshmemFD",        "(J)I", (void*)Bitmap_getAshmemFd },
     {   "nativeGetNativeFinalizer", "()J", (void*)Bitmap_getNativeFinalizer },
     {   "nativeRecycle",            "(J)V", (void*)Bitmap_recycle },
     {   "nativeReconfigure",        "(JIIIZ)V", (void*)Bitmap_reconfigure },