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

Commit 4c2b636b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Call surfaceplacement if the window goes for relayout" into sc-dev am: ceaff386

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14070288

Change-Id: Ic3e55362706b19bfda97971374c0f496aee89540
parents 01ae1e69 ceaff386
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -776,6 +776,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
            if (mTmpInitial) {
                w.resetContentChanged();
            }
            w.mSurfacePlacementNeeded = true;
            w.mLayoutNeeded = false;
            w.prelayout();
            final boolean firstLayout = !w.isLaidOut();
@@ -818,6 +819,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                    //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial");
                    w.resetContentChanged();
                }
                w.mSurfacePlacementNeeded = true;
                w.mLayoutNeeded = false;
                w.prelayout();
                getDisplayPolicy().layoutWindowLw(w, w.getParentWindow(), mDisplayFrames);
+12 −2
Original line number Diff line number Diff line
@@ -513,6 +513,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
     */
    boolean mLayoutNeeded;

    /**
     * If the application is not currently visible but requires a layout,
     * then make sure we call performSurfacePlacement as well. This is set
     * in layout if mLayoutNeeded is set until surface placement is done.
     */
    boolean mSurfacePlacementNeeded;

    /** Currently running an exit animation? */
    boolean mAnimatingExit;

@@ -5367,7 +5374,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        mIsDimming = false;
        applyDims();
        updateSurfacePositionNonOrganized();
        // Send information to SufaceFlinger about the priority of the current window.
        // Send information to SurfaceFlinger about the priority of the current window.
        updateFrameRateSelectionPriorityIfNeeded();
        if (isVisibleRequested()) updateGlobalScaleIfNeeded();

@@ -5381,13 +5388,16 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        if (mSurfaceControl == null) {
            return;
        }
        if (mWmService.mWindowPlacerLocked.isLayoutDeferred() || isGoneForLayout()) {

        if ((mWmService.mWindowPlacerLocked.isLayoutDeferred() || isGoneForLayout())
                && !mSurfacePlacementNeeded) {
            // Since this relies on mWindowFrames, changes made while layout is deferred are
            // likely to be invalid. Similarly, if it's goneForLayout, mWindowFrames may not be
            // up-to-date and thus can't be relied on.
            return;
        }

        mSurfacePlacementNeeded = false;
        transformFrameToSurfacePosition(mWindowFrames.mFrame.left, mWindowFrames.mFrame.top,
                mSurfacePosition);