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

This commit is contained in:
TreeHugger Robot
2021-04-06 06:18:12 +00:00
committed by Android (Google) Code Review
2 changed files with 14 additions and 2 deletions

View File

@@ -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);

View File

@@ -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);