From 15da7e24a5c73f600dc87d103d82f6396b2ef82e Mon Sep 17 00:00:00 2001 From: Derek Sollenberger Date: Fri, 14 Feb 2020 14:16:34 -0500 Subject: [PATCH] Update Region.cpp to use AParcel NDK APIs Test: CtsGraphicsTestCases Bug: 145227478 Change-Id: I36f5d3e760bce3c302277c7897c7f8df0ac3cb61 --- libs/hwui/Android.bp | 3 ++- libs/hwui/jni/Region.cpp | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libs/hwui/Android.bp b/libs/hwui/Android.bp index 1715a279130e6..973f857a861cd 100644 --- a/libs/hwui/Android.bp +++ b/libs/hwui/Android.bp @@ -288,7 +288,6 @@ cc_defaults { "jni/PathEffect.cpp", "jni/PathMeasure.cpp", "jni/Picture.cpp", - "jni/Region.cpp", "jni/Shader.cpp", "jni/Typeface.cpp", "jni/Utils.cpp", @@ -334,6 +333,7 @@ cc_defaults { "jni/GraphicsStatsService.cpp", "jni/Movie.cpp", "jni/MovieImpl.cpp", + "jni/Region.cpp", // requires libbinder_ndk "jni/pdf/PdfDocument.cpp", "jni/pdf/PdfEditor.cpp", "jni/pdf/PdfRenderer.cpp", @@ -341,6 +341,7 @@ cc_defaults { ], shared_libs: [ "libandroidfw", + "libbinder_ndk", "libmediandk", "libnativedisplay", "libnativewindow", diff --git a/libs/hwui/jni/Region.cpp b/libs/hwui/jni/Region.cpp index c95bcea57ef5c..1e064b8205916 100644 --- a/libs/hwui/jni/Region.cpp +++ b/libs/hwui/jni/Region.cpp @@ -19,10 +19,10 @@ #include "GraphicsJNI.h" #ifdef __ANDROID__ // Layoutlib does not support parcel -#include +#include +#include +#include #endif -#include "android_os_Parcel.h" -#include "android_util_Binder.h" namespace android { @@ -207,10 +207,11 @@ static jlong Region_createFromParcel(JNIEnv* env, jobject clazz, jobject parcel) return 0; } - android::Parcel* p = android::parcelForJavaObject(env, parcel); - std::vector rects; - p->readInt32Vector(&rects); + + AParcel* p = AParcel_fromJavaParcel(env, parcel); + ndk::AParcel_readVector(p, &rects); + AParcel_delete(p); if ((rects.size() % 4) != 0) { return 0; @@ -235,8 +236,6 @@ static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, jlong regionHan return JNI_FALSE; } - android::Parcel* p = android::parcelForJavaObject(env, parcel); - std::vector rects; SkRegion::Iterator it(*region); while (!it.done()) { @@ -248,7 +247,10 @@ static jboolean Region_writeToParcel(JNIEnv* env, jobject clazz, jlong regionHan it.next(); } - p->writeInt32Vector(rects); + AParcel* p = AParcel_fromJavaParcel(env, parcel); + ndk::AParcel_writeVector(p, rects); + AParcel_delete(p); + return JNI_TRUE; #else return JNI_FALSE;