diff options
3 files changed, 21 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index d9b6fd73905e..da04380e0479 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -14394,7 +14394,8 @@ public class ActivityManagerService extends IActivityManager.Stub boolean dumpClient = false; boolean dumpCheckin = false; boolean dumpCheckinFormat = false; - boolean dumpVisibleStacks = false; + boolean dumpVisibleStacksOnly = false; + boolean dumpFocusedStackOnly = false; String dumpPackage = null; int opti = 0; @@ -14409,7 +14410,9 @@ public class ActivityManagerService extends IActivityManager.Stub } else if ("-c".equals(opt)) { dumpClient = true; } else if ("-v".equals(opt)) { - dumpVisibleStacks = true; + dumpVisibleStacksOnly = true; + } else if ("-f".equals(opt)) { + dumpFocusedStackOnly = true; } else if ("-p".equals(opt)) { if (opti < args.length) { dumpPackage = args[opti]; @@ -14600,7 +14603,8 @@ public class ActivityManagerService extends IActivityManager.Stub LockGuard.dump(fd, pw, args); } else { // Dumping a single activity? - if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll, dumpVisibleStacks)) { + if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll, dumpVisibleStacksOnly, + dumpFocusedStackOnly)) { ActivityManagerShellCommand shell = new ActivityManagerShellCommand(this, true); int res = shell.exec(this, null, fd, null, args, null, new ResultReceiver(null)); @@ -15539,13 +15543,17 @@ public class ActivityManagerService extends IActivityManager.Stub * - the cmd arg isn't the flattened component name of an existing activity: * dump all activity whose component contains the cmd as a substring * - A hex number of the ActivityRecord object instance. + * + * @param dumpVisibleStacksOnly dump activity with {@param name} only if in a visible stack + * @param dumpFocusedStackOnly dump activity with {@param name} only if in the focused stack */ protected boolean dumpActivity(FileDescriptor fd, PrintWriter pw, String name, String[] args, - int opti, boolean dumpAll, boolean dumpVisibleStacks) { + int opti, boolean dumpAll, boolean dumpVisibleStacksOnly, boolean dumpFocusedStackOnly) { ArrayList<ActivityRecord> activities; synchronized (this) { - activities = mStackSupervisor.getDumpActivitiesLocked(name, dumpVisibleStacks); + activities = mStackSupervisor.getDumpActivitiesLocked(name, dumpVisibleStacksOnly, + dumpFocusedStackOnly); } if (activities.size() <= 0) { diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 7f7caff5dfb9..09ac9b889cfe 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -4819,7 +4819,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai } ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { - ArrayList<ActivityRecord> activities = new ArrayList<ActivityRecord>(); + ArrayList<ActivityRecord> activities = new ArrayList<>(); if ("all".equals(name)) { for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) { diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index ab1559d8afb4..d3ad0572d556 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -3521,22 +3521,24 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D * 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> getDumpActivitiesLocked(String name, boolean dumpVisibleStacksOnly, + boolean dumpFocusedStackOnly) { + if (dumpFocusedStackOnly) { + return mFocusedStack.getDumpActivitiesLocked(name); + } else { 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) { + if (!dumpVisibleStacksOnly || + stack.getStackVisibilityLocked(null) == STACK_VISIBLE) { activities.addAll(stack.getDumpActivitiesLocked(name)); } } } return activities; - } else { - return mFocusedStack.getDumpActivitiesLocked(name); } } |