Add ScopedLocalRef for new Strings in JNI

When creating a new String, wrap in ScopedLocalRef to ensure the String
is cleaned up.

Test: hprof after using the device a lot
Fixes: 222170518
Change-Id: Idf0b903381067d55399e6d66b3034efad90ab072
This commit is contained in:
chaviw
2022-03-02 17:40:01 -06:00
parent 0563d4fb32
commit 9615b0c6ad

View File

@@ -325,8 +325,8 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn
"Failed to create new InputWindowHandle object.");
env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.token,
javaObjectForIBinder(env, windowInfo.token));
env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.name,
env->NewStringUTF(windowInfo.name.data()));
ScopedLocalRef<jstring> name(env, env->NewStringUTF(windowInfo.name.data()));
env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.name, name.get());
env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.layoutParamsFlags,
static_cast<uint32_t>(windowInfo.layoutParamsFlags.get()));
env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.layoutParamsType,
@@ -374,8 +374,9 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn
static_cast<int32_t>(windowInfo.touchOcclusionMode));
env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerPid, windowInfo.ownerPid);
env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.ownerUid, windowInfo.ownerUid);
ScopedLocalRef<jstring> packageName(env, env->NewStringUTF(windowInfo.packageName.data()));
env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.packageName,
env->NewStringUTF(windowInfo.packageName.data()));
packageName.get());
env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.inputFeatures,
static_cast<int32_t>(windowInfo.inputFeatures.get()));