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

Commit e7aef726 authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Use an isolated token to represent shell transitions" into tm-qpr-dev

parents 32e574fe c2081458
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3353,7 +3353,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                    }
                }
                mWmService.mLatencyTracker.onActionStart(ACTION_ROTATE_SCREEN);
                controller.mTransitionMetricsReporter.associate(t,
                controller.mTransitionMetricsReporter.associate(t.getToken(),
                        startTime -> mWmService.mLatencyTracker.onActionEnd(ACTION_ROTATE_SCREEN));
                startAsyncRotation(false /* shouldDebounce */);
            }
+35 −7
Original line number Diff line number Diff line
@@ -98,6 +98,7 @@ import com.android.server.wm.utils.RotationAnimationUtils;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -107,7 +108,7 @@ import java.util.function.Predicate;
 * Represents a logical transition.
 * @see TransitionController
 */
class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListener {
class Transition implements BLASTSyncEngine.TransactionReadyListener {
    private static final String TAG = "Transition";
    private static final String TRACE_NAME_PLAY_TRANSITION = "PlayTransition";

@@ -158,6 +159,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
    private @TransitionFlags int mFlags;
    private final TransitionController mController;
    private final BLASTSyncEngine mSyncEngine;
    private final Token mToken;
    private RemoteTransition mRemoteTransition = null;

    /** Only use for clean-up after binder death! */
@@ -220,10 +222,26 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
        mFlags = flags;
        mController = controller;
        mSyncEngine = syncEngine;
        mToken = new Token(this);

        controller.mTransitionTracer.logState(this);
    }

    @Nullable
    static Transition fromBinder(@NonNull IBinder token) {
        try {
            return ((Token) token).mTransition.get();
        } catch (ClassCastException e) {
            Slog.w(TAG, "Invalid transition token: " + token, e);
            return null;
        }
    }

    @NonNull
    IBinder getToken() {
        return mToken;
    }

    void addFlag(int flag) {
        mFlags |= flag;
    }
@@ -1034,7 +1052,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
                ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
                        "Calling onTransitionReady: %s", info);
                mController.getTransitionPlayer().onTransitionReady(
                        this, info, transaction, mFinishTransaction);
                        mToken, info, transaction, mFinishTransaction);
                if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) {
                    Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, TRACE_NAME_PLAY_TRANSITION,
                            System.identityHashCode(this));
@@ -1067,7 +1085,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
        if (mFinishTransaction != null) {
            mFinishTransaction.apply();
        }
        mController.finishTransition(this);
        mController.finishTransition(mToken);
    }

    /** @see RecentsAnimationController#attachNavigationBarToApp */
@@ -1850,10 +1868,6 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
        return isCollecting() && mSyncId >= 0;
    }

    static Transition fromBinder(IBinder binder) {
        return (Transition) binder;
    }

    @VisibleForTesting
    static class ChangeInfo {
        private static final int FLAG_NONE = 0;
@@ -2345,4 +2359,18 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
            }
        }
    }

    private static class Token extends Binder {
        final WeakReference<Transition> mTransition;

        Token(Transition transition) {
            mTransition = new WeakReference<>(transition);
        }

        @Override
        public String toString() {
            return "Token{" + Integer.toHexString(System.identityHashCode(this)) + " "
                    + mTransition.get() + "}";
        }
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -458,8 +458,9 @@ class TransitionController {
                info = new ActivityManager.RunningTaskInfo();
                startTask.fillTaskInfo(info);
            }
            mTransitionPlayer.requestStartTransition(transition, new TransitionRequestInfo(
                    transition.mType, info, remoteTransition, displayChange));
            mTransitionPlayer.requestStartTransition(transition.getToken(),
                    new TransitionRequestInfo(transition.mType, info, remoteTransition,
                            displayChange));
            transition.setRemoteTransition(remoteTransition);
        } catch (RemoteException e) {
            Slog.e(TAG, "Error requesting transition", e);
+2 −2
Original line number Diff line number Diff line
@@ -307,7 +307,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                                        nextTransition.setAllReady();
                                    }
                                });
                        return nextTransition;
                        return nextTransition.getToken();
                    }
                    transition = mTransitionController.createTransition(type);
                }
@@ -316,7 +316,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
                if (needsSetReady) {
                    transition.setAllReady();
                }
                return transition;
                return transition.getToken();
            }
        } finally {
            Binder.restoreCallingIdentity(ident);
+1 −1
Original line number Diff line number Diff line
@@ -369,7 +369,7 @@ public class WallpaperControllerTests extends WindowTestsBase {
        final SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
        token.finishSync(t, false /* cancel */);
        transit.onTransactionReady(transit.getSyncId(), t);
        dc.mTransitionController.finishTransition(transit);
        dc.mTransitionController.finishTransition(transit.getToken());
        assertFalse(wallpaperWindow.isVisible());
        assertFalse(token.isVisible());

Loading