From 7db39980e778c5b3d26c230730cf61348bab6439 Mon Sep 17 00:00:00 2001 From: Rachel Lee Date: Fri, 10 Mar 2023 17:51:59 -0800 Subject: [PATCH] Use ScopedLocalRef in DisplayEventReceiver JNI Fix forward for memory regression. Bug: 272536386 Test: ABTD run with ATP from bug and check metric Change-Id: I15b597694a86a3d61e77bfef0c2c95e71207c23e --- .../jni/android_view_DisplayEventReceiver.cpp | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp index 739055e040af9..0c3ff6c28ea7d 100644 --- a/core/jni/android_view_DisplayEventReceiver.cpp +++ b/core/jni/android_view_DisplayEventReceiver.cpp @@ -169,21 +169,25 @@ void NativeDisplayEventReceiver::dispatchVsync(nsecs_t timestamp, PhysicalDispla gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.frameInterval, vsyncEventData.frameInterval); - jobjectArray frameTimelinesObj = reinterpret_cast( - env->GetObjectField(vsyncEventDataObj.get(), - gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo - .frameTimelines)); + ScopedLocalRef + frameTimelinesObj(env, + reinterpret_cast( + env->GetObjectField(vsyncEventDataObj.get(), + gDisplayEventReceiverClassInfo + .vsyncEventDataClassInfo + .frameTimelines))); for (int i = 0; i < VsyncEventData::kFrameTimelinesLength; i++) { VsyncEventData::FrameTimeline& frameTimeline = vsyncEventData.frameTimelines[i]; - jobject frameTimelineObj = env->GetObjectArrayElement(frameTimelinesObj, i); - env->SetLongField(frameTimelineObj, + ScopedLocalRef + frameTimelineObj(env, env->GetObjectArrayElement(frameTimelinesObj.get(), i)); + env->SetLongField(frameTimelineObj.get(), gDisplayEventReceiverClassInfo.frameTimelineClassInfo.vsyncId, frameTimeline.vsyncId); - env->SetLongField(frameTimelineObj, + env->SetLongField(frameTimelineObj.get(), gDisplayEventReceiverClassInfo.frameTimelineClassInfo .expectedPresentationTime, frameTimeline.expectedPresentationTime); - env->SetLongField(frameTimelineObj, + env->SetLongField(frameTimelineObj.get(), gDisplayEventReceiverClassInfo.frameTimelineClassInfo.deadline, frameTimeline.deadlineTimestamp); }