From af846e011507a8f83380b9c5869195e5880f2c81 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Mon, 19 Jun 2023 13:48:33 +0800 Subject: Clean up postWindowRemoveStartingWindowCleanUp The starting window will be remove automatically when activity died, so there doesn't need check whether the activity need to remove starting window when a window gone. When the client process killed during launch, the core can keep starting window on screen since there will restart the process with original activity, so doesn't need to remove starting window. Bug: 280516527 Bug: 290203002 Test: verify no regression for 156298440 Test: simulate to kill top app process while launch app, and verify no flickering occur. Change-Id: If85386e963d7cca0dad9a143d6de0e7cd87b05f0 --- .../java/com/android/server/wm/ActivityRecord.java | 29 ++++++---------------- .../android/server/wm/WindowManagerService.java | 2 +- 2 files changed, 8 insertions(+), 23 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 788bfbcd65c9..d5d2bbfb3ed1 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -4516,7 +4516,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A mTransitionChangeFlags |= FLAG_STARTING_WINDOW_TRANSFER_RECIPIENT; } // Post cleanup after the visibility and animation are transferred. - fromActivity.postWindowRemoveStartingWindowCleanup(tStartingWindow); + fromActivity.postWindowRemoveStartingWindowCleanup(); fromActivity.mVisibleSetFromTransferredStartingWindow = false; mWmService.updateFocusedWindowLocked( @@ -7430,27 +7430,12 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A } } - void postWindowRemoveStartingWindowCleanup(WindowState win) { - // TODO: Something smells about the code below...Is there a better way? - if (mStartingWindow == win) { - ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Notify removed startingWindow %s", win); - removeStartingWindow(); - } else if (mChildren.size() == 0) { - // If this is the last window and we had requested a starting transition window, - // well there is no point now. - ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Nulling last startingData"); - mStartingData = null; - if (mVisibleSetFromTransferredStartingWindow) { - // We set the visible state to true for the token from a transferred starting - // window. We now reset it back to false since the starting window was the last - // window in the token. - setVisible(false); - } - } else if (mChildren.size() == 1 && mStartingSurface != null && !isRelaunching()) { - // If this is the last window except for a starting transition window, - // we need to get rid of the starting transition. - ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Last window, removing starting window %s", win); - removeStartingWindow(); + void postWindowRemoveStartingWindowCleanup() { + if (mChildren.size() == 0 && mVisibleSetFromTransferredStartingWindow) { + // We set the visible state to true for the token from a transferred starting + // window. We now reset it back to false since the starting window was the last + // window in the token. + setVisible(false); } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 67572bfcad18..b19f9b5441d9 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2020,7 +2020,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (win.mActivityRecord != null) { - win.mActivityRecord.postWindowRemoveStartingWindowCleanup(win); + win.mActivityRecord.postWindowRemoveStartingWindowCleanup(); } if (win.mAttrs.type == TYPE_WALLPAPER) { -- cgit v1.2.3-59-g8ed1b