summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jared Duke <jdduke@google.com> 2024-06-25 16:29:18 +0000
committer Jared Duke <jdduke@google.com> 2024-06-25 17:10:58 +0000
commitd1307e7a101b68bb10fc51eb3fa56eb430848ffd (patch)
tree426af24970e98d129f870d9dc7a9d67b3a9cdaaf
parentc96151685f50105d88be4475fc247ba55fbaa22b (diff)
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
-rw-r--r--services/core/java/com/android/server/display/LocalDisplayAdapter.java4
1 files changed, 3 insertions, 1 deletions
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);