diff options
author | Craig Mautner <cmautner@google.com> | 2015-01-13 21:27:20 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-01-13 21:27:23 +0000 |
commit | 31ae17309e8c79c4b1a7b63a9c4bb43ae0849de2 (patch) | |
tree | 250cba1786b2381b8015e00f4144e3c2f665945d | |
parent | a27523e3e0fd6c6cab18255151f2f9ec9a72f3d6 (diff) | |
parent | bcb6eb9e26c923333b25074d39722a5dfa8c0320 (diff) | |
download | frameworks_base-31ae17309e8c79c4b1a7b63a9c4bb43ae0849de2.zip frameworks_base-31ae17309e8c79c4b1a7b63a9c4bb43ae0849de2.tar.gz frameworks_base-31ae17309e8c79c4b1a7b63a9c4bb43ae0849de2.tar.bz2 |
Merge "Add debug for ANR" into lmp-mr1-dev
-rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 14 | ||||
-rw-r--r-- | services/core/java/com/android/server/wm/WindowManagerService.java | 25 |
2 files changed, 29 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index b0feca8..f57adaf 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -379,14 +379,18 @@ class DisplayContent { pw.println(" Application tokens in top down Z order:"); int ndx = 0; for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) { - ArrayList<Task> tasks = mStacks.get(stackNdx).getTasks(); + final TaskStack stack = mStacks.get(stackNdx); + pw.print(" mStackId="); pw.println(stack.mStackId); + ArrayList<Task> tasks = stack.getTasks(); for (int taskNdx = tasks.size() - 1; taskNdx >= 0; --taskNdx) { - AppTokenList tokens = tasks.get(taskNdx).mAppTokens; - for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx) { + final Task task = tasks.get(taskNdx); + pw.print(" mTaskId="); pw.println(task.taskId); + AppTokenList tokens = task.mAppTokens; + for (int tokenNdx = tokens.size() - 1; tokenNdx >= 0; --tokenNdx, ++ndx) { final AppWindowToken wtoken = tokens.get(tokenNdx); - pw.print(" App #"); pw.print(ndx++); + pw.print(" Activity #"); pw.print(tokenNdx); pw.print(' '); pw.print(wtoken); pw.println(":"); - wtoken.dump(pw, " "); + wtoken.dump(pw, " "); } } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 4d0169d..ac17691 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -262,6 +262,8 @@ public class WindowManagerService extends IWindowManager.Stub /** Amount of time (in milliseconds) to delay before declaring a window freeze timeout. */ static final int WINDOW_FREEZE_TIMEOUT_DURATION = 2000; + /** Amount of time to allow a last ANR message to exist before freeing the memory. */ + static final int LAST_ANR_LIFETIME_DURATION_MSECS = 2 * 60 * 60 * 1000; // Two hours /** * If true, the window manager will do its own custom freezing and general * management of the screen during rotation. @@ -940,7 +942,7 @@ public class WindowManagerService extends IWindowManager.Stub private void placeWindowAfter(WindowState pos, WindowState window) { final WindowList windows = pos.getWindowList(); final int i = windows.indexOf(pos); - if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v( + if (true || DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v( TAG, "Adding window " + window + " at " + (i+1) + " of " + windows.size() + " (after " + pos + ")"); windows.add(i+1, window); @@ -950,7 +952,7 @@ public class WindowManagerService extends IWindowManager.Stub private void placeWindowBefore(WindowState pos, WindowState window) { final WindowList windows = pos.getWindowList(); int i = windows.indexOf(pos); - if (DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v( + if (true || DEBUG_FOCUS || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v( TAG, "Adding window " + window + " at " + i + " of " + windows.size() + " (before " + pos + ")"); if (i < 0) { @@ -1048,7 +1050,7 @@ public class WindowManagerService extends IWindowManager.Stub //apptoken note that the window could be a floating window //that was created later or a window at the top of the list of //windows associated with this token. - if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, + if (true || DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "not Base app: Adding window " + win + " at " + (newIdx + 1) + " of " + N); windows.add(newIdx + 1, win); @@ -1170,7 +1172,7 @@ public class WindowManagerService extends IWindowManager.Stub break; } } - if (DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, + if (true || DEBUG_FOCUS_LIGHT || DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "Based on layer: Adding window " + win + " at " + i + " of " + N); windows.add(i, win); mWindowsChanged = true; @@ -3657,7 +3659,7 @@ public class WindowManagerService extends IWindowManager.Stub atoken.layoutConfigChanges = (configChanges & (ActivityInfo.CONFIG_SCREEN_SIZE | ActivityInfo.CONFIG_ORIENTATION)) != 0; atoken.mLaunchTaskBehind = launchTaskBehind; - if (DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken + if (true || DEBUG_TOKEN_MOVEMENT || DEBUG_ADD_REMOVE) Slog.v(TAG, "addAppToken: " + atoken + " to stack=" + stackId + " task=" + taskId + " at " + addPos); Task task = mTaskIdToTask.get(taskId); @@ -7608,6 +7610,7 @@ public class WindowManagerService extends IWindowManager.Stub public static final int SHOW_EMULATOR_DISPLAY_OVERLAY = 36; public static final int CHECK_IF_BOOT_ANIMATION_FINISHED = 37; + public static final int RESET_ANR_MESSAGE = 38; @Override public void handleMessage(Message msg) { @@ -8118,6 +8121,12 @@ public class WindowManagerService extends IWindowManager.Stub } } break; + case RESET_ANR_MESSAGE: { + synchronized (mWindowMap) { + mLastANRState = null; + } + } + break; } if (DEBUG_WINDOW_TRACE) { Slog.v(TAG, "handleMessage: exit"); @@ -11299,8 +11308,14 @@ public class WindowManagerService extends IWindowManager.Stub } pw.println(); dumpWindowsNoHeaderLocked(pw, true, null); + pw.println(); + pw.println("Last ANR continued"); + dumpDisplayContentsLocked(pw, true); pw.close(); mLastANRState = sw.toString(); + + mH.removeMessages(H.RESET_ANR_MESSAGE); + mH.sendEmptyMessageDelayed(H.RESET_ANR_MESSAGE, LAST_ANR_LIFETIME_DURATION_MSECS); } @Override |