From 4f088b6c3083a0b11c13e665cad22c99ac6ba8f7 Mon Sep 17 00:00:00 2001 From: Riddle Hsu Date: Fri, 5 Jun 2020 00:44:26 +0800 Subject: [PATCH] Call WindowContainer#dump in all levels In order to know if there is an animating window container. And all derived classes should call super because the dump method is annotated as CallSuper. This fixes that TaskDisplayArea and ActivityStack don't call super and the overridden Task#dump is never called. Also adjust the output format so it is easier to read. Bug: 157743122 Test: "adb shell dumpsys activity activities" and check the section "Task display areas in top down Z order". Change-Id: I8396e1fbce1960dc9dcd9de8c5cd47bfd18ba31a --- .../com/android/server/wm/ActivityRecord.java | 2 +- .../com/android/server/wm/ActivityStack.java | 16 ++++++------- .../server/wm/ActivityStackSupervisor.java | 2 +- .../com/android/server/wm/DisplayContent.java | 6 ++--- .../server/wm/RootWindowContainer.java | 6 +++-- .../android/server/wm/SurfaceAnimator.java | 11 +++------ .../core/java/com/android/server/wm/Task.java | 23 ++++++++----------- .../android/server/wm/TaskDisplayArea.java | 8 +++++-- 8 files changed, 35 insertions(+), 39 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index fe2b144bcdd6b..f643fffc68c47 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -7539,7 +7539,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A public String toString() { if (stringName != null) { return stringName + " t" + (task == null ? INVALID_TASK_ID : task.mTaskId) + - (finishing ? " f}" : "") + (mIsExiting ? " mIsExiting=" : "") + "}"; + (finishing ? " f}" : "") + (mIsExiting ? " isExiting" : "") + "}"; } StringBuilder sb = new StringBuilder(128); sb.append("ActivityRecord{"); diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 0d5621dc0e4f8..2146f77e210df 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -3230,22 +3230,22 @@ class ActivityStack extends Task { @Override void dump(PrintWriter pw, String prefix, boolean dumpAll) { - pw.println(prefix + "mStackId=" + getRootTaskId()); - pw.println(prefix + "mDeferRemoval=" + mDeferRemoval); - pw.println(prefix + "mBounds=" + getRawBounds().toShortString()); - for (int taskNdx = mChildren.size() - 1; taskNdx >= 0; taskNdx--) { - mChildren.get(taskNdx).dump(pw, prefix + " ", dumpAll); + if (mDeferRemoval) { + pw.println(prefix + "mDeferRemoval=true"); } + super.dump(pw, prefix, dumpAll); if (!mExitingActivities.isEmpty()) { pw.println(); - pw.println(" Exiting application tokens:"); + pw.println(prefix + "Exiting application tokens:"); + final String doublePrefix = prefix + " "; for (int i = mExitingActivities.size() - 1; i >= 0; i--) { WindowToken token = mExitingActivities.get(i); - pw.print(" Exiting App #"); pw.print(i); + pw.print(doublePrefix + "Exiting App #" + i); pw.print(' '); pw.print(token); pw.println(':'); - token.dump(pw, " ", dumpAll); + token.dump(pw, doublePrefix, dumpAll); } + pw.println(); } mAnimatingActivityRegistry.dump(pw, "AnimatingApps:", prefix); } diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index b7ca1a9aeab87..1f9e8609c2ade 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -1886,7 +1886,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { public void dump(PrintWriter pw, String prefix) { pw.println(); pw.println("ActivityStackSupervisor state:"); - mRootWindowContainer.dump(pw, prefix); + mRootWindowContainer.dump(pw, prefix, true /* dumpAll */); getKeyguardController().dump(pw, prefix); mService.getLockTaskController().dump(pw, prefix); pw.print(prefix); diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index a5b94b3276995..05594c8596d64 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -2977,12 +2977,10 @@ class DisplayContent extends WindowContainer"); } pw.println(); diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index ae5adcae5b9bf..583663c5455f5 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -3570,12 +3570,14 @@ class RootWindowContainer extends WindowContainer } } - public void dump(PrintWriter pw, String prefix) { + @Override + public void dump(PrintWriter pw, String prefix, boolean dumpAll) { + super.dump(pw, prefix, dumpAll); pw.print(prefix); pw.println("topDisplayFocusedStack=" + getTopDisplayFocusedStack()); for (int i = getChildCount() - 1; i >= 0; --i) { final DisplayContent display = getChildAt(i); - display.dump(pw, prefix, true /* dumpAll */); + display.dump(pw, prefix, dumpAll); } pw.println(); } diff --git a/services/core/java/com/android/server/wm/SurfaceAnimator.java b/services/core/java/com/android/server/wm/SurfaceAnimator.java index 1b77fd2e87820..0e5d7d910084d 100644 --- a/services/core/java/com/android/server/wm/SurfaceAnimator.java +++ b/services/core/java/com/android/server/wm/SurfaceAnimator.java @@ -428,16 +428,11 @@ class SurfaceAnimator { void dump(PrintWriter pw, String prefix) { pw.print(prefix); pw.print("mLeash="); pw.print(mLeash); - if (mAnimationStartDelayed) { - pw.print(" mAnimationStartDelayed="); pw.println(mAnimationStartDelayed); - } else { - pw.println(); - } - pw.print(prefix); pw.println("Animation:"); + pw.print(" mAnimationType=" + mAnimationType); + pw.println(mAnimationStartDelayed ? " mAnimationStartDelayed=true" : ""); + pw.print(prefix); pw.print("Animation: "); pw.println(mAnimation); if (mAnimation != null) { mAnimation.dump(pw, prefix + " "); - } else { - pw.print(prefix); pw.println("null"); } } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 48609e17ba403..3ee7ee7a42760 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3519,20 +3519,17 @@ class Task extends WindowContainer { @Override void dump(PrintWriter pw, String prefix, boolean dumpAll) { super.dump(pw, prefix, dumpAll); + pw.println(prefix + "bounds=" + getBounds().toShortString()); final String doublePrefix = prefix + " "; - - pw.println(prefix + "taskId=" + mTaskId); - pw.println(doublePrefix + "mBounds=" + getBounds().toShortString()); - pw.println(doublePrefix + "appTokens=" + mChildren); - - final String triplePrefix = doublePrefix + " "; - final String quadruplePrefix = triplePrefix + " "; - - int[] index = { 0 }; - forAllActivities((r) -> { - pw.println(triplePrefix + "Activity #" + index[0]++ + " " + r); - r.dump(pw, quadruplePrefix, dumpAll); - }); + for (int i = mChildren.size() - 1; i >= 0; i--) { + final WindowContainer child = mChildren.get(i); + pw.println(prefix + "* " + child); + // Only dump non-activity because full activity info is already printed by + // RootWindowContainer#dumpActivities. + if (child.asActivityRecord() == null) { + child.dump(pw, doublePrefix, dumpAll); + } + } } /** diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index 22054db20bbde..102c2a6364f4e 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -1772,16 +1772,20 @@ final class TaskDisplayArea extends DisplayArea { @Override void dump(PrintWriter pw, String prefix, boolean dumpAll) { pw.println(prefix + "TaskDisplayArea " + getName()); + super.dump(pw, prefix, dumpAll); if (mPreferredTopFocusableStack != null) { pw.println(prefix + " mPreferredTopFocusableStack=" + mPreferredTopFocusableStack); } if (mLastFocusedStack != null) { pw.println(prefix + " mLastFocusedStack=" + mLastFocusedStack); } - pw.println(prefix + " Application tokens in top down Z order:"); + final String doublePrefix = prefix + " "; + final String triplePrefix = doublePrefix + " "; + pw.println(doublePrefix + "Application tokens in top down Z order:"); for (int stackNdx = getChildCount() - 1; stackNdx >= 0; --stackNdx) { final ActivityStack stack = getChildAt(stackNdx); - stack.dump(pw, prefix + " ", dumpAll); + pw.println(doublePrefix + "* " + stack); + stack.dump(pw, triplePrefix, dumpAll); } } }