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
This commit is contained in:
Rachel Lee
2023-03-10 17:51:59 -08:00
parent 3d2226d210
commit 7db39980e7

View File

@@ -169,21 +169,25 @@ void NativeDisplayEventReceiver::dispatchVsync(nsecs_t timestamp, PhysicalDispla
gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo.frameInterval,
vsyncEventData.frameInterval);
jobjectArray frameTimelinesObj = reinterpret_cast<jobjectArray>(
env->GetObjectField(vsyncEventDataObj.get(),
gDisplayEventReceiverClassInfo.vsyncEventDataClassInfo
.frameTimelines));
ScopedLocalRef<jobjectArray>
frameTimelinesObj(env,
reinterpret_cast<jobjectArray>(
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<jobject>
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);
}