From c2726643e74873c544efc2769a5ab2a445c433c4 Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Tue, 2 Oct 2012 16:17:31 -0700 Subject: [PATCH 1/2] Add some missing debug output. Bug: 7257579 Change-Id: Ia8c6d7fefe6d4c4e6c37f20722c7ffce4bcfcbae --- services/java/com/android/server/display/LogicalDisplay.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/java/com/android/server/display/LogicalDisplay.java b/services/java/com/android/server/display/LogicalDisplay.java index f4cb84da9eb48..c4b749c3e90be 100644 --- a/services/java/com/android/server/display/LogicalDisplay.java +++ b/services/java/com/android/server/display/LogicalDisplay.java @@ -299,7 +299,9 @@ final class LogicalDisplay { } public void dumpLocked(PrintWriter pw) { + pw.println("mDisplayId=" + mDisplayId); pw.println("mLayerStack=" + mLayerStack); + pw.println("mHasContent=" + mHasContent); pw.println("mPrimaryDisplayDevice=" + (mPrimaryDisplayDevice != null ? mPrimaryDisplayDevice.getNameLocked() : "null")); pw.println("mBaseDisplayInfo=" + mBaseDisplayInfo); From cb882f90e4305bd40d7219707bc1796319e9c80e Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Tue, 2 Oct 2012 16:35:35 -0700 Subject: [PATCH 2/2] Fix bug removing all windows that belong to a display. Removing one window causes its subwindows to also be removed. We have to be careful when traversing the window list because multiple windows may be removed at a time so we don't get IndexOutOfBoundsException due to the window list changing in unexpected ways. Bug: 7273702 Change-Id: I0ed9ba00c325ad178ab28919ce2e763cb6fd38ba --- services/java/com/android/server/wm/WindowManagerService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index ae805c38c7e55..8fb1459cd7c97 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -10870,8 +10870,8 @@ public class WindowManagerService extends IWindowManager.Stub final DisplayContent displayContent = getDisplayContentLocked(displayId); mDisplayContents.delete(displayId); WindowList windows = displayContent.getWindowList(); - for (int i = windows.size() - 1; i >= 0; --i) { - final WindowState win = windows.get(i); + while (!windows.isEmpty()) { + final WindowState win = windows.get(windows.size() - 1); removeWindowLocked(win.mSession, win); } mAnimator.removeDisplayLocked(displayId);