Merge "Avoid getting crashed by slow transition"

This commit is contained in:
Riddle Hsu
2023-02-08 01:43:53 +00:00
committed by Android (Google) Code Review
3 changed files with 16 additions and 7 deletions

View File

@@ -605,11 +605,16 @@ public class ActivityStartController {
final Task task = r.getTask();
mService.deferWindowLayout();
try {
r.mTransitionController.requestStartTransition(transition,
task, remoteTransition, null /* displayChange */);
r.mTransitionController.collect(task);
r.mTransitionController.setTransientLaunch(r,
TaskDisplayArea.getRootTaskAbove(rootTask));
final TransitionController controller = r.mTransitionController;
if (controller.getTransitionPlayer() != null) {
controller.requestStartTransition(transition, task, remoteTransition,
null /* displayChange */);
controller.collect(task);
controller.setTransientLaunch(r, TaskDisplayArea.getRootTaskAbove(rootTask));
} else {
// The transition player might be died when executing the queued transition.
transition.abort();
}
task.moveToFront("startExistingRecents");
task.mInResumeTopActivity = true;
task.resumeTopActivity(null /* prev */, options, true /* deferPause */);

View File

@@ -635,7 +635,8 @@ public class DisplayRotation {
if (mDisplayContent.mTransitionController.isShellTransitionsEnabled()) {
if (!mDisplayContent.mTransitionController.isCollecting()) {
throw new IllegalStateException("Trying to rotate outside a transition");
// The remote may be too slow to response before transition timeout.
Slog.e(TAG, "Trying to continue rotation outside a transition");
}
mDisplayContent.mTransitionController.collect(mDisplayContent);
}

View File

@@ -427,7 +427,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
if (mState < STATE_COLLECTING) {
throw new IllegalStateException("Can't start Transition which isn't collecting.");
} else if (mState >= STATE_STARTED) {
Slog.w(TAG, "Transition already started: " + mSyncId);
Slog.w(TAG, "Transition already started id=" + mSyncId + " state=" + mState);
// The transition may be aborted (STATE_ABORT) or timed out (STATE_PLAYING by
// SyncGroup#finishNow), so do not revert the state to STATE_STARTED.
return;
}
mState = STATE_STARTED;
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, "Starting Transition %d",