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

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20583342

Change-Id: I28869e4b4d301694911328a953054e4208447005
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Evan Rosky
2022-11-29 18:13:58 +00:00
committed by Automerger Merge Worker
6 changed files with 44 additions and 15 deletions

View File

@@ -3353,7 +3353,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
} }
} }
mWmService.mLatencyTracker.onActionStart(ACTION_ROTATE_SCREEN); mWmService.mLatencyTracker.onActionStart(ACTION_ROTATE_SCREEN);
controller.mTransitionMetricsReporter.associate(t, controller.mTransitionMetricsReporter.associate(t.getToken(),
startTime -> mWmService.mLatencyTracker.onActionEnd(ACTION_ROTATE_SCREEN)); startTime -> mWmService.mLatencyTracker.onActionEnd(ACTION_ROTATE_SCREEN));
startAsyncRotation(false /* shouldDebounce */); startAsyncRotation(false /* shouldDebounce */);
} }

View File

@@ -98,6 +98,7 @@ import com.android.server.wm.utils.RotationAnimationUtils;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.ref.WeakReference;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@@ -107,7 +108,7 @@ import java.util.function.Predicate;
* Represents a logical transition. * Represents a logical transition.
* @see TransitionController * @see TransitionController
*/ */
class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListener { class Transition implements BLASTSyncEngine.TransactionReadyListener {
private static final String TAG = "Transition"; private static final String TAG = "Transition";
private static final String TRACE_NAME_PLAY_TRANSITION = "PlayTransition"; 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 @TransitionFlags int mFlags;
private final TransitionController mController; private final TransitionController mController;
private final BLASTSyncEngine mSyncEngine; private final BLASTSyncEngine mSyncEngine;
private final Token mToken;
private RemoteTransition mRemoteTransition = null; private RemoteTransition mRemoteTransition = null;
/** Only use for clean-up after binder death! */ /** Only use for clean-up after binder death! */
@@ -220,10 +222,26 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
mFlags = flags; mFlags = flags;
mController = controller; mController = controller;
mSyncEngine = syncEngine; mSyncEngine = syncEngine;
mToken = new Token(this);
controller.mTransitionTracer.logState(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) { void addFlag(int flag) {
mFlags |= flag; mFlags |= flag;
} }
@@ -1034,7 +1052,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS,
"Calling onTransitionReady: %s", info); "Calling onTransitionReady: %s", info);
mController.getTransitionPlayer().onTransitionReady( mController.getTransitionPlayer().onTransitionReady(
this, info, transaction, mFinishTransaction); mToken, info, transaction, mFinishTransaction);
if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) { if (Trace.isTagEnabled(TRACE_TAG_WINDOW_MANAGER)) {
Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, TRACE_NAME_PLAY_TRANSITION, Trace.asyncTraceBegin(TRACE_TAG_WINDOW_MANAGER, TRACE_NAME_PLAY_TRANSITION,
System.identityHashCode(this)); System.identityHashCode(this));
@@ -1067,7 +1085,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
if (mFinishTransaction != null) { if (mFinishTransaction != null) {
mFinishTransaction.apply(); mFinishTransaction.apply();
} }
mController.finishTransition(this); mController.finishTransition(mToken);
} }
/** @see RecentsAnimationController#attachNavigationBarToApp */ /** @see RecentsAnimationController#attachNavigationBarToApp */
@@ -1850,10 +1868,6 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
return isCollecting() && mSyncId >= 0; return isCollecting() && mSyncId >= 0;
} }
static Transition fromBinder(IBinder binder) {
return (Transition) binder;
}
@VisibleForTesting @VisibleForTesting
static class ChangeInfo { static class ChangeInfo {
private static final int FLAG_NONE = 0; 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() + "}";
}
}
} }

View File

@@ -458,8 +458,9 @@ class TransitionController {
info = new ActivityManager.RunningTaskInfo(); info = new ActivityManager.RunningTaskInfo();
startTask.fillTaskInfo(info); startTask.fillTaskInfo(info);
} }
mTransitionPlayer.requestStartTransition(transition, new TransitionRequestInfo( mTransitionPlayer.requestStartTransition(transition.getToken(),
transition.mType, info, remoteTransition, displayChange)); new TransitionRequestInfo(transition.mType, info, remoteTransition,
displayChange));
transition.setRemoteTransition(remoteTransition); transition.setRemoteTransition(remoteTransition);
} catch (RemoteException e) { } catch (RemoteException e) {
Slog.e(TAG, "Error requesting transition", e); Slog.e(TAG, "Error requesting transition", e);

View File

@@ -307,7 +307,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
nextTransition.setAllReady(); nextTransition.setAllReady();
} }
}); });
return nextTransition; return nextTransition.getToken();
} }
transition = mTransitionController.createTransition(type); transition = mTransitionController.createTransition(type);
} }
@@ -316,7 +316,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
if (needsSetReady) { if (needsSetReady) {
transition.setAllReady(); transition.setAllReady();
} }
return transition; return transition.getToken();
} }
} finally { } finally {
Binder.restoreCallingIdentity(ident); Binder.restoreCallingIdentity(ident);

View File

@@ -369,7 +369,7 @@ public class WallpaperControllerTests extends WindowTestsBase {
final SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class); final SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class);
token.finishSync(t, false /* cancel */); token.finishSync(t, false /* cancel */);
transit.onTransactionReady(transit.getSyncId(), t); transit.onTransactionReady(transit.getSyncId(), t);
dc.mTransitionController.finishTransition(transit); dc.mTransitionController.finishTransition(transit.getToken());
assertFalse(wallpaperWindow.isVisible()); assertFalse(wallpaperWindow.isVisible());
assertFalse(token.isVisible()); assertFalse(token.isVisible());

View File

@@ -1731,7 +1731,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
} }
void startTransition() { void startTransition() {
mOrganizer.startTransition(mLastTransit, null); mOrganizer.startTransition(mLastTransit.getToken(), null);
} }
void onTransactionReady(SurfaceControl.Transaction t) { void onTransactionReady(SurfaceControl.Transaction t) {
@@ -1744,7 +1744,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
} }
public void finish() { public void finish() {
mController.finishTransition(mLastTransit); mController.finishTransition(mLastTransit.getToken());
} }
} }
} }