Made DisplayContent.mLayoutNeeded private scoped.
And, added accessor methods for it to make it easier to
debug who is setting it.
Bug: 31794753
Test: Existing tests pass.
Change-Id: I517c3e5cc7535cb90c47c112d42fa1dbf0b81583
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index ba26e13..a265f26 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -429,7 +429,7 @@
for (int i = 0; i < displayList.size(); i++) {
final DisplayContent displayContent = displayList.get(i);
mService.mLayersController.assignLayersLocked(displayContent.getWindowList());
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
}
@@ -957,7 +957,7 @@
mService.updateFocusedWindowLocked(
UPDATE_FOCUS_WILL_PLACE_SURFACES, true /*updateInputWindows*/);
- mService.getDefaultDisplayContentLocked().layoutNeeded = true;
+ mService.getDefaultDisplayContentLocked().setLayoutNeeded();
mService.mWindowPlacerLocked.performSurfacePlacement();
Binder.restoreCallingIdentity(origId);
return true;
@@ -1065,7 +1065,7 @@
allDrawn = true;
// Force an additional layout pass where
// WindowStateAnimator#commitFinishDrawingLocked() will call performShowLocked().
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
mService.mH.obtainMessage(NOTIFY_ACTIVITY_DRAWN, token).sendToTarget();
}
}
@@ -1076,7 +1076,7 @@
+ " interesting=" + numInteresting
+ " drawn=" + numDrawnWindowsExcludingSaved);
allDrawnExcludingSaved = true;
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
if (isAnimatingInvisibleWithSavedSurface()
&& !mService.mFinishedEarlyAnim.contains(this)) {
mService.mFinishedEarlyAnim.add(this);
diff --git a/services/core/java/com/android/server/wm/DimLayerController.java b/services/core/java/com/android/server/wm/DimLayerController.java
index 7f97c46..da2c6a7 100644
--- a/services/core/java/com/android/server/wm/DimLayerController.java
+++ b/services/core/java/com/android/server/wm/DimLayerController.java
@@ -256,7 +256,7 @@
// on whether a dim layer is showing or not.
if (targetAlpha == 0) {
mDisplayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_LAYOUT;
- mDisplayContent.layoutNeeded = true;
+ mDisplayContent.setLayoutNeeded();
}
}
} else if (state.dimLayer.getLayer() != dimLayer) {
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 66682d8..3accb00 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -38,6 +38,7 @@
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_DISPLAY;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_FOCUS_LIGHT;
+import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYOUT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WINDOW_MOVEMENT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ORIENTATION;
@@ -100,7 +101,7 @@
private Rect mContentRect = new Rect();
// Accessed directly by all users.
- boolean layoutNeeded;
+ private boolean mLayoutNeeded;
int pendingLayoutChanges;
final boolean isDefaultDisplay;
@@ -367,7 +368,7 @@
}
}
addChild(stack, addIndex);
- layoutNeeded = true;
+ setLayoutNeeded();
}
/**
@@ -684,8 +685,8 @@
pw.print("x"); pw.print(mDisplayInfo.smallestNominalAppHeight);
pw.print("-"); pw.print(mDisplayInfo.largestNominalAppWidth);
pw.print("x"); pw.println(mDisplayInfo.largestNominalAppHeight);
- pw.print(subPrefix); pw.print("deferred="); pw.print(mDeferredRemoval);
- pw.print(" layoutNeeded="); pw.println(layoutNeeded);
+ pw.println(subPrefix + "deferred=" + mDeferredRemoval
+ + " mLayoutNeeded=" + mLayoutNeeded);
pw.println();
pw.println(" Application tokens in top down Z order:");
@@ -1090,7 +1091,7 @@
i -= lastBelow;
if (i != numRemoved) {
- layoutNeeded = true;
+ setLayoutNeeded();
Slog.w(TAG_WM, "On display=" + mDisplayId + " Rebuild removed " + numRemoved
+ " windows but added " + i + " rebuildAppWindowListLocked() "
+ " callers=" + Debug.getCallers(10));
@@ -1127,6 +1128,20 @@
return windowList;
}
+ void setLayoutNeeded() {
+ if (DEBUG_LAYOUT) Slog.w(TAG_WM, "setLayoutNeeded: callers=" + Debug.getCallers(3));
+ mLayoutNeeded = true;
+ }
+
+ void clearLayoutNeeded() {
+ if (DEBUG_LAYOUT) Slog.w(TAG_WM, "clearLayoutNeeded: callers=" + Debug.getCallers(3));
+ mLayoutNeeded = false;
+ }
+
+ boolean isLayoutNeeded() {
+ return mLayoutNeeded;
+ }
+
private int addAppWindowExisting(WindowState win, WindowList tokenWindowList) {
int tokenWindowsPos;
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 8f533fb..5b0c471 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -29,7 +29,6 @@
import android.provider.Settings;
import android.util.EventLog;
import android.util.Slog;
-import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.Display;
import android.view.DisplayInfo;
@@ -265,11 +264,11 @@
return bounds;
}
- boolean layoutNeeded() {
+ boolean isLayoutNeeded() {
final int numDisplays = mChildren.size();
for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
final DisplayContent displayContent = mChildren.get(displayNdx);
- if (displayContent.layoutNeeded) {
+ if (displayContent.isLayoutNeeded()) {
return true;
}
}
@@ -753,7 +752,7 @@
}
}
- if (layoutNeeded()) {
+ if (isLayoutNeeded()) {
defaultDisplay.pendingLayoutChanges |= FINISH_LAYOUT_REDO_LAYOUT;
if (DEBUG_LAYOUT_REPEATS) surfacePlacer.debugLayoutRepeats("mLayoutNeeded",
defaultDisplay.pendingLayoutChanges);
@@ -840,13 +839,13 @@
if (wallpaperDestroyed) {
defaultDisplay.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
- defaultDisplay.layoutNeeded = true;
+ defaultDisplay.setLayoutNeeded();
}
for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
final DisplayContent displayContent = mChildren.get(displayNdx);
if (displayContent.pendingLayoutChanges != 0) {
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
}
@@ -901,8 +900,8 @@
}
if (mService.mWaitingForDrawnCallback != null ||
- (mOrientationChangeComplete && !defaultDisplay.layoutNeeded &&
- !mUpdateRotation)) {
+ (mOrientationChangeComplete && !defaultDisplay.isLayoutNeeded()
+ && !mUpdateRotation)) {
mService.checkDrawnWindowsLocked();
}
@@ -925,7 +924,7 @@
for (DisplayContent displayContent : displayList) {
mService.mLayersController.assignLayersLocked(displayContent.getWindowList());
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
}
@@ -951,7 +950,7 @@
}
// TODO: Super crazy long method that should be broken down...
- void applySurfaceChangesTransaction(boolean recoveringMemory, int defaultDw, int defaultDh) {
+ private void applySurfaceChangesTransaction(boolean recoveringMemory, int defaultDw, int defaultDh) {
mHoldScreenWindow = null;
mObsuringWindow = null;
@@ -993,7 +992,7 @@
repeats++;
if (repeats > 6) {
Slog.w(TAG, "Animation repeat aborted after too many iterations");
- dc.layoutNeeded = false;
+ dc.clearLayoutNeeded();
break;
}
@@ -1003,20 +1002,20 @@
if ((dc.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0
&& mService.mWallpaperControllerLocked.adjustWallpaperWindows()) {
mService.mLayersController.assignLayersLocked(windows);
- dc.layoutNeeded = true;
+ dc.setLayoutNeeded();
}
if (isDefaultDisplay
&& (dc.pendingLayoutChanges & FINISH_LAYOUT_REDO_CONFIG) != 0) {
if (DEBUG_LAYOUT) Slog.v(TAG, "Computing new config from layout");
if (mService.updateOrientationFromAppTokensLocked(true)) {
- dc.layoutNeeded = true;
+ dc.setLayoutNeeded();
mService.mH.sendEmptyMessage(SEND_NEW_CONFIGURATION);
}
}
if ((dc.pendingLayoutChanges & FINISH_LAYOUT_REDO_LAYOUT) != 0) {
- dc.layoutNeeded = true;
+ dc.setLayoutNeeded();
}
// FIRST LOOP: Perform a layout, if needed.
@@ -1407,14 +1406,14 @@
}
void dumpLayoutNeededDisplayIds(PrintWriter pw) {
- if (!layoutNeeded()) {
+ if (!isLayoutNeeded()) {
return;
}
- pw.print(" layoutNeeded on displays=");
+ pw.print(" mLayoutNeeded on displays=");
final int count = mChildren.size();
for (int displayNdx = 0; displayNdx < count; ++displayNdx) {
final DisplayContent displayContent = mChildren.get(displayNdx);
- if (displayContent.layoutNeeded) {
+ if (displayContent.isLayoutNeeded()) {
pw.print(displayContent.getDisplayId());
}
}
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index e374185e..329afad 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -230,7 +230,7 @@
}
}
alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds);
- mDisplayContent.layoutNeeded = true;
+ mDisplayContent.setLayoutNeeded();
}
private void alignTasksToAdjustedBounds(Rect adjustedBounds, Rect tempInsetBounds) {
@@ -598,7 +598,7 @@
if (mChildren.isEmpty()) {
mDisplayContent.moveStack(this, false);
}
- mDisplayContent.layoutNeeded = true;
+ mDisplayContent.setLayoutNeeded();
}
for (int appNdx = mExitingAppTokens.size() - 1; appNdx >= 0; --appNdx) {
final AppWindowToken wtoken = mExitingAppTokens.get(appNdx);
@@ -1080,7 +1080,7 @@
final Rect insetBounds = mImeGoingAway ? mBounds : mFullyAdjustedImeBounds;
task.alignToAdjustedBounds(mAdjustedBounds, insetBounds, getDockSide() == DOCKED_TOP);
- mDisplayContent.layoutNeeded = true;
+ mDisplayContent.setLayoutNeeded();
}
boolean isAdjustedForMinimizedDockedStack() {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 1ed4055..64d0df9 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -3029,7 +3029,7 @@
if (currentConfig.diff(mTempConfiguration) != 0) {
mWaitingForConfig = true;
final DisplayContent displayContent = getDefaultDisplayContentLocked();
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
int anim[] = new int[2];
if (displayContent.isDimming()) {
anim[0] = anim[1] = 0;
@@ -3804,7 +3804,7 @@
displayContent.rebuildAppWindowList();
- // Set displayContent.layoutNeeded if window order changed.
+ // Set displayContent.mLayoutNeeded if window order changed.
final int tmpSize = mTmpWindows.size();
final int winSize = windows.size();
int tmpNdx = 0, winNdx = 0;
@@ -3822,13 +3822,13 @@
if (tmp != win) {
// Window order changed.
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
break;
}
}
if (tmpNdx != winNdx) {
// One list was different from the other.
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
mTmpWindows.clear();
@@ -3992,7 +3992,7 @@
}
task.moveTaskToStack(stack, toTop);
final DisplayContent displayContent = stack.getDisplayContent();
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
mWindowPlacerLocked.performSurfacePlacement();
}
}
@@ -4044,7 +4044,7 @@
}
if (stack.setBounds(bounds, configs, taskBounds, taskTempInsetBounds)
&& stack.isVisible()) {
- stack.getDisplayContent().layoutNeeded = true;
+ stack.getDisplayContent().setLayoutNeeded();
mWindowPlacerLocked.performSurfacePlacement();
}
return stack.getRawFullscreen();
@@ -4081,7 +4081,7 @@
}
task.positionTaskInStack(stack, position, bounds, config);
final DisplayContent displayContent = stack.getDisplayContent();
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
mWindowPlacerLocked.performSurfacePlacement();
}
}
@@ -4101,7 +4101,7 @@
}
if (task.resizeLocked(bounds, overrideConfig, forced) && relayout) {
- task.getDisplayContent().layoutNeeded = true;
+ task.getDisplayContent().setLayoutNeeded();
mWindowPlacerLocked.performSurfacePlacement();
}
}
@@ -5459,7 +5459,7 @@
synchronized(mWindowMap) {
changed = updateRotationUncheckedLocked(false);
if (!changed || forceRelayout) {
- getDefaultDisplayContentLocked().layoutNeeded = true;
+ getDefaultDisplayContentLocked().setLayoutNeeded();
mWindowPlacerLocked.performSurfacePlacement();
}
}
@@ -5542,7 +5542,7 @@
mH.sendEmptyMessageDelayed(H.WINDOW_FREEZE_TIMEOUT, WINDOW_FREEZE_TIMEOUT_DURATION);
mWaitingForConfig = true;
final DisplayContent displayContent = getDefaultDisplayContentLocked();
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
final int[] anim = new int[2];
if (displayContent.isDimming()) {
anim[0] = anim[1] = 0;
@@ -7908,7 +7908,7 @@
return;
}
configureDisplayPolicyLocked(displayContent);
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
boolean configChanged = updateOrientationFromAppTokensLocked(false);
mTempConfiguration.setTo(mGlobalConfiguration);
@@ -8259,7 +8259,7 @@
mode != UPDATE_FOCUS_WILL_ASSIGN_LAYERS
&& mode != UPDATE_FOCUS_WILL_PLACE_SURFACES);
if (imWindowChanged) {
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
newFocus = mRoot.computeFocusedWindow();
}
@@ -8286,7 +8286,7 @@
if ((focusChanged & WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT) != 0) {
// The change in focus caused us to need to do a layout. Okay.
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
if (mode == UPDATE_FOCUS_PLACING_SURFACES) {
mWindowPlacerLocked.performLayoutLockedInner(displayContent, true /*initial*/,
updateInputWindows);
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index c3affeb..cb3f2d0 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1493,7 +1493,7 @@
}
changed = true;
if (displayContent != null) {
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
}
@@ -2039,7 +2039,7 @@
void setDisplayLayoutNeeded() {
if (mDisplayContent != null) {
- mDisplayContent.layoutNeeded = true;
+ mDisplayContent.setLayoutNeeded();
}
}
@@ -3528,7 +3528,7 @@
void requestUpdateWallpaperIfNeeded() {
if (mDisplayContent != null && (mAttrs.flags & FLAG_SHOW_WALLPAPER) != 0) {
mDisplayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
- mDisplayContent.layoutNeeded = true;
+ mDisplayContent.setLayoutNeeded();
mService.mWindowPlacerLocked.requestTraversal();
}
@@ -3646,7 +3646,7 @@
// want to make sure to do a layout. If called from within the transaction
// loop, this will cause it to restart with a new layout.
if (displayContent != null) {
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
}
}
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index cbb5040..6c7d136 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -482,7 +482,7 @@
// Upon completion of a not-visible to visible status bar animation a relayout is
// required.
if (displayContent != null) {
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
}
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index 6d10c5a..7acccea 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -168,7 +168,7 @@
mInLayout = false;
- if (mService.mRoot.layoutNeeded()) {
+ if (mService.mRoot.isLayoutNeeded()) {
if (++mLayoutRepeatCount < 6) {
requestTraversal();
} else {
@@ -204,10 +204,10 @@
final void performLayoutLockedInner(final DisplayContent displayContent,
boolean initial, boolean updateInputWindows) {
- if (!displayContent.layoutNeeded) {
+ if (!displayContent.isLayoutNeeded()) {
return;
}
- displayContent.layoutNeeded = false;
+ displayContent.clearLayoutNeeded();
WindowList windows = displayContent.getWindowList();
boolean isDefaultDisplay = displayContent.isDefaultDisplay;
@@ -228,8 +228,8 @@
if (DEBUG_LAYOUT) {
Slog.v(TAG, "-------------------------------------");
- Slog.v(TAG, "performLayout: needed="
- + displayContent.layoutNeeded + " dw=" + dw + " dh=" + dh);
+ Slog.v(TAG, "performLayout: needed=" + displayContent.isLayoutNeeded()
+ + " dw=" + dw + " dh=" + dh);
}
mService.mPolicy.beginLayoutLw(isDefaultDisplay, dw, dh, mService.mRotation,
@@ -427,7 +427,7 @@
if ((displayContent.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0 &&
mWallpaperControllerLocked.adjustWallpaperWindows()) {
mService.mLayersController.assignLayersLocked(windows);
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
final WindowState lowerWallpaperTarget =
@@ -532,7 +532,7 @@
// This has changed the visibility of windows, so perform
// a new layout to get them all up-to-date.
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
// TODO(multidisplay): IMEs are only supported on the default display.
if (windows == mService.getDefaultWindowListLocked()
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 7ed8e78..177652c 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -16,7 +16,6 @@
package com.android.server.wm;
-import android.annotation.CallSuper;
import android.os.Bundle;
import android.os.Debug;
import android.os.IBinder;
@@ -258,7 +257,7 @@
if (hidden == visible) {
hidden = !visible;
// Need to do a layout to ensure the wallpaper now has the correct size.
- displayContent.layoutNeeded = true;
+ displayContent.setLayoutNeeded();
}
final WallpaperController wallpaperController = mService.mWallpaperControllerLocked;
@@ -281,7 +280,7 @@
"Wallpaper token " + token + " hidden=" + !visible);
hidden = !visible;
// Need to do a layout to ensure the wallpaper now has the correct size.
- mService.getDefaultDisplayContentLocked().layoutNeeded = true;
+ mService.getDefaultDisplayContentLocked().setLayoutNeeded();
}
final WallpaperController wallpaperController = mService.mWallpaperControllerLocked;