From d1307e7a101b68bb10fc51eb3fa56eb430848ffd Mon Sep 17 00:00:00 2001 From: Jared Duke Date: Tue, 25 Jun 2024 16:29:18 +0000 Subject: Keep members that are weakly referenced from native code When full optimization is enabled in system_server, members that are write-only may be optimized away. This can impact downstream weak reference lifecycle semantics. Annotate such a member in LocalDisplayAdapter that is weakly referenced from native code. Test: FULL_SYSTEM_OPTIMIZE_JAVA=true m + check member preserved Bug: 349245577 Change-Id: I355ee0ff7009476d4b917fc8dd078922d1b2c15b --- .../core/java/com/android/server/display/LocalDisplayAdapter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index 22898a65c5de..ee63c08edee2 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -45,6 +45,7 @@ import android.view.RoundedCorners; import android.view.SurfaceControl; import com.android.internal.R; +import com.android.internal.annotations.KeepForWeakReference; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.display.BrightnessSynchronizer; import com.android.internal.util.function.pooled.PooledLambda; @@ -1364,8 +1365,9 @@ final class LocalDisplayAdapter extends DisplayAdapter { } public static class Injector { - // Native callback. + // Ensure the callback is kept to preserve native weak reference lifecycle semantics. @SuppressWarnings("unused") + @KeepForWeakReference private ProxyDisplayEventReceiver mReceiver; public void setDisplayEventListenerLocked(Looper looper, DisplayEventListener listener) { mReceiver = new ProxyDisplayEventReceiver(looper, listener); -- cgit v1.2.3-59-g8ed1b