diff options
| author | 2020-05-01 15:49:51 +0000 | |
|---|---|---|
| committer | 2020-05-01 15:49:51 +0000 | |
| commit | f55fbde1bdc456db44e8f17817f353814f412ca0 (patch) | |
| tree | 769dd70c54c52f3b6aa788f3f18eb2c97703aa5e | |
| parent | 9975ac4156dc579f291dc721e570a3be1ab15fa9 (diff) | |
| parent | 9106f2a73da956c75d36016ea20841065817d222 (diff) | |
Merge "Fix #155437855: "dumpsys activity" package filtering doesn't filter everything" into rvc-dev
11 files changed, 277 insertions, 130 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index d1b6efd3e23a..49cc621cf2b2 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -1719,31 +1719,50 @@ public class ActivityManager { configuration.windowConfiguration.getActivityType()); pw.println(); pw.print(" "); - pw.print(" id=" + persistentId); - pw.print(" stackId=" + stackId); - pw.print(" userId=" + userId); - pw.print(" hasTask=" + (id != -1)); - pw.print(" lastActiveTime=" + lastActiveTime); - pw.println(); pw.print(" "); - pw.print(" baseIntent=" + baseIntent); - pw.println(); pw.print(" "); - pw.print(" isExcluded=" - + ((baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0)); - pw.print(" activityType=" + activityType); - pw.print(" windowingMode=" + windowingMode); - pw.print(" supportsSplitScreenMultiWindow=" + supportsSplitScreenMultiWindow); + pw.print(" id="); pw.print(persistentId); + pw.print(" stackId="); pw.print(stackId); + pw.print(" userId="); pw.print(userId); + pw.print(" hasTask="); pw.print((id != -1)); + pw.print(" lastActiveTime="); pw.println(lastActiveTime); + pw.print(" "); pw.print(" baseIntent="); pw.println(baseIntent); + if (baseActivity != null) { + pw.print(" "); pw.print(" baseActivity="); + pw.println(baseActivity.toShortString()); + } + if (topActivity != null) { + pw.print(" "); pw.print(" topActivity="); pw.println(topActivity.toShortString()); + } + if (origActivity != null) { + pw.print(" "); pw.print(" origActivity="); + pw.println(origActivity.toShortString()); + } + if (realActivity != null) { + pw.print(" "); pw.print(" realActivity="); + pw.println(realActivity.toShortString()); + } + pw.print(" "); + pw.print(" isExcluded="); + pw.print(((baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0)); + pw.print(" activityType="); pw.print(activityType); + pw.print(" windowingMode="); pw.print(windowingMode); + pw.print(" supportsSplitScreenMultiWindow="); + pw.println(supportsSplitScreenMultiWindow); if (taskDescription != null) { - pw.println(); pw.print(" "); + pw.print(" "); final ActivityManager.TaskDescription td = taskDescription; pw.print(" taskDescription {"); - pw.print(" colorBackground=#" + Integer.toHexString(td.getBackgroundColor())); - pw.print(" colorPrimary=#" + Integer.toHexString(td.getPrimaryColor())); - pw.print(" iconRes=" + td.getIconResourcePackage() + "/" + td.getIconResource()); - pw.print(" iconBitmap=" + (td.getIconFilename() != null - || td.getInMemoryIcon() != null)); - pw.print(" resizeMode=" + ActivityInfo.resizeModeToString(td.getResizeMode())); - pw.print(" minWidth=" + td.getMinWidth()); - pw.print(" minHeight=" + td.getMinHeight()); + pw.print(" colorBackground=#"); + pw.print(Integer.toHexString(td.getBackgroundColor())); + pw.print(" colorPrimary=#"); + pw.print(Integer.toHexString(td.getPrimaryColor())); + pw.print(" iconRes="); + pw.print(td.getIconResourcePackage() + "/" + td.getIconResource()); + pw.print(" iconBitmap="); + pw.print(td.getIconFilename() != null || td.getInMemoryIcon() != null); + pw.print(" resizeMode="); + pw.print(ActivityInfo.resizeModeToString(td.getResizeMode())); + pw.print(" minWidth="); pw.print(td.getMinWidth()); + pw.print(" minHeight="); pw.print(td.getMinHeight()); pw.println(" }"); } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 0bd134c8dfac..8d3515202126 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -10535,12 +10535,14 @@ public class ActivityManagerService extends IActivityManager.Stub } mAtmInternal.dump( DUMP_STARTER_CMD, fd, pw, args, opti, dumpAll, dumpClient, dumpPackage); - pw.println(); - if (dumpAll) { - pw.println("-------------------------------------------------------------------------------"); + if (dumpPackage == null) { + pw.println(); + if (dumpAll) { + pw.println("-------------------------------------------------------------------------------"); + } + mAtmInternal.dump( + DUMP_CONTAINERS_CMD, fd, pw, args, opti, dumpAll, dumpClient, dumpPackage); } - mAtmInternal.dump( - DUMP_CONTAINERS_CMD, fd, pw, args, opti, dumpAll, dumpClient, dumpPackage); // Activities section is dumped as part of the Critical priority dump. Exclude the // section if priority is Normal. if (!dumpNormalPriority) { @@ -10558,6 +10560,11 @@ public class ActivityManagerService extends IActivityManager.Stub } dumpAssociationsLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage); } + pw.println(); + if (dumpAll) { + pw.println("-------------------------------------------------------------------------------"); + } + mProcessList.mAppExitInfoTracker.dumpHistoryProcessExitInfo(pw, dumpPackage); if (dumpPackage == null) { pw.println(); if (dumpAll) { @@ -10574,17 +10581,6 @@ public class ActivityManagerService extends IActivityManager.Stub if (dumpAll) { pw.println("-------------------------------------------------------------------------------"); } - dumpLruLocked(pw, dumpPackage); - pw.println(); - if (dumpAll) { - pw.println("-------------------------------------------------------------------------------"); - } - mProcessList.mAppExitInfoTracker.dumpHistoryProcessExitInfo(pw, dumpPackage); - pw.println(); - if (dumpAll) { - pw.println("-------------------------------------------------------------------" - + "------------"); - } dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage, dumpAppId); pw.println(); if (dumpAll) { @@ -10788,7 +10784,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } else if ("oom".equals(cmd) || "o".equals(cmd)) { synchronized (this) { - dumpOomLocked(fd, pw, args, opti, true); + dumpOomLocked(fd, pw, false, args, opti, true, dumpPackage, true); } } else if ("lmk".equals(cmd)) { synchronized (this) { @@ -10796,11 +10792,11 @@ public class ActivityManagerService extends IActivityManager.Stub } } else if ("lru".equals(cmd)) { synchronized (this) { - dumpLruLocked(pw, null); + dumpLruLocked(pw, dumpPackage, null); } } else if ("permissions".equals(cmd) || "perm".equals(cmd)) { synchronized (this) { - dumpPermissionsLocked(fd, pw, args, opti, true, null); + dumpPermissionsLocked(fd, pw, args, opti, true, dumpPackage); } } else if ("provider".equals(cmd)) { String[] newArgs; @@ -10820,7 +10816,7 @@ public class ActivityManagerService extends IActivityManager.Stub } } else if ("providers".equals(cmd) || "prov".equals(cmd)) { synchronized (this) { - dumpProvidersLocked(fd, pw, args, opti, true, null); + dumpProvidersLocked(fd, pw, args, opti, true, dumpPackage); } } else if ("service".equals(cmd)) { String[] newArgs; @@ -11106,8 +11102,9 @@ public class ActivityManagerService extends IActivityManager.Stub " Counts of Binder Proxies held by SYSTEM"); } - void dumpLruEntryLocked(PrintWriter pw, int index, ProcessRecord proc) { - pw.print(" #"); + void dumpLruEntryLocked(PrintWriter pw, int index, ProcessRecord proc, String prefix) { + pw.print(prefix); + pw.print("#"); pw.print(index); pw.print(": "); pw.print(ProcessList.makeOomAdjString(proc.setAdj, false)); @@ -11149,9 +11146,29 @@ public class ActivityManagerService extends IActivityManager.Stub } // TODO: Move to ProcessList? - void dumpLruLocked(PrintWriter pw, String dumpPackage) { - pw.println("ACTIVITY MANAGER LRU PROCESSES (dumpsys activity lru)"); + boolean dumpLruLocked(PrintWriter pw, String dumpPackage, String prefix) { final int N = mProcessList.mLruProcesses.size(); + final String innerPrefix; + if (prefix == null) { + pw.println("ACTIVITY MANAGER LRU PROCESSES (dumpsys activity lru)"); + innerPrefix = " "; + } else { + boolean haveAny = false; + for (int i = N - 1; i >= 0; i--) { + final ProcessRecord r = mProcessList.mLruProcesses.get(i); + if (dumpPackage != null && !r.pkgList.containsKey(dumpPackage)) { + continue; + } + haveAny = true; + break; + } + if (!haveAny) { + return false; + } + pw.print(prefix); + pw.println("Raw LRU list (dumpsys activity lru):"); + innerPrefix = prefix + " "; + } int i; boolean first = true; for (i = N - 1; i >= mProcessList.mLruProcessActivityStart; i--) { @@ -11160,10 +11177,11 @@ public class ActivityManagerService extends IActivityManager.Stub continue; } if (first) { - pw.println(" Activities:"); + pw.print(innerPrefix); + pw.println("Activities:"); first = false; } - dumpLruEntryLocked(pw, i, r); + dumpLruEntryLocked(pw, i, r, innerPrefix); } first = true; for (; i >= mProcessList.mLruProcessServiceStart; i--) { @@ -11172,10 +11190,11 @@ public class ActivityManagerService extends IActivityManager.Stub continue; } if (first) { - pw.println(" Services:"); + pw.print(innerPrefix); + pw.println("Services:"); first = false; } - dumpLruEntryLocked(pw, i, r); + dumpLruEntryLocked(pw, i, r, innerPrefix); } first = true; for (; i >= 0; i--) { @@ -11184,11 +11203,13 @@ public class ActivityManagerService extends IActivityManager.Stub continue; } if (first) { - pw.println(" Other:"); + pw.print(innerPrefix); + pw.println("Other:"); first = false; } - dumpLruEntryLocked(pw, i, r); + dumpLruEntryLocked(pw, i, r, innerPrefix); } + return true; } // TODO: Move to ProcessList? @@ -11200,7 +11221,7 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println("ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)"); - if (dumpAll) { + if (dumpAll || dumpPackage != null) { final int NP = mProcessList.mProcessNames.getMap().size(); for (int ip=0; ip<NP; ip++) { SparseArray<ProcessRecord> procs = mProcessList.mProcessNames.getMap().valueAt(ip); @@ -11267,6 +11288,12 @@ public class ActivityManagerService extends IActivityManager.Stub } } + if (dumpOomLocked(fd, pw, needSep, args, opti, dumpAll, dumpPackage, false)) { + needSep = true; + } + + needSep = dumpProcessesToGc(pw, needSep, dumpPackage); + if (mProcessList.mActiveUids.size() > 0) { if (dumpUids(pw, dumpPackage, dumpAppId, mProcessList.mActiveUids, "UID states:", needSep)) { @@ -11283,6 +11310,13 @@ public class ActivityManagerService extends IActivityManager.Stub } } + if (needSep) { + pw.println(); + } + if (dumpLruLocked(pw, dumpPackage, " ")) { + needSep = true; + } + if (mProcessList.getLruSizeLocked() > 0) { if (needSep) { pw.println(); @@ -11387,8 +11421,6 @@ public class ActivityManagerService extends IActivityManager.Stub "OnHold Norm", "OnHold PERS", dumpPackage); } - needSep = dumpProcessesToGc(pw, needSep, dumpPackage); - needSep = mAppErrors.dumpLocked(fd, pw, needSep, dumpPackage); needSep = mAtmInternal.dumpForProcesses(fd, pw, dumpAll, dumpPackage, dumpAppId, needSep, @@ -11931,10 +11963,8 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(")"); } - boolean dumpOomLocked(FileDescriptor fd, PrintWriter pw, String[] args, - int opti, boolean dumpAll) { - boolean needSep = false; - + boolean dumpOomLocked(FileDescriptor fd, PrintWriter pw, boolean needSep, String[] args, + int opti, boolean dumpAll, String dumpPackage, boolean inclGc) { if (mProcessList.getLruSizeLocked() > 0) { if (needSep) pw.println(); needSep = true; @@ -11965,11 +11995,11 @@ public class ActivityManagerService extends IActivityManager.Stub - mProcessList.mLruProcessServiceStart); pw.println("):"); dumpProcessOomList(pw, this, mProcessList.mLruProcesses, " ", "Proc", "PERS", true, - null); + dumpPackage); needSep = true; } - dumpProcessesToGc(pw, needSep, null); + dumpProcessesToGc(pw, needSep, dumpPackage); pw.println(); mAtmInternal.dumpForOom(pw); diff --git a/services/core/java/com/android/server/am/AppExitInfoTracker.java b/services/core/java/com/android/server/am/AppExitInfoTracker.java index 0c3d02d678bd..02fb34e73f7f 100644 --- a/services/core/java/com/android/server/am/AppExitInfoTracker.java +++ b/services/core/java/com/android/server/am/AppExitInfoTracker.java @@ -785,7 +785,7 @@ public final class AppExitInfoTracker { } void dumpHistoryProcessExitInfo(PrintWriter pw, String packageName) { - pw.println("ACTIVITY MANAGER LRU PROCESSES (dumpsys activity exit-info)"); + pw.println("ACTIVITY MANAGER PROCESS EXIT INFO (dumpsys activity exit-info)"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); synchronized (mLock) { pw.println("Last Timestamp of Persistence Into Persistent Storage: " diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 9edc03eaf3c3..5df84f299509 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -803,7 +803,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A pw.print(" icon=0x"); pw.print(Integer.toHexString(icon)); pw.print(" theme=0x"); pw.println(Integer.toHexString(theme)); pw.println(prefix + "mLastReportedConfigurations:"); - mLastReportedConfiguration.dump(pw, prefix + " "); + mLastReportedConfiguration.dump(pw, prefix + " "); pw.print(prefix); pw.print("CurrentConfiguration="); pw.println(getConfiguration()); if (!getRequestedOverrideConfiguration().equals(EMPTY)) { @@ -839,7 +839,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A pw.print(" iconFilename="); pw.print(taskDescription.getIconFilename()); pw.print(" primaryColor="); pw.println(Integer.toHexString(taskDescription.getPrimaryColor())); - pw.print(prefix + " backgroundColor="); + pw.print(prefix); pw.print(" backgroundColor="); pw.print(Integer.toHexString(taskDescription.getBackgroundColor())); pw.print(" statusBarColor="); pw.print(Integer.toHexString(taskDescription.getStatusBarColor())); diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 68c6627c3d24..d71381ea0d79 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -162,6 +162,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; /** @@ -2802,67 +2803,91 @@ class ActivityStack extends Task { } boolean dump(FileDescriptor fd, PrintWriter pw, boolean dumpAll, boolean dumpClient, - String dumpPackage, boolean needSep) { - pw.println(" Stack #" + getRootTaskId() - + ": type=" + activityTypeToString(getActivityType()) - + " mode=" + windowingModeToString(getWindowingMode())); - pw.println(" isSleeping=" + shouldSleepActivities()); - pw.println(" mBounds=" + getRequestedOverrideBounds()); - - boolean printed = dumpActivities(fd, pw, dumpAll, dumpClient, dumpPackage, needSep); - - needSep = printed; - boolean pr = printThisActivity(pw, mPausingActivity, dumpPackage, needSep, - " mPausingActivity: "); - if (pr) { - printed = true; - needSep = false; - } - pr = printThisActivity(pw, getResumedActivity(), dumpPackage, needSep, - " mResumedActivity: "); - if (pr) { + String dumpPackage, final boolean needSep) { + Runnable headerPrinter = () -> { + if (needSep) { + pw.println(); + } + pw.println(" Stack #" + getRootTaskId() + + ": type=" + activityTypeToString(getActivityType()) + + " mode=" + windowingModeToString(getWindowingMode())); + pw.println(" isSleeping=" + shouldSleepActivities()); + pw.println(" mBounds=" + getRequestedOverrideBounds()); + }; + + boolean printed = false; + + if (dumpPackage == null) { + // If we are not filtering by package, we want to print absolutely everything, + // so always print the header even if there are no tasks/activities inside. + headerPrinter.run(); + headerPrinter = null; printed = true; - needSep = false; } + + printed |= printThisActivity(pw, mPausingActivity, dumpPackage, false, + " mPausingActivity: ", null); + printed |= printThisActivity(pw, getResumedActivity(), dumpPackage, false, + " mResumedActivity: ", null); if (dumpAll) { - pr = printThisActivity(pw, mLastPausedActivity, dumpPackage, needSep, - " mLastPausedActivity: "); - if (pr) { - printed = true; - needSep = true; - } + printed |= printThisActivity(pw, mLastPausedActivity, dumpPackage, false, + " mLastPausedActivity: ", null); printed |= printThisActivity(pw, mLastNoHistoryActivity, dumpPackage, - needSep, " mLastNoHistoryActivity: "); + false, " mLastNoHistoryActivity: ", null); } + + printed |= dumpActivities(fd, pw, dumpAll, dumpClient, dumpPackage, false, headerPrinter); + return printed; } private boolean dumpActivities(FileDescriptor fd, PrintWriter pw, boolean dumpAll, - boolean dumpClient, String dumpPackage, boolean needSep) { + boolean dumpClient, String dumpPackage, boolean needSep, Runnable header) { if (!hasChild()) { return false; } - final String prefix = " "; + final AtomicBoolean printedHeader = new AtomicBoolean(false); + final AtomicBoolean printed = new AtomicBoolean(false); forAllLeafTasks((task) -> { - if (needSep) { - pw.println(""); - } - pw.println(prefix + "Task id #" + task.mTaskId); - pw.println(prefix + "mBounds=" + task.getRequestedOverrideBounds()); - pw.println(prefix + "mMinWidth=" + task.mMinWidth); - pw.println(prefix + "mMinHeight=" + task.mMinHeight); - pw.println(prefix + "mLastNonFullscreenBounds=" + task.mLastNonFullscreenBounds); - pw.println(prefix + "* " + task); - task.dump(pw, prefix + " "); + final String prefix = " "; + Runnable headerPrinter = () -> { + printed.set(true); + if (!printedHeader.get()) { + if (needSep) { + pw.println(""); + } + if (header != null) { + header.run(); + } + printedHeader.set(true); + } + pw.print(prefix); pw.print("* "); pw.println(task); + pw.print(prefix); pw.print(" mBounds="); + pw.println(task.getRequestedOverrideBounds()); + pw.print(prefix); pw.print(" mMinWidth="); pw.print(task.mMinWidth); + pw.print(" mMinHeight="); pw.println(task.mMinHeight); + if (mLastNonFullscreenBounds != null) { + pw.print(prefix); + pw.print(" mLastNonFullscreenBounds="); + pw.println(task.mLastNonFullscreenBounds); + } + task.dump(pw, prefix + " "); + }; + if (dumpPackage == null) { + // If we are not filtering by package, we want to print absolutely everything, + // so always print the header even if there are no activities inside. + headerPrinter.run(); + headerPrinter = null; + } final ArrayList<ActivityRecord> activities = new ArrayList<>(); // Add activities by traversing the hierarchy from bottom to top, since activities // are dumped in reverse order in {@link ActivityStackSupervisor#dumpHistoryList()}. task.forAllActivities((Consumer<ActivityRecord>) activities::add, false /* traverseTopToBottom */); dumpHistoryList(fd, pw, activities, prefix, "Hist", true, !dumpAll, dumpClient, - dumpPackage, false, null, task); + dumpPackage, false, headerPrinter, task); }, true /* traverseTopToBottom */); - return true; + return printed.get(); } ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) { diff --git a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java index 03ff80ae0a21..9026b81c4f2a 100644 --- a/services/core/java/com/android/server/wm/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/wm/ActivityStackSupervisor.java @@ -1936,12 +1936,15 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { } static boolean printThisActivity(PrintWriter pw, ActivityRecord activity, String dumpPackage, - boolean needSep, String prefix) { + boolean needSep, String prefix, Runnable header) { if (activity != null) { if (dumpPackage == null || dumpPackage.equals(activity.packageName)) { if (needSep) { pw.println(); } + if (header != null) { + header.run(); + } pw.print(prefix); pw.println(activity); return true; @@ -1952,7 +1955,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { static boolean dumpHistoryList(FileDescriptor fd, PrintWriter pw, List<ActivityRecord> list, String prefix, String label, boolean complete, boolean brief, boolean client, - String dumpPackage, boolean needNL, String header, Task lastTask) { + String dumpPackage, boolean needNL, Runnable header, Task lastTask) { String innerPrefix = null; String[] args = null; boolean printed = false; @@ -1972,7 +1975,7 @@ public class ActivityStackSupervisor implements RecentTasks.Callbacks { needNL = false; } if (header != null) { - pw.println(header); + header.run(); header = null; } if (lastTask != r.getTask()) { diff --git a/services/core/java/com/android/server/wm/ActivityStartController.java b/services/core/java/com/android/server/wm/ActivityStartController.java index 7fad395fb51d..dfa3fe088770 100644 --- a/services/core/java/com/android/server/wm/ActivityStartController.java +++ b/services/core/java/com/android/server/wm/ActivityStartController.java @@ -549,19 +549,28 @@ public class ActivityStartController { return mPendingRemoteAnimationRegistry; } - void dump(PrintWriter pw, String prefix, String dumpPackage) { + void dumpLastHomeActivityStartResult(PrintWriter pw, String prefix) { pw.print(prefix); pw.print("mLastHomeActivityStartResult="); pw.println(mLastHomeActivityStartResult); + } + + void dump(PrintWriter pw, String prefix, String dumpPackage) { + boolean dumped = false; + + final boolean dumpPackagePresent = dumpPackage != null; - if (mLastHomeActivityStartRecord != null) { + if (mLastHomeActivityStartRecord != null && (!dumpPackagePresent + || dumpPackage.equals(mLastHomeActivityStartRecord.packageName))) { + if (!dumped) { + dumped = true; + dumpLastHomeActivityStartResult(pw, prefix); + } pw.print(prefix); pw.println("mLastHomeActivityStartRecord:"); mLastHomeActivityStartRecord.dump(pw, prefix + " ", true /* dumpAll */); } - final boolean dumpPackagePresent = dumpPackage != null; - if (mLastStarter != null) { final boolean dump = !dumpPackagePresent || mLastStarter.relatedToPackage(dumpPackage) @@ -569,6 +578,10 @@ public class ActivityStartController { && dumpPackage.equals(mLastHomeActivityStartRecord.packageName)); if (dump) { + if (!dumped) { + dumped = true; + dumpLastHomeActivityStartResult(pw, prefix); + } pw.print(prefix); mLastStarter.dump(pw, prefix + " "); @@ -578,7 +591,7 @@ public class ActivityStartController { } } - if (dumpPackagePresent) { + if (!dumped) { pw.print(prefix); pw.println("(nothing)"); } diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 511baa540d5a..6a8d5d905a00 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -4926,7 +4926,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { boolean printed = ActivityStackSupervisor.printThisActivity(pw, mRootWindowContainer.getTopResumedActivity(), dumpPackage, needSep, - " ResumedActivity: "); + " ResumedActivity: ", null); if (printed) { printedAnything = true; needSep = false; diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java index 09700c56deba..ccd51de28c88 100644 --- a/services/core/java/com/android/server/wm/RecentTasks.java +++ b/services/core/java/com/android/server/wm/RecentTasks.java @@ -1718,9 +1718,31 @@ class RecentTasks { final int size = mTasks.size(); for (int i = 0; i < size; i++) { final Task task = mTasks.get(i); - if (dumpPackage != null && (task.realActivity == null || - !dumpPackage.equals(task.realActivity.getPackageName()))) { - continue; + if (dumpPackage != null) { + boolean match = task.intent != null + && task.intent.getComponent() != null + && dumpPackage.equals( + task.intent.getComponent().getPackageName()); + if (!match) { + match |= task.affinityIntent != null + && task.affinityIntent.getComponent() != null + && dumpPackage.equals( + task.affinityIntent.getComponent().getPackageName()); + } + if (!match) { + match |= task.origActivity != null + && dumpPackage.equals(task.origActivity.getPackageName()); + } + if (!match) { + match |= task.realActivity != null + && dumpPackage.equals(task.realActivity.getPackageName()); + } + if (!match) { + match |= dumpPackage.equals(task.mCallingPackage); + } + if (!match) { + continue; + } } if (!printedHeader) { @@ -1743,6 +1765,31 @@ class RecentTasks { 0, true /* getTasksAllowed */, mService.getCurrentUserId(), SYSTEM_UID); for (int i = 0; i < tasks.size(); i++) { final ActivityManager.RecentTaskInfo taskInfo = tasks.get(i); + if (dumpPackage != null) { + boolean match = taskInfo.baseIntent != null + && taskInfo.baseIntent.getComponent() != null + && dumpPackage.equals( + taskInfo.baseIntent.getComponent().getPackageName()); + if (!match) { + match |= taskInfo.baseActivity != null + && dumpPackage.equals(taskInfo.baseActivity.getPackageName()); + } + if (!match) { + match |= taskInfo.topActivity != null + && dumpPackage.equals(taskInfo.topActivity.getPackageName()); + } + if (!match) { + match |= taskInfo.origActivity != null + && dumpPackage.equals(taskInfo.origActivity.getPackageName()); + } + if (!match) { + match |= taskInfo.realActivity != null + && dumpPackage.equals(taskInfo.realActivity.getPackageName()); + } + if (!match) { + continue; + } + } if (!printedHeader) { if (printedAnything) { // Separate from the last block if it printed diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 77841dc2c0bf..a691736e754a 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -3602,31 +3602,40 @@ class RootWindowContainer extends WindowContainer<DisplayContent> boolean needSep = false; for (int displayNdx = getChildCount() - 1; displayNdx >= 0; --displayNdx) { DisplayContent displayContent = getChildAt(displayNdx); + if (printed) { + pw.println(); + } pw.print("Display #"); pw.print(displayContent.mDisplayId); pw.println(" (activities from top to bottom):"); for (int tdaNdx = displayContent.getTaskDisplayAreaCount() - 1; tdaNdx >= 0; --tdaNdx) { final TaskDisplayArea taskDisplayArea = displayContent.getTaskDisplayAreaAt(tdaNdx); for (int sNdx = taskDisplayArea.getStackCount() - 1; sNdx >= 0; --sNdx) { final ActivityStack stack = taskDisplayArea.getStackAt(sNdx); - pw.println(); - printed = stack.dump(fd, pw, dumpAll, dumpClient, dumpPackage, needSep); - needSep = printed; + if (needSep) { + pw.println(); + } + needSep = stack.dump(fd, pw, dumpAll, dumpClient, dumpPackage, false); + printed |= needSep; } } - pw.println(" (resumed activities in task display areas from top to bottom):"); for (int tdaNdx = displayContent.getTaskDisplayAreaCount() - 1; tdaNdx >= 0; --tdaNdx) { final TaskDisplayArea taskDisplayArea = displayContent.getTaskDisplayAreaAt(tdaNdx); - printThisActivity(pw, taskDisplayArea.getFocusedActivity(), dumpPackage, needSep, - " ResumedActivity:"); + printed |= printThisActivity(pw, taskDisplayArea.getFocusedActivity(), + dumpPackage, needSep, " Resumed: ", () -> { + pw.println(" Resumed activities in task display areas" + + " (from top to bottom):"); + }); } } printed |= dumpHistoryList(fd, pw, mStackSupervisor.mFinishingActivities, " ", "Fin", false, !dumpAll, - false, dumpPackage, true, " Activities waiting to finish:", null); + false, dumpPackage, true, + () -> { pw.println(" Activities waiting to finish:"); }, null); printed |= dumpHistoryList(fd, pw, mStackSupervisor.mStoppingActivities, " ", "Stop", false, !dumpAll, - false, dumpPackage, true, " Activities waiting to stop:", null); + false, dumpPackage, true, + () -> { pw.println(" Activities waiting to stop:"); }, null); return printed; } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 8f8ca7707eb5..6c872a6319d7 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3875,11 +3875,12 @@ class Task extends WindowContainer<WindowContainer> { pw.print(prefix); pw.print("mRootProcess="); pw.println(mRootProcess); } pw.print(prefix); pw.print("taskId=" + mTaskId); pw.println(" stackId=" + getRootTaskId()); - pw.print(prefix + "mHasBeenVisible=" + getHasBeenVisible()); - pw.print(" mResizeMode=" + ActivityInfo.resizeModeToString(mResizeMode)); - pw.print(" mSupportsPictureInPicture=" + mSupportsPictureInPicture); - pw.print(" isResizeable=" + isResizeable()); - pw.print(" lastActiveTime=" + lastActiveTime); + pw.print(prefix); pw.print("mHasBeenVisible="); pw.println(getHasBeenVisible()); + pw.print(prefix); pw.print("mResizeMode="); + pw.print(ActivityInfo.resizeModeToString(mResizeMode)); + pw.print(" mSupportsPictureInPicture="); pw.print(mSupportsPictureInPicture); + pw.print(" isResizeable="); pw.println(isResizeable()); + pw.print(prefix); pw.print("lastActiveTime="); pw.print(lastActiveTime); pw.println(" (inactive for " + (getInactiveDuration() / 1000) + "s)"); } |