Merge "Use an isolated token to represent shell transitions" into tm-qpr-dev
This commit is contained in:
@@ -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 */);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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() + "}";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user