Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b51baa9e authored by Riddle Hsu's avatar Riddle Hsu
Browse files

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
parent cb1af1ca
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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 {
+1 −1
Original line number Diff line number Diff line
@@ -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;