Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6998bc4f authored by Winson Chung's avatar Winson Chung
Browse files

Adding flags to filter dumping of activities.

- To make it consistent with other dump calls, by default dumping
  'activity all' or 'activity <activity>' will now dump it if it exists
  even if it is not in a visible stack.  If -v is specified, only
  activities in visible stacks will be dumped, and if -f is specified
  then only activities in the focused stack will be dumped.

Bug: 35850518
Test: adb shell dumpsys activity <package> and ensure it runs in the background
Change-Id: Ib8284aedce8073e2a30023a7cd925c6c525817c8
parent a1200911
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+7 −5
Original line number Diff line number Diff line
@@ -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);
        }
    }