Merge "Avoid getting crashed by slow transition"
This commit is contained in:
@@ -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 */);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user