summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cmds/dumpsys/dumpsys.cpp24
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java801
2 files changed, 446 insertions, 379 deletions
diff --git a/cmds/dumpsys/dumpsys.cpp b/cmds/dumpsys/dumpsys.cpp
index 945a690..fdc5d5d 100644
--- a/cmds/dumpsys/dumpsys.cpp
+++ b/cmds/dumpsys/dumpsys.cpp
@@ -51,22 +51,26 @@ int main(int argc, char* const argv[])
const size_t N = services.size();
- // first print a list of the current services
- aout << "Currently running services:" << endl;
-
- for (size_t i=0; i<N; i++) {
- sp<IBinder> service = sm->checkService(services[i]);
- if (service != NULL) {
- aout << " " << services[i] << endl;
+ if (N > 1) {
+ // first print a list of the current services
+ aout << "Currently running services:" << endl;
+
+ for (size_t i=0; i<N; i++) {
+ sp<IBinder> service = sm->checkService(services[i]);
+ if (service != NULL) {
+ aout << " " << services[i] << endl;
+ }
}
}
for (size_t i=0; i<N; i++) {
sp<IBinder> service = sm->checkService(services[i]);
if (service != NULL) {
- aout << "------------------------------------------------------------"
- "-------------------" << endl;
- aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
+ if (N > 1) {
+ aout << "------------------------------------------------------------"
+ "-------------------" << endl;
+ aout << "DUMP OF SERVICE " << services[i] << ":" << endl;
+ }
int err = service->dump(STDOUT_FILENO, args);
if (err != 0) {
aerr << "Error dumping service info: (" << strerror(err)
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 31edaf2..bf436b6 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -1210,10 +1210,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
if (MONITOR_CPU_USAGE) {
ServiceManager.addService("cpuinfo", new CpuBinder(m));
}
- ServiceManager.addService("activity.broadcasts", new BroadcastsBinder(m));
- ServiceManager.addService("activity.services", new ServicesBinder(m));
- ServiceManager.addService("activity.senders", new SendersBinder(m));
- ServiceManager.addService("activity.providers", new ProvidersBinder(m));
ServiceManager.addService("permission", new PermissionController(m));
ApplicationInfo info =
@@ -1321,54 +1317,6 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
}
- static class BroadcastsBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- BroadcastsBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpBroadcasts(pw);
- }
- }
-
- static class ServicesBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- ServicesBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpServices(pw);
- }
- }
-
- static class SendersBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- SendersBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpSenders(pw);
- }
- }
-
- static class ProvidersBinder extends Binder {
- ActivityManagerService mActivityManagerService;
- ProvidersBinder(ActivityManagerService activityManagerService) {
- mActivityManagerService = activityManagerService;
- }
-
- @Override
- protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- mActivityManagerService.dumpProviders(pw);
- }
- }
-
static class MemBinder extends Binder {
ActivityManagerService mActivityManagerService;
MemBinder(ActivityManagerService activityManagerService) {
@@ -9151,69 +9099,190 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
@Override
protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
+ if (checkCallingPermission(android.Manifest.permission.DUMP)
+ != PackageManager.PERMISSION_GRANTED) {
+ pw.println("Permission Denial: can't dump ActivityManager from from pid="
+ + Binder.getCallingPid()
+ + ", uid=" + Binder.getCallingUid()
+ + " without permission "
+ + android.Manifest.permission.DUMP);
+ return;
+ }
+
+ boolean dumpAll = false;
+
+ int opti = 0;
+ while (opti < args.length) {
+ String opt = args[opti];
+ if (opt == null || opt.length() <= 0 || opt.charAt(0) != '-') {
+ break;
+ }
+ opti++;
+ if ("-a".equals(opt)) {
+ dumpAll = true;
+ } else if ("-h".equals(opt)) {
+ pw.println("Activity manager dump options:");
+ pw.println(" [-a] [h- [cmd] ...");
+ pw.println(" cmd may be one of:");
+ pw.println(" activities: activity stack state");
+ pw.println(" broadcasts: broadcast state");
+ pw.println(" intents: pending intent state");
+ pw.println(" processes: process state");
+ pw.println(" providers: content provider state");
+ pw.println(" services: service state");
+ pw.println(" service [name]: service client-side state");
return;
+ } else {
+ pw.println("Unknown argument: " + opt + "; use -h for help");
}
- if (args.length != 0 && "service".equals(args[0])) {
- dumpService(fd, pw, args);
+ }
+
+ // Is the caller requesting to dump a particular piece of data?
+ if (opti < args.length) {
+ String cmd = args[opti];
+ opti++;
+ if ("activities".equals(cmd) || "a".equals(cmd)) {
+ synchronized (this) {
+ dumpActivitiesLocked(fd, pw, args, opti, true, true);
+ }
+ return;
+ } else if ("broadcasts".equals(cmd) || "b".equals(cmd)) {
+ synchronized (this) {
+ dumpBroadcastsLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("intents".equals(cmd) || "i".equals(cmd)) {
+ synchronized (this) {
+ dumpPendingIntentsLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("processes".equals(cmd) || "p".equals(cmd)) {
+ synchronized (this) {
+ dumpProcessesLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("providers".equals(cmd) || "prov".equals(cmd)) {
+ synchronized (this) {
+ dumpProvidersLocked(fd, pw, args, opti, true);
+ }
+ return;
+ } else if ("service".equals(cmd)) {
+ dumpService(fd, pw, args, opti, true);
+ return;
+ } else if ("services".equals(cmd) || "s".equals(cmd)) {
+ synchronized (this) {
+ dumpServicesLocked(fd, pw, args, opti, true);
+ }
return;
}
- pw.println("Activities in Current Activity Manager State:");
- dumpHistoryList(pw, mHistory, " ", "Hist", true);
- pw.println(" ");
- pw.println(" Running activities (most recent first):");
- dumpHistoryList(pw, mLRUActivities, " ", "Run", false);
- if (mWaitingVisibleActivities.size() > 0) {
+ }
+
+ // No piece of data specified, dump everything.
+ synchronized (this) {
+ boolean needSep;
+ if (dumpAll) {
+ pw.println("Providers in Current Activity Manager State:");
+ }
+ needSep = dumpProvidersLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
pw.println(" ");
- pw.println(" Activities waiting for another to become visible:");
- dumpHistoryList(pw, mWaitingVisibleActivities, " ", "Wait", false);
}
- if (mStoppingActivities.size() > 0) {
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Broadcasts in Current Activity Manager State:");
+ }
+ needSep = dumpBroadcastsLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
pw.println(" ");
- pw.println(" Activities waiting to stop:");
- dumpHistoryList(pw, mStoppingActivities, " ", "Stop", false);
}
- if (mFinishingActivities.size() > 0) {
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Services in Current Activity Manager State:");
+ }
+ needSep = dumpServicesLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
pw.println(" ");
- pw.println(" Activities waiting to finish:");
- dumpHistoryList(pw, mFinishingActivities, " ", "Fin", false);
}
-
- pw.println(" ");
- pw.println(" mPausingActivity: " + mPausingActivity);
- pw.println(" mResumedActivity: " + mResumedActivity);
- pw.println(" mFocusedActivity: " + mFocusedActivity);
- pw.println(" mLastPausedActivity: " + mLastPausedActivity);
-
- if (mRecentTasks.size() > 0) {
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("PendingIntents in Current Activity Manager State:");
+ }
+ needSep = dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll);
+ if (needSep) {
pw.println(" ");
- pw.println("Recent tasks in Current Activity Manager State:");
-
- final int N = mRecentTasks.size();
- for (int i=0; i<N; i++) {
- TaskRecord tr = mRecentTasks.get(i);
- pw.print(" * Recent #"); pw.print(i); pw.print(": ");
- pw.println(tr);
- mRecentTasks.get(i).dump(pw, " ");
- }
}
-
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Activities in Current Activity Manager State:");
+ }
+ needSep = dumpActivitiesLocked(fd, pw, args, opti, dumpAll, !dumpAll);
+ if (needSep) {
+ pw.println(" ");
+ }
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ pw.println("Processes in Current Activity Manager State:");
+ }
+ dumpProcessesLocked(fd, pw, args, opti, dumpAll);
+ }
+ }
+
+ boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll, boolean needHeader) {
+ if (needHeader) {
+ pw.println(" Activity stack:");
+ }
+ dumpHistoryList(pw, mHistory, " ", "Hist", true);
+ pw.println(" ");
+ pw.println(" Running activities (most recent first):");
+ dumpHistoryList(pw, mLRUActivities, " ", "Run", false);
+ if (mWaitingVisibleActivities.size() > 0) {
pw.println(" ");
- pw.println(" mCurTask: " + mCurTask);
-
+ pw.println(" Activities waiting for another to become visible:");
+ dumpHistoryList(pw, mWaitingVisibleActivities, " ", "Wait", false);
+ }
+ if (mStoppingActivities.size() > 0) {
+ pw.println(" ");
+ pw.println(" Activities waiting to stop:");
+ dumpHistoryList(pw, mStoppingActivities, " ", "Stop", false);
+ }
+ if (mFinishingActivities.size() > 0) {
pw.println(" ");
- pw.println("Processes in Current Activity Manager State:");
+ pw.println(" Activities waiting to finish:");
+ dumpHistoryList(pw, mFinishingActivities, " ", "Fin", false);
+ }
+
+ pw.println(" ");
+ pw.println(" mPausingActivity: " + mPausingActivity);
+ pw.println(" mResumedActivity: " + mResumedActivity);
+ pw.println(" mFocusedActivity: " + mFocusedActivity);
+ pw.println(" mLastPausedActivity: " + mLastPausedActivity);
- boolean needSep = false;
- int numPers = 0;
+ if (dumpAll && mRecentTasks.size() > 0) {
+ pw.println(" ");
+ pw.println("Recent tasks in Current Activity Manager State:");
+
+ final int N = mRecentTasks.size();
+ for (int i=0; i<N; i++) {
+ TaskRecord tr = mRecentTasks.get(i);
+ pw.print(" * Recent #"); pw.print(i); pw.print(": ");
+ pw.println(tr);
+ mRecentTasks.get(i).dump(pw, " ");
+ }
+ }
+
+ pw.println(" ");
+ pw.println(" mCurTask: " + mCurTask);
+
+ return true;
+ }
+
+ boolean dumpProcessesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+ int numPers = 0;
+ if (dumpAll) {
for (SparseArray<ProcessRecord> procs : mProcessNames.getMap().values()) {
final int NA = procs.size();
for (int ia=0; ia<NA; ia++) {
@@ -9231,142 +9300,151 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
}
}
-
- if (mLruProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Running processes (most recent first):");
- dumpProcessList(pw, this, mLruProcesses, " ",
- "App ", "PERS", true);
- needSep = true;
- }
+ }
+
+ if (mLruProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Running processes (most recent first):");
+ dumpProcessList(pw, this, mLruProcesses, " ",
+ "App ", "PERS", true);
+ needSep = true;
+ }
- 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));
- }
- }
- }
-
- if (mForegroundProcesses.size() > 0) {
+ synchronized (mPidsSelfLocked) {
+ if (mPidsSelfLocked.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));
+ 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));
}
}
-
- if (mPersistentStartingProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Persisent processes that are starting:");
- dumpProcessList(pw, this, mPersistentStartingProcesses, " ",
- "Starting Norm", "Restarting PERS", false);
+ }
+
+ 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));
}
+ }
+
+ if (mPersistentStartingProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Persisent processes that are starting:");
+ dumpProcessList(pw, this, mPersistentStartingProcesses, " ",
+ "Starting Norm", "Restarting PERS", false);
+ }
- if (mStartingProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are starting:");
- dumpProcessList(pw, this, mStartingProcesses, " ",
- "Starting Norm", "Starting PERS", false);
- }
+ if (mStartingProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are starting:");
+ dumpProcessList(pw, this, mStartingProcesses, " ",
+ "Starting Norm", "Starting PERS", false);
+ }
- if (mRemovedProcesses.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are being removed:");
- dumpProcessList(pw, this, mRemovedProcesses, " ",
- "Removed Norm", "Removed PERS", false);
- }
-
- if (mProcessesOnHold.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are on old until the system is ready:");
- dumpProcessList(pw, this, mProcessesOnHold, " ",
- "OnHold Norm", "OnHold PERS", false);
- }
+ if (mRemovedProcesses.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are being removed:");
+ dumpProcessList(pw, this, mRemovedProcesses, " ",
+ "Removed Norm", "Removed PERS", false);
+ }
+
+ if (mProcessesOnHold.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are on old until the system is ready:");
+ dumpProcessList(pw, this, mProcessesOnHold, " ",
+ "OnHold Norm", "OnHold PERS", false);
+ }
- if (mProcessesToGc.size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Processes that are waiting to GC:");
- long now = SystemClock.uptimeMillis();
- for (int i=0; i<mProcessesToGc.size(); i++) {
- ProcessRecord proc = mProcessesToGc.get(i);
- pw.print(" Process "); pw.println(proc);
- pw.print(" lowMem="); pw.print(proc.reportLowMemory);
- pw.print(", last gced=");
- pw.print(now-proc.lastRequestedGc);
- pw.print(" ms ago, last lowMem=");
- pw.print(now-proc.lastLowMemory);
- pw.println(" ms ago");
-
- }
+ if (mProcessesToGc.size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Processes that are waiting to GC:");
+ long now = SystemClock.uptimeMillis();
+ for (int i=0; i<mProcessesToGc.size(); i++) {
+ ProcessRecord proc = mProcessesToGc.get(i);
+ pw.print(" Process "); pw.println(proc);
+ pw.print(" lowMem="); pw.print(proc.reportLowMemory);
+ pw.print(", last gced=");
+ pw.print(now-proc.lastRequestedGc);
+ pw.print(" ms ago, last lowMem=");
+ pw.print(now-proc.lastLowMemory);
+ pw.println(" ms ago");
+
}
-
- if (mProcessCrashTimes.getMap().size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Time since processes crashed:");
- long now = SystemClock.uptimeMillis();
- for (Map.Entry<String, SparseArray<Long>> procs
- : mProcessCrashTimes.getMap().entrySet()) {
- 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));
- pw.print(": last crashed ");
- pw.print((now-uids.valueAt(i)));
- pw.println(" ms ago");
- }
+ }
+
+ if (mProcessCrashTimes.getMap().size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Time since processes crashed:");
+ long now = SystemClock.uptimeMillis();
+ for (Map.Entry<String, SparseArray<Long>> procs
+ : mProcessCrashTimes.getMap().entrySet()) {
+ 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));
+ pw.print(": last crashed ");
+ pw.print((now-uids.valueAt(i)));
+ pw.println(" ms ago");
}
}
+ }
- if (mBadProcesses.getMap().size() > 0) {
- if (needSep) pw.println(" ");
- needSep = true;
- pw.println(" Bad processes:");
- for (Map.Entry<String, SparseArray<Long>> procs
- : mBadProcesses.getMap().entrySet()) {
- 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));
- pw.print(": crashed at time ");
- pw.println(uids.valueAt(i));
- }
+ if (mBadProcesses.getMap().size() > 0) {
+ if (needSep) pw.println(" ");
+ needSep = true;
+ pw.println(" Bad processes:");
+ for (Map.Entry<String, SparseArray<Long>> procs
+ : mBadProcesses.getMap().entrySet()) {
+ 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));
+ pw.print(": crashed at time ");
+ pw.println(uids.valueAt(i));
}
}
+ }
- pw.println(" ");
+ pw.println(" ");
+ pw.println(" mHomeProcess: " + mHomeProcess);
+ pw.println(" mConfiguration: " + mConfiguration);
+ pw.println(" mSleeping=" + mSleeping + " mShuttingDown=" + mShuttingDown);
+ if (mDebugApp != null || mOrigDebugApp != null || mDebugTransient
+ || mOrigWaitForDebugger) {
+ pw.println(" mDebugApp=" + mDebugApp + "/orig=" + mOrigDebugApp
+ + " mDebugTransient=" + mDebugTransient
+ + " mOrigWaitForDebugger=" + mOrigWaitForDebugger);
+ }
+ if (mAlwaysFinishActivities || mController != null) {
+ pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
+ + " mController=" + mController);
+ }
+ if (dumpAll) {
pw.println(" Total persistent processes: " + numPers);
- pw.println(" mHomeProcess: " + mHomeProcess);
- pw.println(" mConfiguration: " + mConfiguration);
pw.println(" mStartRunning=" + mStartRunning
+ " mSystemReady=" + mSystemReady
+ " mBooting=" + mBooting
+ " mBooted=" + mBooted
+ " mFactoryTest=" + mFactoryTest);
- pw.println(" mSleeping=" + mSleeping + " mShuttingDown=" + mShuttingDown);
pw.println(" mGoingToSleep=" + mGoingToSleep);
pw.println(" mLaunchingActivity=" + mLaunchingActivity);
- pw.println(" mDebugApp=" + mDebugApp + "/orig=" + mOrigDebugApp
- + " mDebugTransient=" + mDebugTransient
- + " mOrigWaitForDebugger=" + mOrigWaitForDebugger);
- pw.println(" mAlwaysFinishActivities=" + mAlwaysFinishActivities
- + " mController=" + mController);
}
+
+ return true;
}
/**
@@ -9377,20 +9455,22 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
* - the first arg isn't the flattened component name of an existing service:
* dump all services whose component contains the first arg as a substring
*/
- protected void dumpService(FileDescriptor fd, PrintWriter pw, String[] args) {
+ protected void dumpService(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
String[] newArgs;
String componentNameString;
ServiceRecord r;
- if (args.length == 1) {
+ if (opti <= args.length) {
componentNameString = null;
newArgs = EMPTY_STRING_ARRAY;
r = null;
} else {
- componentNameString = args[1];
+ componentNameString = args[opti];
+ opti++;
ComponentName componentName = ComponentName.unflattenFromString(componentNameString);
r = componentName != null ? mServices.get(componentName) : null;
- newArgs = new String[args.length - 2];
- if (args.length > 2) System.arraycopy(args, 2, newArgs, 0, args.length - 2);
+ newArgs = new String[args.length - opti];
+ if (args.length > 2) System.arraycopy(args, opti, newArgs, 0, args.length - opti);
}
if (r != null) {
@@ -9424,19 +9504,11 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
}
- void dumpBroadcasts(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
- pw.println("Broadcasts in Current Activity Manager State:");
-
+ boolean dumpBroadcastsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+
+ if (dumpAll) {
if (mRegisteredReceivers.size() > 0) {
pw.println(" ");
pw.println(" Registered Receivers:");
@@ -9447,38 +9519,42 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
r.dump(pw, " ");
}
}
-
+
pw.println(" ");
pw.println("Receiver Resolver Table:");
mReceiverResolver.dump(pw, " ");
-
- if (mParallelBroadcasts.size() > 0 || mOrderedBroadcasts.size() > 0
- || mPendingBroadcast != null) {
- if (mParallelBroadcasts.size() > 0) {
- pw.println(" ");
- pw.println(" Active broadcasts:");
- }
- for (int i=mParallelBroadcasts.size()-1; i>=0; i--) {
- pw.println(" Broadcast #" + i + ":");
- mParallelBroadcasts.get(i).dump(pw, " ");
- }
- if (mOrderedBroadcasts.size() > 0) {
- pw.println(" ");
- pw.println(" Active serialized broadcasts:");
- }
- for (int i=mOrderedBroadcasts.size()-1; i>=0; i--) {
- pw.println(" Serialized Broadcast #" + i + ":");
- mOrderedBroadcasts.get(i).dump(pw, " ");
- }
+ needSep = true;
+ }
+
+ if (mParallelBroadcasts.size() > 0 || mOrderedBroadcasts.size() > 0
+ || mPendingBroadcast != null) {
+ if (mParallelBroadcasts.size() > 0) {
pw.println(" ");
- pw.println(" Pending broadcast:");
- if (mPendingBroadcast != null) {
- mPendingBroadcast.dump(pw, " ");
- } else {
- pw.println(" (null)");
- }
+ pw.println(" Active broadcasts:");
+ }
+ for (int i=mParallelBroadcasts.size()-1; i>=0; i--) {
+ pw.println(" Broadcast #" + i + ":");
+ mParallelBroadcasts.get(i).dump(pw, " ");
+ }
+ if (mOrderedBroadcasts.size() > 0) {
+ pw.println(" ");
+ pw.println(" Active serialized broadcasts:");
+ }
+ for (int i=mOrderedBroadcasts.size()-1; i>=0; i--) {
+ pw.println(" Serialized Broadcast #" + i + ":");
+ mOrderedBroadcasts.get(i).dump(pw, " ");
}
+ pw.println(" ");
+ pw.println(" Pending broadcast:");
+ if (mPendingBroadcast != null) {
+ mPendingBroadcast.dump(pw, " ");
+ } else {
+ pw.println(" (null)");
+ }
+ needSep = true;
+ }
+ if (dumpAll) {
pw.println(" ");
pw.println(" Historical broadcasts:");
for (int i=0; i<MAX_BROADCAST_HISTORY; i++) {
@@ -9489,54 +9565,50 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
pw.println(" Historical Broadcast #" + i + ":");
r.dump(pw, " ");
}
-
+ needSep = true;
+ }
+
+ if (mStickyBroadcasts != null) {
pw.println(" ");
- pw.println(" mBroadcastsScheduled=" + mBroadcastsScheduled);
- if (mStickyBroadcasts != null) {
- pw.println(" ");
- pw.println(" Sticky broadcasts:");
- StringBuilder sb = new StringBuilder(128);
- for (Map.Entry<String, ArrayList<Intent>> ent
- : mStickyBroadcasts.entrySet()) {
- pw.print(" * Sticky action "); pw.print(ent.getKey());
- pw.println(":");
- ArrayList<Intent> intents = ent.getValue();
- final int N = intents.size();
- for (int i=0; i<N; i++) {
- sb.setLength(0);
- sb.append(" Intent: ");
- intents.get(i).toShortString(sb, true, false);
- pw.println(sb.toString());
- Bundle bundle = intents.get(i).getExtras();
- if (bundle != null) {
- pw.print(" ");
- pw.println(bundle.toString());
- }
+ pw.println(" Sticky broadcasts:");
+ StringBuilder sb = new StringBuilder(128);
+ for (Map.Entry<String, ArrayList<Intent>> ent
+ : mStickyBroadcasts.entrySet()) {
+ pw.print(" * Sticky action "); pw.print(ent.getKey());
+ pw.println(":");
+ ArrayList<Intent> intents = ent.getValue();
+ final int N = intents.size();
+ for (int i=0; i<N; i++) {
+ sb.setLength(0);
+ sb.append(" Intent: ");
+ intents.get(i).toShortString(sb, true, false);
+ pw.println(sb.toString());
+ Bundle bundle = intents.get(i).getExtras();
+ if (bundle != null) {
+ pw.print(" ");
+ pw.println(bundle.toString());
}
}
}
-
+ needSep = true;
+ }
+
+ if (dumpAll) {
pw.println(" ");
+ pw.println(" mBroadcastsScheduled=" + mBroadcastsScheduled);
pw.println(" mHandler:");
mHandler.dump(new PrintWriterPrinter(pw), " ");
+ needSep = true;
}
+
+ return needSep;
}
- void dumpServices(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
- pw.println("Services in Current Activity Manager State:");
-
- boolean needSep = false;
+ boolean dumpServicesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+ if (dumpAll) {
if (mServices.size() > 0) {
pw.println(" Active services:");
Iterator<ServiceRecord> it = mServices.values().iterator();
@@ -9547,40 +9619,42 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
needSep = true;
}
+ }
- if (mPendingServices.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Pending services:");
- for (int i=0; i<mPendingServices.size(); i++) {
- ServiceRecord r = mPendingServices.get(i);
- pw.print(" * Pending "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
+ if (mPendingServices.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Pending services:");
+ for (int i=0; i<mPendingServices.size(); i++) {
+ ServiceRecord r = mPendingServices.get(i);
+ pw.print(" * Pending "); pw.println(r);
+ r.dump(pw, " ");
}
+ needSep = true;
+ }
- if (mRestartingServices.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Restarting services:");
- for (int i=0; i<mRestartingServices.size(); i++) {
- ServiceRecord r = mRestartingServices.get(i);
- pw.print(" * Restarting "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
+ if (mRestartingServices.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Restarting services:");
+ for (int i=0; i<mRestartingServices.size(); i++) {
+ ServiceRecord r = mRestartingServices.get(i);
+ pw.print(" * Restarting "); pw.println(r);
+ r.dump(pw, " ");
}
+ needSep = true;
+ }
- if (mStoppingServices.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Stopping services:");
- for (int i=0; i<mStoppingServices.size(); i++) {
- ServiceRecord r = mStoppingServices.get(i);
- pw.print(" * Stopping "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
+ if (mStoppingServices.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Stopping services:");
+ for (int i=0; i<mStoppingServices.size(); i++) {
+ ServiceRecord r = mStoppingServices.get(i);
+ pw.print(" * Stopping "); pw.println(r);
+ r.dump(pw, " ");
}
+ needSep = true;
+ }
+ if (dumpAll) {
if (mServiceConnections.size() > 0) {
if (needSep) pw.println(" ");
pw.println(" Connection bindings to services:");
@@ -9591,26 +9665,18 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
pw.print(" * "); pw.println(r);
r.dump(pw, " ");
}
+ needSep = true;
}
}
+
+ return needSep;
}
- void dumpProviders(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
-
- pw.println("Content Providers in Current Activity Manager State:");
-
- boolean needSep = false;
+ boolean dumpProvidersLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+ if (dumpAll) {
if (mProvidersByClass.size() > 0) {
if (needSep) pw.println(" ");
pw.println(" Published content providers (by class):");
@@ -9623,7 +9689,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
needSep = true;
}
-
+
if (mProvidersByName.size() > 0) {
pw.println(" ");
pw.println(" Authority to provider mappings:");
@@ -9636,55 +9702,50 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
needSep = true;
}
+ }
- if (mLaunchingProviders.size() > 0) {
- if (needSep) pw.println(" ");
- pw.println(" Launching content providers:");
- for (int i=mLaunchingProviders.size()-1; i>=0; i--) {
- pw.print(" Launching #"); pw.print(i); pw.print(": ");
- pw.println(mLaunchingProviders.get(i));
- }
- needSep = true;
+ if (mLaunchingProviders.size() > 0) {
+ if (needSep) pw.println(" ");
+ pw.println(" Launching content providers:");
+ for (int i=mLaunchingProviders.size()-1; i>=0; i--) {
+ pw.print(" Launching #"); pw.print(i); pw.print(": ");
+ pw.println(mLaunchingProviders.get(i));
}
+ needSep = true;
+ }
- if (mGrantedUriPermissions.size() > 0) {
- pw.println();
- pw.println("Granted Uri Permissions:");
- for (int i=0; i<mGrantedUriPermissions.size(); i++) {
- int uid = mGrantedUriPermissions.keyAt(i);
- HashMap<Uri, UriPermission> perms
- = mGrantedUriPermissions.valueAt(i);
- pw.print(" * UID "); pw.print(uid);
- pw.println(" holds:");
- for (UriPermission perm : perms.values()) {
- pw.print(" "); pw.println(perm);
- perm.dump(pw, " ");
- }
+ if (mGrantedUriPermissions.size() > 0) {
+ pw.println();
+ pw.println("Granted Uri Permissions:");
+ for (int i=0; i<mGrantedUriPermissions.size(); i++) {
+ int uid = mGrantedUriPermissions.keyAt(i);
+ HashMap<Uri, UriPermission> perms
+ = mGrantedUriPermissions.valueAt(i);
+ pw.print(" * UID "); pw.print(uid);
+ pw.println(" holds:");
+ for (UriPermission perm : perms.values()) {
+ pw.print(" "); pw.println(perm);
+ perm.dump(pw, " ");
}
}
+ needSep = true;
}
+
+ return needSep;
}
- void dumpSenders(PrintWriter pw) {
- synchronized (this) {
- if (checkCallingPermission(android.Manifest.permission.DUMP)
- != PackageManager.PERMISSION_GRANTED) {
- pw.println("Permission Denial: can't dump ActivityManager from from pid="
- + Binder.getCallingPid()
- + ", uid=" + Binder.getCallingUid()
- + " without permission "
- + android.Manifest.permission.DUMP);
- return;
- }
-
- pw.println("Pending Intents in Current Activity Manager State:");
-
+ boolean dumpPendingIntentsLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll) {
+ boolean needSep = false;
+
+ if (dumpAll) {
if (this.mIntentSenderRecords.size() > 0) {
Iterator<WeakReference<PendingIntentRecord>> it
= mIntentSenderRecords.values().iterator();
while (it.hasNext()) {
WeakReference<PendingIntentRecord> ref = it.next();
PendingIntentRecord rec = ref != null ? ref.get(): null;
+ needSep = true;
if (rec != null) {
pw.print(" * "); pw.println(rec);
rec.dump(pw, " ");
@@ -9694,6 +9755,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
}
}
}
+
+ return needSep;
}
private static final void dumpHistoryList(PrintWriter pw, List list,