Merge "Maybe fix issue #5627399: java.lang.RuntimeException - While sign in..." into ics-mr1
This commit is contained in:
committed by
Android (Google) Code Review
commit
4c6a65bc31
@@ -1251,11 +1251,11 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
String[] emptyArgs = new String[] { };
|
||||
StringBuilder tag = new StringBuilder(128);
|
||||
synchronized (ActivityManagerService.this) {
|
||||
dumpProcessesLocked(null, catPw, emptyArgs, 0, false);
|
||||
dumpProcessesLocked(null, catPw, emptyArgs, 0, false, null);
|
||||
catPw.println();
|
||||
dumpServicesLocked(null, catPw, emptyArgs, 0, false, false);
|
||||
dumpServicesLocked(null, catPw, emptyArgs, 0, false, false, null);
|
||||
catPw.println();
|
||||
dumpActivitiesLocked(null, catPw, emptyArgs, 0, false, false);
|
||||
dumpActivitiesLocked(null, catPw, emptyArgs, 0, false, false, null);
|
||||
catPw.println();
|
||||
}
|
||||
tag.append("Low on memory -- ");
|
||||
@@ -1681,7 +1681,9 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
final void setFocusedActivityLocked(ActivityRecord r) {
|
||||
if (mFocusedActivity != r) {
|
||||
mFocusedActivity = r;
|
||||
mWindowManager.setFocusedApp(r.appToken, true);
|
||||
if (r != null) {
|
||||
mWindowManager.setFocusedApp(r.appToken, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7907,6 +7909,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
|
||||
boolean dumpAll = false;
|
||||
boolean dumpClient = false;
|
||||
String dumpPackage = null;
|
||||
|
||||
int opti = 0;
|
||||
while (opti < args.length) {
|
||||
@@ -7924,13 +7927,14 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
pw.println(" [-a] [-c] [-h] [cmd] ...");
|
||||
pw.println(" cmd may be one of:");
|
||||
pw.println(" a[ctivities]: activity stack state");
|
||||
pw.println(" b[roadcasts]: broadcast state");
|
||||
pw.println(" i[ntents]: pending intent state");
|
||||
pw.println(" p[rocesses]: process state");
|
||||
pw.println(" b[roadcasts] [PACKAGE_NAME]: broadcast state");
|
||||
pw.println(" i[ntents] [PACKAGE_NAME]: pending intent state");
|
||||
pw.println(" p[rocesses] [PACKAGE_NAME]: process state");
|
||||
pw.println(" o[om]: out of memory management");
|
||||
pw.println(" prov[iders] [COMP_SPEC ...]: content provider state");
|
||||
pw.println(" s[ervices] [COMP_SPEC ...]: service state");
|
||||
pw.println(" service [COMP_SPEC]: service client-side state");
|
||||
pw.println(" package [PACKAGE_NAME]: all state related to given package");
|
||||
pw.println(" all: dump all activities");
|
||||
pw.println(" top: dump the top activity");
|
||||
pw.println(" cmd may also be a COMP_SPEC to dump activities.");
|
||||
@@ -7951,22 +7955,58 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
opti++;
|
||||
if ("activities".equals(cmd) || "a".equals(cmd)) {
|
||||
synchronized (this) {
|
||||
dumpActivitiesLocked(fd, pw, args, opti, true, dumpClient);
|
||||
dumpActivitiesLocked(fd, pw, args, opti, true, dumpClient, null);
|
||||
}
|
||||
return;
|
||||
} else if ("broadcasts".equals(cmd) || "b".equals(cmd)) {
|
||||
String[] newArgs;
|
||||
String name;
|
||||
if (opti >= args.length) {
|
||||
name = null;
|
||||
newArgs = EMPTY_STRING_ARRAY;
|
||||
} else {
|
||||
name = args[opti];
|
||||
opti++;
|
||||
newArgs = new String[args.length - opti];
|
||||
if (args.length > 2) System.arraycopy(args, opti, newArgs, 0,
|
||||
args.length - opti);
|
||||
}
|
||||
synchronized (this) {
|
||||
dumpBroadcastsLocked(fd, pw, args, opti, true);
|
||||
dumpBroadcastsLocked(fd, pw, args, opti, true, name);
|
||||
}
|
||||
return;
|
||||
} else if ("intents".equals(cmd) || "i".equals(cmd)) {
|
||||
String[] newArgs;
|
||||
String name;
|
||||
if (opti >= args.length) {
|
||||
name = null;
|
||||
newArgs = EMPTY_STRING_ARRAY;
|
||||
} else {
|
||||
name = args[opti];
|
||||
opti++;
|
||||
newArgs = new String[args.length - opti];
|
||||
if (args.length > 2) System.arraycopy(args, opti, newArgs, 0,
|
||||
args.length - opti);
|
||||
}
|
||||
synchronized (this) {
|
||||
dumpPendingIntentsLocked(fd, pw, args, opti, true);
|
||||
dumpPendingIntentsLocked(fd, pw, args, opti, true, name);
|
||||
}
|
||||
return;
|
||||
} else if ("processes".equals(cmd) || "p".equals(cmd)) {
|
||||
String[] newArgs;
|
||||
String name;
|
||||
if (opti >= args.length) {
|
||||
name = null;
|
||||
newArgs = EMPTY_STRING_ARRAY;
|
||||
} else {
|
||||
name = args[opti];
|
||||
opti++;
|
||||
newArgs = new String[args.length - opti];
|
||||
if (args.length > 2) System.arraycopy(args, opti, newArgs, 0,
|
||||
args.length - opti);
|
||||
}
|
||||
synchronized (this) {
|
||||
dumpProcessesLocked(fd, pw, args, opti, true);
|
||||
dumpProcessesLocked(fd, pw, args, opti, true, name);
|
||||
}
|
||||
return;
|
||||
} else if ("oom".equals(cmd) || "o".equals(cmd)) {
|
||||
@@ -7976,7 +8016,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
return;
|
||||
} else if ("providers".equals(cmd) || "prov".equals(cmd)) {
|
||||
synchronized (this) {
|
||||
dumpProvidersLocked(fd, pw, args, opti, true);
|
||||
dumpProvidersLocked(fd, pw, args, opti, true, null);
|
||||
}
|
||||
return;
|
||||
} else if ("service".equals(cmd)) {
|
||||
@@ -7989,16 +8029,32 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
name = args[opti];
|
||||
opti++;
|
||||
newArgs = new String[args.length - opti];
|
||||
if (args.length > 2) System.arraycopy(args, opti, newArgs, 0, args.length - opti);
|
||||
if (args.length > 2) System.arraycopy(args, opti, newArgs, 0,
|
||||
args.length - opti);
|
||||
}
|
||||
if (!dumpService(fd, pw, name, newArgs, 0, dumpAll)) {
|
||||
pw.println("No services match: " + name);
|
||||
pw.println("Use -h for help.");
|
||||
}
|
||||
return;
|
||||
} else if ("package".equals(cmd)) {
|
||||
String[] newArgs;
|
||||
if (opti >= args.length) {
|
||||
pw.println("package: no package name specified");
|
||||
pw.println("Use -h for help.");
|
||||
return;
|
||||
} else {
|
||||
dumpPackage = args[opti];
|
||||
opti++;
|
||||
newArgs = new String[args.length - opti];
|
||||
if (args.length > 2) System.arraycopy(args, opti, newArgs, 0,
|
||||
args.length - opti);
|
||||
args = newArgs;
|
||||
opti = 0;
|
||||
}
|
||||
} else if ("services".equals(cmd) || "s".equals(cmd)) {
|
||||
synchronized (this) {
|
||||
dumpServicesLocked(fd, pw, args, opti, true, dumpClient);
|
||||
dumpServicesLocked(fd, pw, args, opti, true, dumpClient, null);
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
@@ -8014,76 +8070,78 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
// No piece of data specified, dump everything.
|
||||
synchronized (this) {
|
||||
boolean needSep;
|
||||
needSep = dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll);
|
||||
needSep = dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
|
||||
if (needSep) {
|
||||
pw.println(" ");
|
||||
}
|
||||
if (dumpAll) {
|
||||
pw.println("-------------------------------------------------------------------------------");
|
||||
}
|
||||
needSep = dumpBroadcastsLocked(fd, pw, args, opti, dumpAll);
|
||||
needSep = dumpBroadcastsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
|
||||
if (needSep) {
|
||||
pw.println(" ");
|
||||
}
|
||||
if (dumpAll) {
|
||||
pw.println("-------------------------------------------------------------------------------");
|
||||
}
|
||||
needSep = dumpProvidersLocked(fd, pw, args, opti, dumpAll);
|
||||
needSep = dumpProvidersLocked(fd, pw, args, opti, dumpAll, dumpPackage);
|
||||
if (needSep) {
|
||||
pw.println(" ");
|
||||
}
|
||||
if (dumpAll) {
|
||||
pw.println("-------------------------------------------------------------------------------");
|
||||
}
|
||||
needSep = dumpServicesLocked(fd, pw, args, opti, dumpAll, dumpClient);
|
||||
needSep = dumpServicesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
|
||||
if (needSep) {
|
||||
pw.println(" ");
|
||||
}
|
||||
if (dumpAll) {
|
||||
pw.println("-------------------------------------------------------------------------------");
|
||||
}
|
||||
needSep = dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient);
|
||||
needSep = dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
|
||||
if (needSep) {
|
||||
pw.println(" ");
|
||||
}
|
||||
if (dumpAll) {
|
||||
pw.println("-------------------------------------------------------------------------------");
|
||||
}
|
||||
dumpProcessesLocked(fd, pw, args, opti, dumpAll);
|
||||
dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
|
||||
}
|
||||
}
|
||||
|
||||
boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
|
||||
int opti, boolean dumpAll, boolean dumpClient) {
|
||||
int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) {
|
||||
pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)");
|
||||
pw.println(" Main stack:");
|
||||
dumpHistoryList(fd, pw, mMainStack.mHistory, " ", "Hist", true, !dumpAll, dumpClient);
|
||||
dumpHistoryList(fd, pw, mMainStack.mHistory, " ", "Hist", true, !dumpAll, dumpClient,
|
||||
dumpPackage);
|
||||
pw.println(" ");
|
||||
pw.println(" Running activities (most recent first):");
|
||||
dumpHistoryList(fd, pw, mMainStack.mLRUActivities, " ", "Run", false, !dumpAll, false);
|
||||
dumpHistoryList(fd, pw, mMainStack.mLRUActivities, " ", "Run", false, !dumpAll, false,
|
||||
dumpPackage);
|
||||
if (mMainStack.mWaitingVisibleActivities.size() > 0) {
|
||||
pw.println(" ");
|
||||
pw.println(" Activities waiting for another to become visible:");
|
||||
dumpHistoryList(fd, pw, mMainStack.mWaitingVisibleActivities, " ", "Wait", false,
|
||||
!dumpAll, false);
|
||||
!dumpAll, false, dumpPackage);
|
||||
}
|
||||
if (mMainStack.mStoppingActivities.size() > 0) {
|
||||
pw.println(" ");
|
||||
pw.println(" Activities waiting to stop:");
|
||||
dumpHistoryList(fd, pw, mMainStack.mStoppingActivities, " ", "Stop", false,
|
||||
!dumpAll, false);
|
||||
!dumpAll, false, dumpPackage);
|
||||
}
|
||||
if (mMainStack.mGoingToSleepActivities.size() > 0) {
|
||||
pw.println(" ");
|
||||
pw.println(" Activities waiting to sleep:");
|
||||
dumpHistoryList(fd, pw, mMainStack.mGoingToSleepActivities, " ", "Sleep", false,
|
||||
!dumpAll, false);
|
||||
!dumpAll, false, dumpPackage);
|
||||
}
|
||||
if (mMainStack.mFinishingActivities.size() > 0) {
|
||||
pw.println(" ");
|
||||
pw.println(" Activities waiting to finish:");
|
||||
dumpHistoryList(fd, pw, mMainStack.mFinishingActivities, " ", "Fin", false,
|
||||
!dumpAll, false);
|
||||
!dumpAll, false, dumpPackage);
|
||||
}
|
||||
|
||||
pw.println(" ");
|
||||
@@ -8106,6 +8164,12 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
final int N = mRecentTasks.size();
|
||||
for (int i=0; i<N; i++) {
|
||||
TaskRecord tr = mRecentTasks.get(i);
|
||||
if (dumpPackage != null) {
|
||||
if (tr.realActivity == null ||
|
||||
!dumpPackage.equals(tr.realActivity)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
pw.print(" * Recent #"); pw.print(i); pw.print(": ");
|
||||
pw.println(tr);
|
||||
if (dumpAll) {
|
||||
@@ -8123,7 +8187,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
boolean dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
|
||||
int opti, boolean dumpAll) {
|
||||
int opti, boolean dumpAll, String dumpPackage) {
|
||||
boolean needSep = false;
|
||||
int numPers = 0;
|
||||
|
||||
@@ -8133,11 +8197,14 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
for (SparseArray<ProcessRecord> procs : mProcessNames.getMap().values()) {
|
||||
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)) {
|
||||
continue;
|
||||
}
|
||||
if (!needSep) {
|
||||
pw.println(" All known processes:");
|
||||
needSep = true;
|
||||
}
|
||||
ProcessRecord r = procs.valueAt(ia);
|
||||
pw.print(r.persistent ? " *PERS*" : " *APP*");
|
||||
pw.print(" UID "); pw.print(procs.keyAt(ia));
|
||||
pw.print(" "); pw.println(r);
|
||||
@@ -8154,31 +8221,49 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
needSep = true;
|
||||
pw.println(" Process LRU list (sorted by oom_adj):");
|
||||
dumpProcessOomList(pw, this, mLruProcesses, " ",
|
||||
"Proc", "PERS", false);
|
||||
"Proc", "PERS", false, dumpPackage);
|
||||
needSep = true;
|
||||
}
|
||||
|
||||
if (dumpAll) {
|
||||
synchronized (mPidsSelfLocked) {
|
||||
if (mPidsSelfLocked.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" PID mappings:");
|
||||
for (int i=0; i<mPidsSelfLocked.size(); i++) {
|
||||
pw.print(" PID #"); pw.print(mPidsSelfLocked.keyAt(i));
|
||||
pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i));
|
||||
boolean printed = false;
|
||||
for (int i=0; i<mPidsSelfLocked.size(); i++) {
|
||||
ProcessRecord r = mPidsSelfLocked.valueAt(i);
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.info.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" PID mappings:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" PID #"); pw.print(mPidsSelfLocked.keyAt(i));
|
||||
pw.print(": "); pw.println(mPidsSelfLocked.valueAt(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mForegroundProcesses.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Foreground Processes:");
|
||||
for (int i=0; i<mForegroundProcesses.size(); i++) {
|
||||
pw.print(" PID #"); pw.print(mForegroundProcesses.keyAt(i));
|
||||
pw.print(": "); pw.println(mForegroundProcesses.valueAt(i));
|
||||
synchronized (mPidsSelfLocked) {
|
||||
boolean printed = false;
|
||||
for (int i=0; i<mForegroundProcesses.size(); i++) {
|
||||
ProcessRecord r = mPidsSelfLocked.get(
|
||||
mForegroundProcesses.valueAt(i).pid);
|
||||
if (dumpPackage != null && (r == null
|
||||
|| !dumpPackage.equals(r.info.packageName))) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Foreground Processes:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" PID #"); pw.print(mForegroundProcesses.keyAt(i));
|
||||
pw.print(": "); pw.println(mForegroundProcesses.valueAt(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8187,7 +8272,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
needSep = true;
|
||||
pw.println(" Persisent processes that are starting:");
|
||||
dumpProcessList(pw, this, mPersistentStartingProcesses, " ",
|
||||
"Starting Norm", "Restarting PERS");
|
||||
"Starting Norm", "Restarting PERS", dumpPackage);
|
||||
}
|
||||
|
||||
if (mRemovedProcesses.size() > 0) {
|
||||
@@ -8195,7 +8280,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
needSep = true;
|
||||
pw.println(" Processes that are being removed:");
|
||||
dumpProcessList(pw, this, mRemovedProcesses, " ",
|
||||
"Removed Norm", "Removed PERS");
|
||||
"Removed Norm", "Removed PERS", dumpPackage);
|
||||
}
|
||||
|
||||
if (mProcessesOnHold.size() > 0) {
|
||||
@@ -8203,23 +8288,34 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
needSep = true;
|
||||
pw.println(" Processes that are on old until the system is ready:");
|
||||
dumpProcessList(pw, this, mProcessesOnHold, " ",
|
||||
"OnHold Norm", "OnHold PERS");
|
||||
"OnHold Norm", "OnHold PERS", dumpPackage);
|
||||
}
|
||||
|
||||
needSep = dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll);
|
||||
needSep = dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll, dumpPackage);
|
||||
|
||||
if (mProcessCrashTimes.getMap().size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Time since processes crashed:");
|
||||
boolean printed = false;
|
||||
long now = SystemClock.uptimeMillis();
|
||||
for (Map.Entry<String, SparseArray<Long>> procs
|
||||
: mProcessCrashTimes.getMap().entrySet()) {
|
||||
String pname = procs.getKey();
|
||||
SparseArray<Long> uids = procs.getValue();
|
||||
final int N = uids.size();
|
||||
for (int i=0; i<N; i++) {
|
||||
pw.print(" Process "); pw.print(procs.getKey());
|
||||
pw.print(" uid "); pw.print(uids.keyAt(i));
|
||||
int puid = uids.keyAt(i);
|
||||
ProcessRecord r = mProcessNames.get(pname, puid);
|
||||
if (dumpPackage != null && (r == null
|
||||
|| !dumpPackage.equals(r.info.packageName))) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Time since processes crashed:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" Process "); pw.print(pname);
|
||||
pw.print(" uid "); pw.print(puid);
|
||||
pw.print(": last crashed ");
|
||||
pw.print((now-uids.valueAt(i)));
|
||||
pw.println(" ms ago");
|
||||
@@ -8228,16 +8324,26 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
if (mBadProcesses.getMap().size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Bad processes:");
|
||||
boolean printed = false;
|
||||
for (Map.Entry<String, SparseArray<Long>> procs
|
||||
: mBadProcesses.getMap().entrySet()) {
|
||||
String pname = procs.getKey();
|
||||
SparseArray<Long> uids = procs.getValue();
|
||||
final int N = uids.size();
|
||||
for (int i=0; i<N; i++) {
|
||||
pw.print(" Bad process "); pw.print(procs.getKey());
|
||||
pw.print(" uid "); pw.print(uids.keyAt(i));
|
||||
int puid = uids.keyAt(i);
|
||||
ProcessRecord r = mProcessNames.get(pname, puid);
|
||||
if (dumpPackage != null && (r == null
|
||||
|| !dumpPackage.equals(r.info.packageName))) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Bad processes:");
|
||||
}
|
||||
pw.print(" Bad process "); pw.print(pname);
|
||||
pw.print(" uid "); pw.print(puid);
|
||||
pw.print(": crashed at time ");
|
||||
pw.println(uids.valueAt(i));
|
||||
}
|
||||
@@ -8254,11 +8360,18 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if (dumpAll) {
|
||||
pw.println(" mConfigWillChange: " + mMainStack.mConfigWillChange);
|
||||
if (mCompatModePackages.getPackages().size() > 0) {
|
||||
pw.println(" mScreenCompatPackages:");
|
||||
boolean printed = false;
|
||||
for (Map.Entry<String, Integer> entry
|
||||
: mCompatModePackages.getPackages().entrySet()) {
|
||||
String pkg = entry.getKey();
|
||||
int mode = entry.getValue();
|
||||
if (dumpPackage != null && !dumpPackage.equals(pkg)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
pw.println(" mScreenCompatPackages:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" "); pw.print(pkg); pw.print(": ");
|
||||
pw.print(mode); pw.println();
|
||||
}
|
||||
@@ -8307,14 +8420,21 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
boolean dumpProcessesToGc(FileDescriptor fd, PrintWriter pw, String[] args,
|
||||
int opti, boolean needSep, boolean dumpAll) {
|
||||
int opti, boolean needSep, boolean dumpAll, String dumpPackage) {
|
||||
if (mProcessesToGc.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Processes that are waiting to GC:");
|
||||
boolean printed = false;
|
||||
long now = SystemClock.uptimeMillis();
|
||||
for (int i=0; i<mProcessesToGc.size(); i++) {
|
||||
ProcessRecord proc = mProcessesToGc.get(i);
|
||||
if (dumpPackage != null && !dumpPackage.equals(proc.info.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Processes that are waiting to GC:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" Process "); pw.println(proc);
|
||||
pw.print(" lowMem="); pw.print(proc.reportLowMemory);
|
||||
pw.print(", last gced=");
|
||||
@@ -8354,11 +8474,11 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
needSep = true;
|
||||
pw.println(" Process OOM control:");
|
||||
dumpProcessOomList(pw, this, mLruProcesses, " ",
|
||||
"Proc", "PERS", true);
|
||||
"Proc", "PERS", true, null);
|
||||
needSep = true;
|
||||
}
|
||||
|
||||
needSep = dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll);
|
||||
needSep = dumpProcessesToGc(fd, pw, args, opti, needSep, dumpAll, null);
|
||||
|
||||
pw.println();
|
||||
pw.println(" mHomeProcess: " + mHomeProcess);
|
||||
@@ -8658,64 +8778,103 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
boolean dumpBroadcastsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
|
||||
int opti, boolean dumpAll) {
|
||||
int opti, boolean dumpAll, String dumpPackage) {
|
||||
boolean needSep = false;
|
||||
|
||||
pw.println("ACTIVITY MANAGER BROADCAST STATE (dumpsys activity broadcasts)");
|
||||
if (dumpAll) {
|
||||
if (mRegisteredReceivers.size() > 0) {
|
||||
pw.println(" Registered Receivers:");
|
||||
boolean printed = false;
|
||||
Iterator it = mRegisteredReceivers.values().iterator();
|
||||
while (it.hasNext()) {
|
||||
ReceiverList r = (ReceiverList)it.next();
|
||||
if (dumpPackage != null && (r.app == null ||
|
||||
!dumpPackage.equals(r.app.info.packageName))) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
pw.println(" Registered Receivers:");
|
||||
needSep = true;
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" * "); pw.println(r);
|
||||
r.dump(pw, " ");
|
||||
}
|
||||
}
|
||||
|
||||
pw.println();
|
||||
pw.println(" Receiver Resolver Table:");
|
||||
mReceiverResolver.dump(pw, null, " ", null, false);
|
||||
needSep = true;
|
||||
|
||||
if (mReceiverResolver.dump(pw, needSep ?
|
||||
"\n Receiver Resolver Table:" : " Receiver Resolver Table:",
|
||||
" ", dumpPackage, false)) {
|
||||
needSep = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (mParallelBroadcasts.size() > 0 || mOrderedBroadcasts.size() > 0
|
||||
|| mPendingBroadcast != null) {
|
||||
if (mParallelBroadcasts.size() > 0) {
|
||||
pw.println();
|
||||
pw.println(" Active broadcasts:");
|
||||
}
|
||||
boolean printed = false;
|
||||
for (int i=mParallelBroadcasts.size()-1; i>=0; i--) {
|
||||
BroadcastRecord br = mParallelBroadcasts.get(i);
|
||||
if (dumpPackage != null && !dumpPackage.equals(br.callerPackage)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
needSep = true;
|
||||
pw.println(" Active broadcasts:");
|
||||
}
|
||||
pw.println(" Broadcast #" + i + ":");
|
||||
mParallelBroadcasts.get(i).dump(pw, " ");
|
||||
}
|
||||
if (mOrderedBroadcasts.size() > 0) {
|
||||
pw.println();
|
||||
pw.println(" Active ordered broadcasts:");
|
||||
br.dump(pw, " ");
|
||||
}
|
||||
printed = false;
|
||||
for (int i=mOrderedBroadcasts.size()-1; i>=0; i--) {
|
||||
pw.println(" Serialized Broadcast #" + i + ":");
|
||||
BroadcastRecord br = mOrderedBroadcasts.get(i);
|
||||
if (dumpPackage != null && !dumpPackage.equals(br.callerPackage)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
needSep = true;
|
||||
pw.println(" Active ordered broadcasts:");
|
||||
}
|
||||
pw.println(" Ordered Broadcast #" + i + ":");
|
||||
mOrderedBroadcasts.get(i).dump(pw, " ");
|
||||
}
|
||||
pw.println();
|
||||
pw.println(" Pending broadcast:");
|
||||
if (mPendingBroadcast != null) {
|
||||
mPendingBroadcast.dump(pw, " ");
|
||||
} else {
|
||||
pw.println(" (null)");
|
||||
if (dumpPackage == null || (mPendingBroadcast != null
|
||||
&& dumpPackage.equals(mPendingBroadcast.callerPackage))) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
pw.println(" Pending broadcast:");
|
||||
if (mPendingBroadcast != null) {
|
||||
mPendingBroadcast.dump(pw, " ");
|
||||
} else {
|
||||
pw.println(" (null)");
|
||||
}
|
||||
needSep = true;
|
||||
}
|
||||
needSep = true;
|
||||
}
|
||||
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
pw.println(" Historical broadcasts:");
|
||||
boolean printed = false;
|
||||
for (int i=0; i<MAX_BROADCAST_HISTORY; i++) {
|
||||
BroadcastRecord r = mBroadcastHistory[i];
|
||||
if (r == null) {
|
||||
break;
|
||||
}
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.callerPackage)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
needSep = true;
|
||||
pw.println(" Historical broadcasts:");
|
||||
printed = true;
|
||||
}
|
||||
if (dumpAll) {
|
||||
pw.print(" Historical Broadcast #"); pw.print(i); pw.println(":");
|
||||
r.dump(pw, " ");
|
||||
@@ -8729,8 +8888,11 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
needSep = true;
|
||||
|
||||
if (mStickyBroadcasts != null) {
|
||||
pw.println();
|
||||
if (mStickyBroadcasts != null && dumpPackage == null) {
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
needSep = true;
|
||||
pw.println(" Sticky broadcasts:");
|
||||
StringBuilder sb = new StringBuilder(128);
|
||||
for (Map.Entry<String, ArrayList<Intent>> ent
|
||||
@@ -8770,7 +8932,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
boolean dumpServicesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
|
||||
int opti, boolean dumpAll, boolean dumpClient) {
|
||||
int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) {
|
||||
boolean needSep = false;
|
||||
|
||||
ItemMatcher matcher = new ItemMatcher();
|
||||
@@ -8778,7 +8940,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
|
||||
pw.println("ACTIVITY MANAGER SERVICES (dumpsys activity services)");
|
||||
if (mServices.size() > 0) {
|
||||
pw.println(" Active services:");
|
||||
boolean printed = false;
|
||||
long nowReal = SystemClock.elapsedRealtime();
|
||||
Iterator<ServiceRecord> it = mServices.values().iterator();
|
||||
needSep = false;
|
||||
@@ -8787,6 +8949,13 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if (!matcher.match(r, r.name)) {
|
||||
continue;
|
||||
}
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
pw.println(" Active services:");
|
||||
printed = true;
|
||||
}
|
||||
if (needSep) {
|
||||
pw.println();
|
||||
}
|
||||
@@ -8838,17 +9007,25 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
needSep = true;
|
||||
}
|
||||
}
|
||||
needSep = true;
|
||||
needSep = printed;
|
||||
}
|
||||
|
||||
if (mPendingServices.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
pw.println(" Pending services:");
|
||||
boolean printed = false;
|
||||
for (int i=0; i<mPendingServices.size(); i++) {
|
||||
ServiceRecord r = mPendingServices.get(i);
|
||||
if (!matcher.match(r, r.name)) {
|
||||
continue;
|
||||
}
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Pending services:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" * Pending "); pw.println(r);
|
||||
r.dump(pw, " ");
|
||||
}
|
||||
@@ -8856,13 +9033,21 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
if (mRestartingServices.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
pw.println(" Restarting services:");
|
||||
boolean printed = false;
|
||||
for (int i=0; i<mRestartingServices.size(); i++) {
|
||||
ServiceRecord r = mRestartingServices.get(i);
|
||||
if (!matcher.match(r, r.name)) {
|
||||
continue;
|
||||
}
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Restarting services:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" * Restarting "); pw.println(r);
|
||||
r.dump(pw, " ");
|
||||
}
|
||||
@@ -8870,13 +9055,21 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
if (mStoppingServices.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
pw.println(" Stopping services:");
|
||||
boolean printed = false;
|
||||
for (int i=0; i<mStoppingServices.size(); i++) {
|
||||
ServiceRecord r = mStoppingServices.get(i);
|
||||
if (!matcher.match(r, r.name)) {
|
||||
continue;
|
||||
}
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Stopping services:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" * Stopping "); pw.println(r);
|
||||
r.dump(pw, " ");
|
||||
}
|
||||
@@ -8885,8 +9078,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
|
||||
if (dumpAll) {
|
||||
if (mServiceConnections.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
pw.println(" Connection bindings to services:");
|
||||
boolean printed = false;
|
||||
Iterator<ArrayList<ConnectionRecord>> it
|
||||
= mServiceConnections.values().iterator();
|
||||
while (it.hasNext()) {
|
||||
@@ -8896,6 +9088,16 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if (!matcher.match(cr.binding.service, cr.binding.service.name)) {
|
||||
continue;
|
||||
}
|
||||
if (dumpPackage != null && (cr.binding.client == null
|
||||
|| !dumpPackage.equals(cr.binding.client.info.packageName))) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Connection bindings to services:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" * "); pw.println(cr);
|
||||
cr.dump(pw, " ");
|
||||
}
|
||||
@@ -8908,7 +9110,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
boolean dumpProvidersLocked(FileDescriptor fd, PrintWriter pw, String[] args,
|
||||
int opti, boolean dumpAll) {
|
||||
int opti, boolean dumpAll, String dumpPackage) {
|
||||
boolean needSep = false;
|
||||
|
||||
ItemMatcher matcher = new ItemMatcher();
|
||||
@@ -8916,8 +9118,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
|
||||
pw.println("ACTIVITY MANAGER CONTENT PROVIDERS (dumpsys activity providers)");
|
||||
if (mProvidersByClass.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
pw.println(" Published content providers (by class):");
|
||||
boolean printed = false;
|
||||
Iterator<Map.Entry<ComponentName, ContentProviderRecord>> it
|
||||
= mProvidersByClass.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
@@ -8932,6 +9133,15 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if (!matcher.match(r, comp)) {
|
||||
continue;
|
||||
}
|
||||
if (dumpPackage != null && !dumpPackage.equals(comp.getPackageName())) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Published content providers (by class):");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" * "); pw.print(cls); pw.print(" (");
|
||||
pw.print(comp.flattenToShortString()); pw.println(")");
|
||||
if (dumpAll) {
|
||||
@@ -8950,13 +9160,11 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
}
|
||||
}
|
||||
needSep = true;
|
||||
}
|
||||
|
||||
if (dumpAll) {
|
||||
if (mProvidersByName.size() > 0) {
|
||||
pw.println(" ");
|
||||
pw.println(" Authority to provider mappings:");
|
||||
boolean printed = false;
|
||||
Iterator<Map.Entry<String, ContentProviderRecord>> it
|
||||
= mProvidersByName.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
@@ -8965,25 +9173,42 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
if (!matcher.match(r, r.name)) {
|
||||
continue;
|
||||
}
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.name.getPackageName())) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Authority to provider mappings:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" "); pw.print(e.getKey()); pw.println(":");
|
||||
pw.print(" "); pw.println(r);
|
||||
}
|
||||
needSep = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (mLaunchingProviders.size() > 0) {
|
||||
if (needSep) pw.println(" ");
|
||||
pw.println(" Launching content providers:");
|
||||
boolean printed = false;
|
||||
for (int i=mLaunchingProviders.size()-1; i>=0; i--) {
|
||||
ContentProviderRecord r = mLaunchingProviders.get(i);
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.name.getPackageName())) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
if (needSep) pw.println(" ");
|
||||
needSep = true;
|
||||
pw.println(" Launching content providers:");
|
||||
printed = true;
|
||||
}
|
||||
pw.print(" Launching #"); pw.print(i); pw.print(": ");
|
||||
pw.println(mLaunchingProviders.get(i));
|
||||
pw.println(r);
|
||||
}
|
||||
needSep = true;
|
||||
}
|
||||
|
||||
if (mGrantedUriPermissions.size() > 0) {
|
||||
pw.println();
|
||||
if (needSep) pw.println();
|
||||
needSep = true;
|
||||
pw.println("Granted Uri Permissions:");
|
||||
for (int i=0; i<mGrantedUriPermissions.size(); i++) {
|
||||
int uid = mGrantedUriPermissions.keyAt(i);
|
||||
@@ -9005,16 +9230,24 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
boolean dumpPendingIntentsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
|
||||
int opti, boolean dumpAll) {
|
||||
int opti, boolean dumpAll, String dumpPackage) {
|
||||
boolean needSep = false;
|
||||
|
||||
if (this.mIntentSenderRecords.size() > 0) {
|
||||
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()) {
|
||||
WeakReference<PendingIntentRecord> ref = it.next();
|
||||
PendingIntentRecord rec = ref != null ? ref.get(): null;
|
||||
if (dumpPackage != null && (rec == null
|
||||
|| !dumpPackage.equals(rec.key.packageName))) {
|
||||
continue;
|
||||
}
|
||||
if (!printed) {
|
||||
pw.println("ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents)");
|
||||
printed = true;
|
||||
}
|
||||
needSep = true;
|
||||
if (rec != null) {
|
||||
pw.print(" * "); pw.println(rec);
|
||||
@@ -9031,13 +9264,17 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
|
||||
private static final void dumpHistoryList(FileDescriptor fd, PrintWriter pw, List list,
|
||||
String prefix, String label, boolean complete, boolean brief, boolean client) {
|
||||
String prefix, String label, boolean complete, boolean brief, boolean client,
|
||||
String dumpPackage) {
|
||||
TaskRecord lastTask = null;
|
||||
boolean needNL = false;
|
||||
final String innerPrefix = prefix + " ";
|
||||
final String[] args = new String[0];
|
||||
for (int i=list.size()-1; i>=0; i--) {
|
||||
final ActivityRecord r = (ActivityRecord)list.get(i);
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.packageName)) {
|
||||
continue;
|
||||
}
|
||||
final boolean full = !brief && (complete || !r.isInHistory());
|
||||
if (needNL) {
|
||||
pw.println(" ");
|
||||
@@ -9105,11 +9342,15 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
|
||||
private static final int dumpProcessList(PrintWriter pw,
|
||||
ActivityManagerService service, List list,
|
||||
String prefix, String normalLabel, String persistentLabel) {
|
||||
String prefix, String normalLabel, String persistentLabel,
|
||||
String dumpPackage) {
|
||||
int numPers = 0;
|
||||
final int N = list.size()-1;
|
||||
for (int i=N; i>=0; i--) {
|
||||
ProcessRecord r = (ProcessRecord)list.get(i);
|
||||
if (dumpPackage != null && !dumpPackage.equals(r.info.packageName)) {
|
||||
continue;
|
||||
}
|
||||
pw.println(String.format("%s%s #%2d: %s",
|
||||
prefix, (r.persistent ? persistentLabel : normalLabel),
|
||||
i, r.toString()));
|
||||
@@ -9120,17 +9361,25 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
return numPers;
|
||||
}
|
||||
|
||||
private static final void dumpProcessOomList(PrintWriter pw,
|
||||
private static final boolean dumpProcessOomList(PrintWriter pw,
|
||||
ActivityManagerService service, List<ProcessRecord> origList,
|
||||
String prefix, String normalLabel, String persistentLabel,
|
||||
boolean inclDetails) {
|
||||
boolean inclDetails, String dumpPackage) {
|
||||
|
||||
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)) {
|
||||
continue;
|
||||
}
|
||||
list.add(new Pair<ProcessRecord, Integer>(origList.get(i), i));
|
||||
}
|
||||
|
||||
if (list.size() <= 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
Comparator<Pair<ProcessRecord, Integer>> comparator
|
||||
= new Comparator<Pair<ProcessRecord, Integer>>() {
|
||||
@Override
|
||||
@@ -9153,8 +9402,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
final long curUptime = SystemClock.uptimeMillis();
|
||||
final long uptimeSince = curUptime - service.mLastPowerCheckUptime;
|
||||
|
||||
final int N = list.size()-1;
|
||||
for (int i=N; i>=0; i--) {
|
||||
for (int i=list.size()-1; i>=0; i--) {
|
||||
ProcessRecord r = list.get(i).first;
|
||||
String oomAdj;
|
||||
if (r.setAdj >= ProcessList.HIDDEN_APP_MIN_ADJ) {
|
||||
@@ -9206,8 +9454,8 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
pw.println(String.format("%s%s #%2d: adj=%s/%s%s trm=%2d %s (%s)",
|
||||
prefix, (r.persistent ? persistentLabel : normalLabel),
|
||||
N-list.get(i).second, oomAdj, schedGroup, foreground, r.trimMemoryLevel,
|
||||
r.toShortString(), r.adjType));
|
||||
(origList.size()-1)-list.get(i).second, oomAdj, schedGroup,
|
||||
foreground, r.trimMemoryLevel, r.toShortString(), r.adjType));
|
||||
if (r.adjSource != null || r.adjTarget != null) {
|
||||
pw.print(prefix);
|
||||
pw.print(" ");
|
||||
@@ -9279,6 +9527,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
ArrayList<ProcessRecord> collectProcesses(PrintWriter pw, int start, String[] args) {
|
||||
|
||||
@@ -7947,7 +7947,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
|
||||
if (dumpState.isDumping(DumpState.DUMP_PROVIDERS)) {
|
||||
boolean printedSomething = false;
|
||||
for (PackageParser.Provider p : mProviders.values()) {
|
||||
for (PackageParser.Provider p : mProvidersByComponent.values()) {
|
||||
if (packageName != null && !packageName.equals(p.info.packageName)) {
|
||||
continue;
|
||||
}
|
||||
@@ -7957,8 +7957,23 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
pw.println("Registered ContentProviders:");
|
||||
printedSomething = true;
|
||||
}
|
||||
pw.print(" ["); pw.print(p.info.authority); pw.print("]: ");
|
||||
pw.println(p.toString());
|
||||
pw.print(" "); pw.print(p.getComponentShortName()); pw.println(":");
|
||||
pw.print(" "); pw.println(p.toString());
|
||||
}
|
||||
printedSomething = false;
|
||||
for (Map.Entry<String, PackageParser.Provider> entry : mProviders.entrySet()) {
|
||||
PackageParser.Provider p = entry.getValue();
|
||||
if (packageName != null && !packageName.equals(p.info.packageName)) {
|
||||
continue;
|
||||
}
|
||||
if (!printedSomething) {
|
||||
if (dumpState.onTitlePrinted())
|
||||
pw.println(" ");
|
||||
pw.println("ContentProvider Authorities:");
|
||||
printedSomething = true;
|
||||
}
|
||||
pw.print(" ["); pw.print(entry.getKey()); pw.println("]:");
|
||||
pw.print(" "); pw.println(p.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user