Allow dumping activity from all visible stacks.
Change-Id: I89ef198b8d629fb0f57c2866ce581942701910e6
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 66a8900..68654c7 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -13971,6 +13971,7 @@
boolean dumpClient = false;
boolean dumpCheckin = false;
boolean dumpCheckinFormat = false;
+ boolean dumpVisibleStacks = false;
String dumpPackage = null;
int opti = 0;
@@ -13984,6 +13985,8 @@
dumpAll = true;
} else if ("-c".equals(opt)) {
dumpClient = true;
+ } else if ("-v".equals(opt)) {
+ dumpVisibleStacks = true;
} else if ("-p".equals(opt)) {
if (opti < args.length) {
dumpPackage = args[opti];
@@ -14170,7 +14173,7 @@
LockGuard.dump(fd, pw, args);
} else {
// Dumping a single activity?
- if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll)) {
+ if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll, dumpVisibleStacks)) {
ActivityManagerShellCommand shell = new ActivityManagerShellCommand(this, true);
int res = shell.exec(this, null, fd, null, args, new ResultReceiver(null));
if (res < 0) {
@@ -15038,11 +15041,11 @@
* - A hex number of the ActivityRecord object instance.
*/
protected boolean dumpActivity(FileDescriptor fd, PrintWriter pw, String name, String[] args,
- int opti, boolean dumpAll) {
+ int opti, boolean dumpAll, boolean dumpVisibleStacks) {
ArrayList<ActivityRecord> activities;
synchronized (this) {
- activities = mStackSupervisor.getDumpActivitiesLocked(name);
+ activities = mStackSupervisor.getDumpActivitiesLocked(name, dumpVisibleStacks);
}
if (activities.size() <= 0) {
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 82668e4..fc56b5c 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -3152,8 +3152,27 @@
pw.println(" mLockTaskModeTasks" + mLockTaskModeTasks);
}
- ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) {
- return mFocusedStack.getDumpActivitiesLocked(name);
+ /**
+ * Dumps the activities matching the given {@param name} in the either the focused stack
+ * or all visible stacks if {@param dumpVisibleStacks} is true.
+ */
+ ArrayList<ActivityRecord> getDumpActivitiesLocked(String name, boolean dumpVisibleStacks) {
+ if (dumpVisibleStacks) {
+ ArrayList<ActivityRecord> activities = new ArrayList<>();
+ int numDisplays = mActivityDisplays.size();
+ for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
+ ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
+ for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
+ ActivityStack stack = stacks.get(stackNdx);
+ if (stack.getStackVisibilityLocked(null) == STACK_VISIBLE) {
+ activities.addAll(stack.getDumpActivitiesLocked(name));
+ }
+ }
+ }
+ return activities;
+ } else {
+ return mFocusedStack.getDumpActivitiesLocked(name);
+ }
}
static boolean printThisActivity(PrintWriter pw, ActivityRecord activity, String dumpPackage,