Fix ActivityRecord leak if mainWindow is animating.
For CTS test, sometimes remove starting window won't pass throught WS#removeIfPossible if the binder was dead before reveal animation finish. For this case, cancel reveal animation in WS#removeIfPossible if it's animating reveal animation. Bug: 184830058 Bug: 188245125 Bug: 188244674 Test: verify from bugreport that no systemui crash after WM's CTS. Test: run atest StartActivityTests then verify no activity leaked. Change-Id: I81484870ff89a78b6133be03d439d45d550bdd8c
This commit is contained in:
committed by
Wei Sheng Shih
parent
c73c098665
commit
5e49e12bb2
@@ -2409,18 +2409,22 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
final boolean startingWindow = mAttrs.type == TYPE_APPLICATION_STARTING;
|
||||
if (startingWindow) {
|
||||
ProtoLog.d(WM_DEBUG_STARTING_WINDOW, "Starting window removed %s", this);
|
||||
}
|
||||
|
||||
if (startingWindow && StartingSurfaceController.DEBUG_ENABLE_SHELL_DRAWER) {
|
||||
// Cancel the remove starting window animation on shell. The main window might changed
|
||||
// during animating, checking for all windows would be safer.
|
||||
if (mActivityRecord != null) {
|
||||
mActivityRecord.forAllWindows(w -> {
|
||||
mActivityRecord.forAllWindowsUnchecked(w -> {
|
||||
if (w.isSelfAnimating(0, ANIMATION_TYPE_STARTING_REVEAL)) {
|
||||
w.cancelAnimation();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}, true);
|
||||
}
|
||||
} else if (mAttrs.type == TYPE_BASE_APPLICATION
|
||||
&& isSelfAnimating(0, ANIMATION_TYPE_STARTING_REVEAL)) {
|
||||
// Cancel the remove starting window animation in case the binder dead before remove
|
||||
// splash window.
|
||||
cancelAnimation();
|
||||
}
|
||||
|
||||
ProtoLog.v(WM_DEBUG_FOCUS, "Remove client=%x, surfaceController=%s Callers=%s",
|
||||
@@ -2428,7 +2432,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
|
||||
mWinAnimator.mSurfaceController,
|
||||
Debug.getCallers(5));
|
||||
|
||||
|
||||
final long origId = Binder.clearCallingIdentity();
|
||||
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user