Avoid potential recursion of surface placement

WindowSurfacePlacer#mInLayout can guard the case of calling
RootWindowContainer#performSurfacePlacement recursively.
But it requires the caller to use WindowSurfacePlacer instead
of the inner method.

Bug: 234840614
Bug: 237481770
Test: CtsWindowManagerDeviceTestCases
Change-Id: Ie87646da2848cc988e3ea51644e86e2a88c2fd3a
This commit is contained in:
Riddle Hsu
2022-07-08 15:52:54 +08:00
parent cb1af1ca55
commit b51baa9ea4
2 changed files with 5 additions and 1 deletions

View File

@@ -779,6 +779,10 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
return leakedSurface || killedApps;
}
/**
* This method should only be called from {@link WindowSurfacePlacer}. Otherwise the recursion
* check and {@link WindowSurfacePlacer#isInLayout()} won't take effect.
*/
void performSurfacePlacement() {
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "performSurfacePlacement");
try {

View File

@@ -5611,7 +5611,7 @@ public class WindowManagerService extends IWindowManager.Stub
mWindowsInsetsChanged = 0;
// We need to update resizing windows and dispatch the new insets state
// to them.
mRoot.performSurfacePlacement();
mWindowPlacerLocked.performSurfacePlacement();
}
}
break;