Do not add starting window after the starting data was cleared.
After moving the starting window logic to Shell, some timeing could be changed. For some case the starting window could be added back to window manager after app has drawn, for this case the mStartingData was already cleared. A reasonable solution should to prevent the starting window add back to window manager if window manager already clear the starting data, and for this case we don't need to remove the starting window from window manager. Bug: 182749276 Test: atest ActivityRecordTests Change-Id: Iec8581908a413a1d8f70a2006d58386c5c8f5b86
This commit is contained in:
@@ -3307,6 +3307,12 @@
|
||||
"group": "WM_DEBUG_WINDOW_TRANSITIONS",
|
||||
"at": "com\/android\/server\/wm\/TransitionController.java"
|
||||
},
|
||||
"1804245629": {
|
||||
"message": "Attempted to add starting window to token but already cleaned",
|
||||
"level": "WARN",
|
||||
"group": "WM_ERROR",
|
||||
"at": "com\/android\/server\/wm\/WindowManagerService.java"
|
||||
},
|
||||
"1810019902": {
|
||||
"message": "TRANSIT_FLAG_OPEN_BEHIND, adding %s to mOpeningApps",
|
||||
"level": "DEBUG",
|
||||
|
||||
@@ -2247,6 +2247,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
|
||||
// Go ahead and cancel the request.
|
||||
ProtoLog.v(WM_DEBUG_STARTING_WINDOW, "Clearing startingData for token=%s", this);
|
||||
mStartingData = null;
|
||||
// Clean surface up since we don't want the window to be added back, so we don't
|
||||
// need to keep the surface to remove it.
|
||||
mStartingSurface = null;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1600,11 +1600,17 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
ProtoLog.w(WM_ERROR, "Attempted to add window with exiting application token "
|
||||
+ ".%s Aborting.", token);
|
||||
return WindowManagerGlobal.ADD_APP_EXITING;
|
||||
} else if (type == TYPE_APPLICATION_STARTING && activity.mStartingWindow != null) {
|
||||
ProtoLog.w(WM_ERROR,
|
||||
"Attempted to add starting window to token with already existing"
|
||||
+ " starting window");
|
||||
return WindowManagerGlobal.ADD_DUPLICATE_ADD;
|
||||
} else if (type == TYPE_APPLICATION_STARTING) {
|
||||
if (activity.mStartingWindow != null) {
|
||||
ProtoLog.w(WM_ERROR, "Attempted to add starting window to "
|
||||
+ "token with already existing starting window");
|
||||
return WindowManagerGlobal.ADD_DUPLICATE_ADD;
|
||||
}
|
||||
if (activity.mStartingData == null) {
|
||||
ProtoLog.w(WM_ERROR, "Attempted to add starting window to "
|
||||
+ "token but already cleaned");
|
||||
return WindowManagerGlobal.ADD_DUPLICATE_ADD;
|
||||
}
|
||||
}
|
||||
} else if (rootType == TYPE_INPUT_METHOD) {
|
||||
if (token.windowType != TYPE_INPUT_METHOD) {
|
||||
|
||||
Reference in New Issue
Block a user