Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d1307e7a authored by Jared Duke's avatar Jared Duke
Browse files

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
parent c9615168
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ import android.view.RoundedCorners;
import android.view.SurfaceControl;
import android.view.SurfaceControl;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.KeepForWeakReference;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.display.BrightnessSynchronizer;
import com.android.internal.display.BrightnessSynchronizer;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.internal.util.function.pooled.PooledLambda;
@@ -1364,8 +1365,9 @@ final class LocalDisplayAdapter extends DisplayAdapter {
    }
    }


    public static class Injector {
    public static class Injector {
        // Native callback.
        // Ensure the callback is kept to preserve native weak reference lifecycle semantics.
        @SuppressWarnings("unused")
        @SuppressWarnings("unused")
        @KeepForWeakReference
        private ProxyDisplayEventReceiver mReceiver;
        private ProxyDisplayEventReceiver mReceiver;
        public void setDisplayEventListenerLocked(Looper looper, DisplayEventListener listener) {
        public void setDisplayEventListenerLocked(Looper looper, DisplayEventListener listener) {
            mReceiver = new ProxyDisplayEventReceiver(looper, listener);
            mReceiver = new ProxyDisplayEventReceiver(looper, listener);