From ba64458660eadc374b08dcafe85d481aeb7b8d84 Mon Sep 17 00:00:00 2001 From: Hugo Saint-Vignes Date: Mon, 8 Feb 2021 10:50:05 +0100 Subject: [PATCH] [ion/simulator/android] Delete JNI local references Change-Id: Idd4d6c769786fb595a357bcc3f54e67429ed1840 --- ion/src/simulator/android/src/cpp/images.cpp | 8 +++++++- ion/src/simulator/android/src/cpp/telemetry.cpp | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ion/src/simulator/android/src/cpp/images.cpp b/ion/src/simulator/android/src/cpp/images.cpp index 4b3cfd85c..75855a3a0 100644 --- a/ion/src/simulator/android/src/cpp/images.cpp +++ b/ion/src/simulator/android/src/cpp/images.cpp @@ -2,6 +2,7 @@ #include #include #include +#include SDL_Texture * IonSimulatorLoadImage(SDL_Renderer * renderer, const char * identifier) { JNIEnv * env = static_cast(SDL_AndroidGetJNIEnv()); @@ -13,6 +14,7 @@ SDL_Texture * IonSimulatorLoadImage(SDL_Renderer * renderer, const char * identi "retrieveBitmapAsset", "(Ljava/lang/String;)Landroid/graphics/Bitmap;" ); + assert(j_methodId != 0); jstring j_identifier = env->NewStringUTF(identifier); @@ -45,6 +47,10 @@ SDL_Texture * IonSimulatorLoadImage(SDL_Renderer * renderer, const char * identi SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND); AndroidBitmap_unlockPixels(env, j_bitmap); - + // See comment in haptics_enabled.cpp + env->DeleteLocalRef(j_bitmap); + env->DeleteLocalRef(j_identifier); + env->DeleteLocalRef(j_class); + env->DeleteLocalRef(activity); return texture; } diff --git a/ion/src/simulator/android/src/cpp/telemetry.cpp b/ion/src/simulator/android/src/cpp/telemetry.cpp index e273c73a3..54c2fb1c8 100644 --- a/ion/src/simulator/android/src/cpp/telemetry.cpp +++ b/ion/src/simulator/android/src/cpp/telemetry.cpp @@ -1,6 +1,7 @@ #include "../../../shared/telemetry.h" #include #include +#include static inline JNIEnv * AndroidJNI() { return static_cast(SDL_AndroidGetJNIEnv()); @@ -23,8 +24,10 @@ void init() { jclass j_class = env->FindClass("com/numworks/calculator/EpsilonActivity"); jmethodID j_methodId = env->GetMethodID(j_class,"telemetryInit", "()V"); + assert(j_methodId != 0); env->CallVoidMethod(AndroidActivity(), j_methodId); + env->DeleteLocalRef(j_class); } void shutdown() { @@ -42,8 +45,10 @@ void reportScreen(const char * screenName) { jclass j_class = env->FindClass("com/numworks/calculator/EpsilonActivity"); jmethodID j_methodId = env->GetMethodID(j_class, "telemetryScreen", "(Ljava/lang/String;)V"); + assert(j_methodId != 0); env->CallVoidMethod(AndroidActivity(), j_methodId, JS(screenName, env)); + env->DeleteLocalRef(j_class); } void reportEvent(const char * category, const char * action, const char * label) { @@ -51,8 +56,10 @@ void reportEvent(const char * category, const char * action, const char * label) jclass j_class = env->FindClass("com/numworks/calculator/EpsilonActivity"); jmethodID j_methodId = env->GetMethodID(j_class, "telemetryEvent", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); + assert(j_methodId != 0); env->CallVoidMethod(AndroidActivity(), j_methodId, JS(category, env), JS(action, env), JS(label, env)); + env->DeleteLocalRef(j_class); } }