Improve debug printing in activity manager.

Dumping per-package data is now much cleaning, and only really
prints information related to the package.  Also clean up the
formatting and such of the new activity stack states.

Change-Id: Ie5f31d72b7e77b34fd9acd835f28ed1db1dff328
This commit is contained in:
Dianne Hackborn
2013-06-05 18:41:45 -07:00
parent 195c32f774
commit 7ad34e5fb2
5 changed files with 313 additions and 201 deletions

View File

@@ -1840,10 +1840,10 @@ public class ActiveServices {
/**
* Prints a list of ServiceRecords (dumpsys activity services)
*/
boolean dumpServicesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
void dumpServicesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) {
boolean needSep = false;
boolean needSepResult = false;
boolean printedAnything = false;
ItemMatcher matcher = new ItemMatcher();
matcher.build(args, opti);
@@ -1866,7 +1866,7 @@ public class ActiveServices {
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
continue;
}
needSepResult = true;
printedAnything = true;
if (!printed) {
if (user != 0) {
pw.println();
@@ -1893,7 +1893,7 @@ public class ActiveServices {
pw.println(r.connections.size());
if (r.connections.size() > 0) {
pw.println(" Connections:");
for (int conni=0; conni<=r.connections.size(); conni++) {
for (int conni=0; conni<r.connections.size(); conni++) {
ArrayList<ConnectionRecord> clist = r.connections.valueAt(conni);
for (int i = 0; i < clist.size(); i++) {
ConnectionRecord conn = clist.get(i);
@@ -1930,11 +1930,11 @@ public class ActiveServices {
needSep = true;
}
}
needSep = printed;
needSep |= printed;
}
}
} catch (Exception e) {
Log.w(TAG, "Exception in dumpServicesLocked: " + e);
Log.w(TAG, "Exception in dumpServicesLocked", e);
}
if (mPendingServices.size() > 0) {
@@ -1947,9 +1947,9 @@ public class ActiveServices {
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
continue;
}
needSepResult = true;
printedAnything = true;
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Pending services:");
printed = true;
@@ -1970,9 +1970,9 @@ public class ActiveServices {
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
continue;
}
needSepResult = true;
printedAnything = true;
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Restarting services:");
printed = true;
@@ -1993,9 +1993,9 @@ public class ActiveServices {
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
continue;
}
needSepResult = true;
printedAnything = true;
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Stopping services:");
printed = true;
@@ -2022,9 +2022,9 @@ public class ActiveServices {
|| !dumpPackage.equals(cr.binding.client.info.packageName))) {
continue;
}
needSepResult = true;
printedAnything = true;
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Connection bindings to services:");
printed = true;
@@ -2036,7 +2036,9 @@ public class ActiveServices {
}
}
return needSepResult;
if (!printedAnything) {
pw.println(" (nothing)");
}
}
/**

View File

@@ -9489,39 +9489,28 @@ public final class ActivityManagerService extends ActivityManagerNative
// No piece of data specified, dump everything.
synchronized (this) {
boolean needSep;
needSep = dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
if (needSep) {
pw.println(" ");
}
dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
needSep = dumpBroadcastsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
if (needSep) {
pw.println(" ");
}
dumpBroadcastsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
needSep = dumpProvidersLocked(fd, pw, args, opti, dumpAll, dumpPackage);
if (needSep) {
pw.println(" ");
}
dumpProvidersLocked(fd, pw, args, opti, dumpAll, dumpPackage);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
needSep = mServices.dumpServicesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
if (needSep) {
pw.println(" ");
}
mServices.dumpServicesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
needSep = dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
if (needSep) {
pw.println(" ");
}
dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
@@ -9530,21 +9519,32 @@ public final class ActivityManagerService extends ActivityManagerNative
Binder.restoreCallingIdentity(origId);
}
boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
void dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) {
pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)");
mStackSupervisor.dumpActivitiesLocked(fd, pw, dumpAll, dumpClient, dumpPackage);
boolean printedAnything = mStackSupervisor.dumpActivitiesLocked(fd, pw, dumpAll, dumpClient,
dumpPackage);
boolean needSep = printedAnything;
pw.println(" ");
pw.println(" mFocusedActivity: " + mFocusedActivity);
pw.println(" ");
boolean printed = ActivityStackSupervisor.printThisActivity(pw, mFocusedActivity,
dumpPackage, needSep, " mFocusedActivity: ");
if (printed) {
printedAnything = true;
needSep = false;
}
mStackSupervisor.dump(pw, " ");
if (dumpPackage == null) {
if (needSep) {
pw.println();
}
needSep = true;
printedAnything = true;
mStackSupervisor.dump(pw, " ");
}
if (mRecentTasks.size() > 0) {
pw.println();
pw.println(" Recent tasks:");
boolean printedHeader = false;
final int N = mRecentTasks.size();
for (int i=0; i<N; i++) {
@@ -9555,6 +9555,14 @@ public final class ActivityManagerService extends ActivityManagerNative
continue;
}
}
if (!printedHeader) {
if (needSep) {
pw.println();
}
pw.println(" Recent tasks:");
printedHeader = true;
printedAnything = true;
}
pw.print(" * Recent #"); pw.print(i); pw.print(": ");
pw.println(tr);
if (dumpAll) {
@@ -9563,12 +9571,15 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
return true;
if (!printedAnything) {
pw.println(" (nothing)");
}
}
boolean dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
void dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
int opti, boolean dumpAll, String dumpPackage) {
boolean needSep = false;
boolean printedAnything = false;
int numPers = 0;
pw.println("ACTIVITY MANAGER RUNNING PROCESSES (dumpsys activity processes)");
@@ -9578,12 +9589,13 @@ public final class ActivityManagerService extends ActivityManagerNative
final int NA = procs.size();
for (int ia=0; ia<NA; ia++) {
ProcessRecord r = procs.valueAt(ia);
if (dumpPackage != null && !dumpPackage.equals(r.info.packageName)) {
if (dumpPackage != null && !r.pkgList.contains(dumpPackage)) {
continue;
}
if (!needSep) {
pw.println(" All known processes:");
needSep = true;
printedAnything = true;
}
pw.print(r.persistent ? " *PERS*" : " *APP*");
pw.print(" UID "); pw.print(procs.keyAt(ia));
@@ -9597,41 +9609,50 @@ public final class ActivityManagerService extends ActivityManagerNative
}
if (mIsolatedProcesses.size() > 0) {
if (needSep) pw.println(" ");
needSep = true;
pw.println(" Isolated process list (sorted by uid):");
boolean printed = false;
for (int i=0; i<mIsolatedProcesses.size(); i++) {
ProcessRecord r = mIsolatedProcesses.valueAt(i);
if (dumpPackage != null && !dumpPackage.equals(r.info.packageName)) {
if (dumpPackage != null && !r.pkgList.contains(dumpPackage)) {
continue;
}
if (!printed) {
if (needSep) {
pw.println();
}
pw.println(" Isolated process list (sorted by uid):");
printedAnything = true;
printed = true;
needSep = true;
}
pw.println(String.format("%sIsolated #%2d: %s",
" ", i, r.toString()));
}
}
if (mLruProcesses.size() > 0) {
if (needSep) pw.println(" ");
needSep = true;
pw.println(" Process LRU list (sorted by oom_adj):");
dumpProcessOomList(pw, this, mLruProcesses, " ",
"Proc", "PERS", false, dumpPackage);
needSep = true;
boolean printed = dumpProcessOomList(pw, this, mLruProcesses, " ",
"Proc", "PERS", false, dumpPackage, needSep,
" Process LRU list (sorted by oom_adj):");
if (printed) {
needSep = true;
printedAnything = true;
}
}
if (dumpAll) {
if (dumpAll || dumpPackage != null) {
synchronized (mPidsSelfLocked) {
boolean printed = false;
for (int i=0; i<mPidsSelfLocked.size(); i++) {
ProcessRecord r = mPidsSelfLocked.valueAt(i);
if (dumpPackage != null && !dumpPackage.equals(r.info.packageName)) {
if (dumpPackage != null && !r.pkgList.contains(dumpPackage)) {
continue;
}
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" PID mappings:");
printed = true;
printedAnything = true;
}
pw.print(" PID #"); pw.print(mPidsSelfLocked.keyAt(i));
pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i));
@@ -9646,14 +9667,15 @@ public final class ActivityManagerService extends ActivityManagerNative
ProcessRecord r = mPidsSelfLocked.get(
mForegroundProcesses.valueAt(i).pid);
if (dumpPackage != null && (r == null
|| !dumpPackage.equals(r.info.packageName))) {
|| !r.pkgList.contains(dumpPackage))) {
continue;
}
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Foreground Processes:");
printed = true;
printedAnything = true;
}
pw.print(" PID #"); pw.print(mForegroundProcesses.keyAt(i));
pw.print(": "); pw.println(mForegroundProcesses.valueAt(i));
@@ -9662,24 +9684,27 @@ public final class ActivityManagerService extends ActivityManagerNative
}
if (mPersistentStartingProcesses.size() > 0) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
printedAnything = true;
pw.println(" Persisent processes that are starting:");
dumpProcessList(pw, this, mPersistentStartingProcesses, " ",
"Starting Norm", "Restarting PERS", dumpPackage);
}
if (mRemovedProcesses.size() > 0) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
printedAnything = true;
pw.println(" Processes that are being removed:");
dumpProcessList(pw, this, mRemovedProcesses, " ",
"Removed Norm", "Removed PERS", dumpPackage);
}
if (mProcessesOnHold.size() > 0) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
printedAnything = true;
pw.println(" Processes that are on old until the system is ready:");
dumpProcessList(pw, this, mProcessesOnHold, " ",
"OnHold Norm", "OnHold PERS", dumpPackage);
@@ -9699,14 +9724,15 @@ public final class ActivityManagerService extends ActivityManagerNative
int puid = uids.keyAt(i);
ProcessRecord r = mProcessNames.get(pname, puid);
if (dumpPackage != null && (r == null
|| !dumpPackage.equals(r.info.packageName))) {
|| !r.pkgList.contains(dumpPackage))) {
continue;
}
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Time since processes crashed:");
printed = true;
printedAnything = true;
}
pw.print(" Process "); pw.print(pname);
pw.print(" uid "); pw.print(puid);
@@ -9728,13 +9754,14 @@ public final class ActivityManagerService extends ActivityManagerNative
int puid = uids.keyAt(i);
ProcessRecord r = mProcessNames.get(pname, puid);
if (dumpPackage != null && (r == null
|| !dumpPackage.equals(r.info.packageName))) {
|| !r.pkgList.contains(dumpPackage))) {
continue;
}
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Bad processes:");
printedAnything = true;
}
pw.print(" Bad process "); pw.print(pname);
pw.print(" uid "); pw.print(puid);
@@ -9744,40 +9771,64 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
pw.println();
pw.println(" mStartedUsers:");
for (int i=0; i<mStartedUsers.size(); i++) {
UserStartedState uss = mStartedUsers.valueAt(i);
pw.print(" User #"); pw.print(uss.mHandle.getIdentifier());
pw.print(": "); uss.dump("", pw);
if (dumpPackage == null) {
pw.println();
needSep = false;
pw.println(" mStartedUsers:");
for (int i=0; i<mStartedUsers.size(); i++) {
UserStartedState uss = mStartedUsers.valueAt(i);
pw.print(" User #"); pw.print(uss.mHandle.getIdentifier());
pw.print(": "); uss.dump("", pw);
}
pw.print(" mStartedUserArray: [");
for (int i=0; i<mStartedUserArray.length; i++) {
if (i > 0) pw.print(", ");
pw.print(mStartedUserArray[i]);
}
pw.println("]");
pw.print(" mUserLru: [");
for (int i=0; i<mUserLru.size(); i++) {
if (i > 0) pw.print(", ");
pw.print(mUserLru.get(i));
}
pw.println("]");
if (dumpAll) {
pw.print(" mStartedUserArray: "); pw.println(Arrays.toString(mStartedUserArray));
}
}
pw.print(" mStartedUserArray: [");
for (int i=0; i<mStartedUserArray.length; i++) {
if (i > 0) pw.print(", ");
pw.print(mStartedUserArray[i]);
if (mHomeProcess != null && (dumpPackage == null
|| mHomeProcess.pkgList.contains(dumpPackage))) {
if (needSep) {
pw.println();
needSep = false;
}
pw.println(" mHomeProcess: " + mHomeProcess);
}
pw.println("]");
pw.print(" mUserLru: [");
for (int i=0; i<mUserLru.size(); i++) {
if (i > 0) pw.print(", ");
pw.print(mUserLru.get(i));
if (mPreviousProcess != null && (dumpPackage == null
|| mPreviousProcess.pkgList.contains(dumpPackage))) {
if (needSep) {
pw.println();
needSep = false;
}
pw.println(" mPreviousProcess: " + mPreviousProcess);
}
pw.println("]");
if (dumpAll) {
pw.print(" mStartedUserArray: "); pw.println(Arrays.toString(mStartedUserArray));
}
pw.println(" mHomeProcess: " + mHomeProcess);
pw.println(" mPreviousProcess: " + mPreviousProcess);
if (dumpAll) {
StringBuilder sb = new StringBuilder(128);
sb.append(" mPreviousProcessVisibleTime: ");
TimeUtils.formatDuration(mPreviousProcessVisibleTime, sb);
pw.println(sb);
}
if (mHeavyWeightProcess != null) {
if (mHeavyWeightProcess != null && (dumpPackage == null
|| mHeavyWeightProcess.pkgList.contains(dumpPackage))) {
if (needSep) {
pw.println();
needSep = false;
}
pw.println(" mHeavyWeightProcess: " + mHeavyWeightProcess);
}
pw.println(" mConfiguration: " + mConfiguration);
if (dumpPackage == null) {
pw.println(" mConfiguration: " + mConfiguration);
}
if (dumpAll) {
pw.println(" mConfigWillChange: " + getFocusedStack().mConfigWillChange);
if (mCompatModePackages.getPackages().size() > 0) {
@@ -9798,57 +9849,82 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
}
if (mSleeping || mWentToSleep || mLockScreenShown) {
pw.println(" mSleeping=" + mSleeping + " mWentToSleep=" + mWentToSleep
+ " mLockScreenShown " + mLockScreenShown);
}
if (mShuttingDown) {
pw.println(" mShuttingDown=" + mShuttingDown);
if (dumpPackage == null) {
if (mSleeping || mWentToSleep || mLockScreenShown) {
pw.println(" mSleeping=" + mSleeping + " mWentToSleep=" + mWentToSleep
+ " mLockScreenShown " + mLockScreenShown);
}
if (mShuttingDown) {
pw.println(" mShuttingDown=" + mShuttingDown);
}
}
if (mDebugApp != null || mOrigDebugApp != null || mDebugTransient
|| mOrigWaitForDebugger) {
pw.println(" mDebugApp=" + mDebugApp + "/orig=" + mOrigDebugApp
+ " mDebugTransient=" + mDebugTransient
+ " mOrigWaitForDebugger=" + mOrigWaitForDebugger);
if (dumpPackage == null || dumpPackage.equals(mDebugApp)
|| dumpPackage.equals(mOrigDebugApp)) {
if (needSep) {
pw.println();
needSep = false;
}
pw.println(" mDebugApp=" + mDebugApp + "/orig=" + mOrigDebugApp
+ " mDebugTransient=" + mDebugTransient
+ " mOrigWaitForDebugger=" + mOrigWaitForDebugger);
}
}
if (mOpenGlTraceApp != null) {
pw.println(" mOpenGlTraceApp=" + mOpenGlTraceApp);
if (dumpPackage == null || dumpPackage.equals(mOpenGlTraceApp)) {
if (needSep) {
pw.println();
needSep = false;
}
pw.println(" mOpenGlTraceApp=" + mOpenGlTraceApp);
}
}
if (mProfileApp != null || mProfileProc != null || mProfileFile != null
|| mProfileFd != null) {
pw.println(" mProfileApp=" + mProfileApp + " mProfileProc=" + mProfileProc);
pw.println(" mProfileFile=" + mProfileFile + " mProfileFd=" + mProfileFd);
pw.println(" mProfileType=" + mProfileType + " mAutoStopProfiler="
+ mAutoStopProfiler);
if (dumpPackage == null || dumpPackage.equals(mProfileApp)) {
if (needSep) {
pw.println();
needSep = false;
}
pw.println(" mProfileApp=" + mProfileApp + " mProfileProc=" + mProfileProc);
pw.println(" mProfileFile=" + mProfileFile + " mProfileFd=" + mProfileFd);
pw.println(" mProfileType=" + mProfileType + " mAutoStopProfiler="
+ mAutoStopProfiler);
}
}
if (mAlwaysFinishActivities || mController != null) {
pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
+ " mController=" + mController);
if (dumpPackage == null) {
if (mAlwaysFinishActivities || mController != null) {
pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
+ " mController=" + mController);
}
if (dumpAll) {
pw.println(" Total persistent processes: " + numPers);
pw.println(" mStartRunning=" + mStartRunning
+ " mProcessesReady=" + mProcessesReady
+ " mSystemReady=" + mSystemReady);
pw.println(" mBooting=" + mBooting
+ " mBooted=" + mBooted
+ " mFactoryTest=" + mFactoryTest);
pw.print(" mLastPowerCheckRealtime=");
TimeUtils.formatDuration(mLastPowerCheckRealtime, pw);
pw.println("");
pw.print(" mLastPowerCheckUptime=");
TimeUtils.formatDuration(mLastPowerCheckUptime, pw);
pw.println("");
pw.println(" mGoingToSleep=" + mStackSupervisor.mGoingToSleep);
pw.println(" mLaunchingActivity=" + getFocusedStack().mLaunchingActivity);
pw.println(" mAdjSeq=" + mAdjSeq + " mLruSeq=" + mLruSeq);
pw.println(" mNumNonHiddenProcs=" + mNumNonHiddenProcs
+ " mNumHiddenProcs=" + mNumHiddenProcs
+ " mNumServiceProcs=" + mNumServiceProcs
+ " mNewNumServiceProcs=" + mNewNumServiceProcs);
}
}
if (dumpAll) {
pw.println(" Total persistent processes: " + numPers);
pw.println(" mStartRunning=" + mStartRunning
+ " mProcessesReady=" + mProcessesReady
+ " mSystemReady=" + mSystemReady);
pw.println(" mBooting=" + mBooting
+ " mBooted=" + mBooted
+ " mFactoryTest=" + mFactoryTest);
pw.print(" mLastPowerCheckRealtime=");
TimeUtils.formatDuration(mLastPowerCheckRealtime, pw);
pw.println("");
pw.print(" mLastPowerCheckUptime=");
TimeUtils.formatDuration(mLastPowerCheckUptime, pw);
pw.println("");
pw.println(" mGoingToSleep=" + mStackSupervisor.mGoingToSleep);
pw.println(" mLaunchingActivity=" + getFocusedStack().mLaunchingActivity);
pw.println(" mAdjSeq=" + mAdjSeq + " mLruSeq=" + mLruSeq);
pw.println(" mNumNonHiddenProcs=" + mNumNonHiddenProcs
+ " mNumHiddenProcs=" + mNumHiddenProcs
+ " mNumServiceProcs=" + mNumServiceProcs
+ " mNewNumServiceProcs=" + mNewNumServiceProcs);
if (!printedAnything) {
pw.println(" (nothing)");
}
return true;
}
boolean dumpProcessesToGc(FileDescriptor fd, PrintWriter pw, String[] args,
@@ -9862,7 +9938,7 @@ public final class ActivityManagerService extends ActivityManagerNative
continue;
}
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Processes that are waiting to GC:");
printed = true;
@@ -9885,7 +9961,7 @@ public final class ActivityManagerService extends ActivityManagerNative
boolean needSep = false;
if (mLruProcesses.size() > 0) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" OOM levels:");
pw.print(" SYSTEM_ADJ: "); pw.println(ProcessList.SYSTEM_ADJ);
@@ -9902,11 +9978,11 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.print(" HIDDEN_APP_MIN_ADJ: "); pw.println(ProcessList.HIDDEN_APP_MIN_ADJ);
pw.print(" HIDDEN_APP_MAX_ADJ: "); pw.println(ProcessList.HIDDEN_APP_MAX_ADJ);
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Process OOM control:");
dumpProcessOomList(pw, this, mLruProcesses, " ",
"Proc", "PERS", true, null);
"Proc", "PERS", true, null, false, null);
needSep = true;
}
@@ -10098,11 +10174,11 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
boolean dumpBroadcastsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
void dumpBroadcastsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
int opti, boolean dumpAll, String dumpPackage) {
boolean dumpedHeader = false;
boolean needSep = false;
boolean onlyHistory = false;
boolean printedAnything = false;
if ("history".equals(dumpPackage)) {
if (opti < args.length && "-s".equals(args[opti])) {
@@ -10127,6 +10203,7 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println(" Registered Receivers:");
needSep = true;
printed = true;
printedAnything = true;
}
pw.print(" * "); pw.println(r);
r.dump(pw, " ");
@@ -10137,11 +10214,13 @@ public final class ActivityManagerService extends ActivityManagerNative
"\n Receiver Resolver Table:" : " Receiver Resolver Table:",
" ", dumpPackage, false)) {
needSep = true;
printedAnything = true;
}
}
for (BroadcastQueue q : mBroadcastQueues) {
needSep = q.dumpLocked(fd, pw, args, opti, dumpAll, dumpPackage, needSep);
printedAnything |= needSep;
}
needSep = true;
@@ -10152,6 +10231,7 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println();
}
needSep = true;
printedAnything = true;
pw.print(" Sticky broadcasts for user ");
pw.print(mStickyBroadcasts.keyAt(user)); pw.println(":");
StringBuilder sb = new StringBuilder(128);
@@ -10189,14 +10269,18 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println(" mHandler:");
mHandler.dump(new PrintWriterPrinter(pw), " ");
needSep = true;
printedAnything = true;
}
return needSep;
if (!printedAnything) {
pw.println(" (nothing)");
}
}
boolean dumpProvidersLocked(FileDescriptor fd, PrintWriter pw, String[] args,
void dumpProvidersLocked(FileDescriptor fd, PrintWriter pw, String[] args,
int opti, boolean dumpAll, String dumpPackage) {
boolean needSep;
boolean printedAnything = false;
ItemMatcher matcher = new ItemMatcher();
matcher.build(args, opti);
@@ -10204,6 +10288,7 @@ public final class ActivityManagerService extends ActivityManagerNative
pw.println("ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers)");
needSep = mProviderMap.dumpProvidersLocked(pw, dumpAll, dumpPackage);
printedAnything |= needSep;
if (mLaunchingProviders.size() > 0) {
boolean printed = false;
@@ -10213,10 +10298,11 @@ public final class ActivityManagerService extends ActivityManagerNative
continue;
}
if (!printed) {
if (needSep) pw.println(" ");
if (needSep) pw.println();
needSep = true;
pw.println(" Launching content providers:");
printed = true;
printedAnything = true;
}
pw.print(" Launching #"); pw.print(i); pw.print(": ");
pw.println(r);
@@ -10225,7 +10311,7 @@ public final class ActivityManagerService extends ActivityManagerNative
if (mGrantedUriPermissions.size() > 0) {
boolean printed = false;
int dumpUid = -1;
int dumpUid = -2;
if (dumpPackage != null) {
try {
dumpUid = mContext.getPackageManager().getPackageUid(dumpPackage, 0);
@@ -10235,7 +10321,7 @@ public final class ActivityManagerService extends ActivityManagerNative
}
for (int i=0; i<mGrantedUriPermissions.size(); i++) {
int uid = mGrantedUriPermissions.keyAt(i);
if (dumpUid >= 0 && UserHandle.getAppId(uid) != dumpUid) {
if (dumpUid >= -1 && UserHandle.getAppId(uid) != dumpUid) {
continue;
}
HashMap<Uri, UriPermission> perms
@@ -10245,6 +10331,7 @@ public final class ActivityManagerService extends ActivityManagerNative
needSep = true;
pw.println(" Granted Uri Permissions:");
printed = true;
printedAnything = true;
}
pw.print(" * UID "); pw.print(uid);
pw.println(" holds:");
@@ -10256,16 +10343,19 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
}
return needSep;
if (!printedAnything) {
pw.println(" (nothing)");
}
}
boolean dumpPendingIntentsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
void dumpPendingIntentsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
int opti, boolean dumpAll, String dumpPackage) {
boolean needSep = false;
boolean printed = false;
pw.println("ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents)");
if (mIntentSenderRecords.size() > 0) {
boolean printed = false;
Iterator<WeakReference<PendingIntentRecord>> it
= mIntentSenderRecords.values().iterator();
while (it.hasNext()) {
@@ -10275,11 +10365,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|| !dumpPackage.equals(rec.key.packageName))) {
continue;
}
if (!printed) {
pw.println("ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents)");
printed = true;
}
needSep = true;
printed = true;
if (rec != null) {
pw.print(" * "); pw.println(rec);
if (dumpAll) {
@@ -10290,8 +10376,10 @@ public final class ActivityManagerService extends ActivityManagerNative
}
}
}
return needSep;
if (!printed) {
pw.println(" (nothing)");
}
}
private static String buildOomTag(String prefix, String space, int val, int base) {
@@ -10326,13 +10414,13 @@ public final class ActivityManagerService extends ActivityManagerNative
private static final boolean dumpProcessOomList(PrintWriter pw,
ActivityManagerService service, List<ProcessRecord> origList,
String prefix, String normalLabel, String persistentLabel,
boolean inclDetails, String dumpPackage) {
boolean inclDetails, String dumpPackage, boolean needSep, String header) {
ArrayList<Pair<ProcessRecord, Integer>> list
= new ArrayList<Pair<ProcessRecord, Integer>>(origList.size());
for (int i=0; i<origList.size(); i++) {
ProcessRecord r = origList.get(i);
if (dumpPackage != null && !dumpPackage.equals(r.info.packageName)) {
if (dumpPackage != null && !r.pkgList.contains(dumpPackage)) {
continue;
}
list.add(new Pair<ProcessRecord, Integer>(origList.get(i), i));
@@ -10341,7 +10429,14 @@ public final class ActivityManagerService extends ActivityManagerNative
if (list.size() <= 0) {
return false;
}
if (header != null) {
if (needSep) {
pw.println();
}
pw.println(header);
}
Comparator<Pair<ProcessRecord, Integer>> comparator
= new Comparator<Pair<ProcessRecord, Integer>>() {
@Override

View File

@@ -3334,13 +3334,17 @@ final class ActivityStack {
}
boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll,
boolean dumpClient, String dumpPackage, boolean needSep) {
boolean dumpClient, String dumpPackage, boolean needSep, String header) {
boolean printed = false;
for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
final TaskRecord task = mTaskHistory.get(taskNdx);
printed |= ActivityStackSupervisor.dumpHistoryList(fd, pw,
mTaskHistory.get(taskNdx).mActivities, " ", "Hist", true, !dumpAll,
dumpClient, dumpPackage, needSep, " Task " + taskNdx + ": id #" + task.taskId);
dumpClient, dumpPackage, needSep, header,
" Task " + taskNdx + ": id #" + task.taskId);
if (printed) {
header = null;
}
}
return printed;
}

View File

@@ -2209,6 +2209,8 @@ public class ActivityStackSupervisor {
pw.print(prefix); pw.print("mDismissKeyguardOnNextActivity:");
pw.println(mDismissKeyguardOnNextActivity);
pw.print(prefix); pw.print("mStackState="); pw.println(stackStateToString(mStackState));
pw.print(prefix); pw.println("mSleepTimeout: " + mSleepTimeout);
pw.print(prefix); pw.println("mCurTaskId: " + mCurTaskId);
}
ArrayList<ActivityRecord> getDumpActivitiesLocked(String name) {
@@ -2221,66 +2223,72 @@ public class ActivityStackSupervisor {
if (dumpPackage == null || dumpPackage.equals(activity.packageName)) {
if (needSep) {
pw.println();
needSep = false;
}
pw.print(prefix);
pw.println(activity);
return true;
}
}
return needSep;
return false;
}
boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, boolean dumpAll,
boolean dumpClient, String dumpPackage) {
boolean printed = false;
boolean needSep = false;
final int numStacks = mStacks.size();
for (int stackNdx = 0; stackNdx < numStacks; ++stackNdx) {
final ActivityStack stack = mStacks.get(stackNdx);
if (stackNdx != 0) {
pw.println();
}
pw.print(" Stack #"); pw.print(mStacks.indexOf(stack)); pw.println(":");
stack.dumpActivitiesLocked(fd, pw, dumpAll, dumpClient, dumpPackage, false);
dumpHistoryList(fd, pw, stack.mLRUActivities, " ", "Run", false, !dumpAll, false,
dumpPackage, true, " Running activities (most recent first):");
StringBuilder stackHeader = new StringBuilder(128);
stackHeader.append(" Stack #");
stackHeader.append(mStacks.indexOf(stack));
stackHeader.append(":");
printed |= stack.dumpActivitiesLocked(fd, pw, dumpAll, dumpClient, dumpPackage, needSep,
stackHeader.toString());
printed |= dumpHistoryList(fd, pw, stack.mLRUActivities, " ", "Run", false, !dumpAll,
false, dumpPackage, true, " Running activities (most recent first):", null);
boolean needSep = true;
needSep = printThisActivity(pw, stack.mPausingActivity, dumpPackage, needSep,
needSep = printed;
boolean pr = printThisActivity(pw, stack.mPausingActivity, dumpPackage, needSep,
" mPausingActivity: ");
needSep = printThisActivity(pw, stack.mResumedActivity, dumpPackage, needSep,
if (pr) {
printed = true;
needSep = false;
}
pr = printThisActivity(pw, stack.mResumedActivity, dumpPackage, needSep,
" mResumedActivity: ");
if (pr) {
printed = true;
needSep = false;
}
if (dumpAll) {
printThisActivity(pw, stack.mLastPausedActivity, dumpPackage, needSep,
pr = printThisActivity(pw, stack.mLastPausedActivity, dumpPackage, needSep,
" mLastPausedActivity: ");
if (pr) {
printed = true;
}
}
needSep = printed;
}
dumpHistoryList(fd, pw, mFinishingActivities, " ", "Fin", false, !dumpAll, false,
dumpPackage, true, " Activities waiting to finish:");
dumpHistoryList(fd, pw, mStoppingActivities, " ", "Stop", false, !dumpAll, false,
dumpPackage, true, " Activities waiting to stop:");
dumpHistoryList(fd, pw, mWaitingVisibleActivities, " ", "Wait", false, !dumpAll,
false, dumpPackage, true, " Activities waiting for another to become visible:");
dumpHistoryList(fd, pw, mGoingToSleepActivities, " ", "Sleep", false, !dumpAll, false,
dumpPackage, true, " Activities waiting to sleep:");
dumpHistoryList(fd, pw, mGoingToSleepActivities, " ", "Sleep", false, !dumpAll, false,
dumpPackage, true, " Activities waiting to sleep:");
printed |= dumpHistoryList(fd, pw, mFinishingActivities, " ", "Fin", false, !dumpAll,
false, dumpPackage, true, " Activities waiting to finish:", null);
printed |= dumpHistoryList(fd, pw, mStoppingActivities, " ", "Stop", false, !dumpAll,
false, dumpPackage, true, " Activities waiting to stop:", null);
printed |= dumpHistoryList(fd, pw, mWaitingVisibleActivities, " ", "Wait", false, !dumpAll,
false, dumpPackage, true, " Activities waiting for another to become visible:",
null);
printed |= dumpHistoryList(fd, pw, mGoingToSleepActivities, " ", "Sleep", false, !dumpAll,
false, dumpPackage, true, " Activities waiting to sleep:", null);
printed |= dumpHistoryList(fd, pw, mGoingToSleepActivities, " ", "Sleep", false, !dumpAll,
false, dumpPackage, true, " Activities waiting to sleep:", null);
if (dumpPackage == null) {
pw.println();
pw.print(" mStackState="); pw.println(stackStateToString(mStackState));
if (dumpAll) {
pw.println(" mSleepTimeout: " + mSleepTimeout);
}
if (dumpAll) {
pw.println(" mCurTaskId: " + mCurTaskId);
}
}
return true;
return printed;
}
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) {
String dumpPackage, boolean needNL, String header1, String header2) {
TaskRecord lastTask = null;
String innerPrefix = null;
String[] args = null;
@@ -2300,9 +2308,13 @@ public class ActivityStackSupervisor {
pw.println("");
needNL = false;
}
if (header != null) {
pw.println(header);
header = null;
if (header1 != null) {
pw.println(header1);
header1 = null;
}
if (header2 != null) {
pw.println(header2);
header2 = null;
}
if (lastTask != r.task) {
lastTask = r.task;

View File

@@ -287,8 +287,7 @@ public class ProviderMap {
boolean needSep = false;
if (mSingletonByClass.size() > 0) {
pw.println(" Published single-user content providers (by class):");
needSep = dumpProvidersByClassLocked(pw, dumpAll, dumpPackage,
needSep |= dumpProvidersByClassLocked(pw, dumpAll, dumpPackage,
" Published single-user content providers (by class):", needSep,
mSingletonByClass);
}