From dd89c3b56e496ec23329891670dec8d5f6499d64 Mon Sep 17 00:00:00 2001 From: Bo Liu Date: Tue, 11 Oct 2022 20:26:31 -0400 Subject: [PATCH] SurfaceControl ndk-jni API review ASurfaceControl_fromSurfaceControl should acquire a reference before returning. Abort if the arguments are invalid, make the return code nonnull. Test: ASurfaceControlTest#testSurfaceControl_fromSurfaceControl and ASurfaceControlTest#testSurfaceTransaction_fromTransaction Bug: 253053203 Change-Id: If48ff4a534c5765c4831e518e44f77d0429e8981 --- native/android/surface_control.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp index 21d4d8023e54e..891379977a6c1 100644 --- a/native/android/surface_control.cpp +++ b/native/android/surface_control.cpp @@ -139,8 +139,18 @@ void ASurfaceControl_release(ASurfaceControl* aSurfaceControl) { } ASurfaceControl* ASurfaceControl_fromSurfaceControl(JNIEnv* env, jobject surfaceControlObj) { - return reinterpret_cast( - android_view_SurfaceControl_getNativeSurfaceControl(env, surfaceControlObj)); + LOG_ALWAYS_FATAL_IF(!env, + "nullptr passed to ASurfaceControl_fromSurfaceControl as env argument"); + LOG_ALWAYS_FATAL_IF(!surfaceControlObj, + "nullptr passed to ASurfaceControl_fromSurfaceControl as surfaceControlObj " + "argument"); + SurfaceControl* surfaceControl = + android_view_SurfaceControl_getNativeSurfaceControl(env, surfaceControlObj); + LOG_ALWAYS_FATAL_IF(!surfaceControl, + "surfaceControlObj passed to ASurfaceControl_fromSurfaceControl is not " + "valid"); + SurfaceControl_acquire(surfaceControl); + return reinterpret_cast(surfaceControl); } struct ASurfaceControlStats { @@ -200,8 +210,17 @@ void ASurfaceTransaction_delete(ASurfaceTransaction* aSurfaceTransaction) { } ASurfaceTransaction* ASurfaceTransaction_fromTransaction(JNIEnv* env, jobject transactionObj) { - return reinterpret_cast( - android_view_SurfaceTransaction_getNativeSurfaceTransaction(env, transactionObj)); + LOG_ALWAYS_FATAL_IF(!env, + "nullptr passed to ASurfaceTransaction_fromTransaction as env argument"); + LOG_ALWAYS_FATAL_IF(!transactionObj, + "nullptr passed to ASurfaceTransaction_fromTransaction as transactionObj " + "argument"); + Transaction* transaction = + android_view_SurfaceTransaction_getNativeSurfaceTransaction(env, transactionObj); + LOG_ALWAYS_FATAL_IF(!transaction, + "surfaceControlObj passed to ASurfaceTransaction_fromTransaction is not " + "valid"); + return reinterpret_cast(transaction); } void ASurfaceTransaction_apply(ASurfaceTransaction* aSurfaceTransaction) {