Fix issue #28477006: Add small event log to job scheduler
Added. Also fixed dumpsys output when filtering, to apply the
filter to (almost) all of the output.
Change-Id: Iafb446599ad8fddbe8a766784deff618a6cfdbb7
diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java
index 075a88f..7e26d4b 100644
--- a/services/core/java/com/android/server/job/JobSchedulerService.java
+++ b/services/core/java/com/android/server/job/JobSchedulerService.java
@@ -1477,17 +1477,45 @@
return s.toString();
}
+ static void dumpHelp(PrintWriter pw) {
+ pw.println("Job Scheduler (jobscheduler) dump options:");
+ pw.println(" [-h] [package] ...");
+ pw.println(" -h: print this help");
+ pw.println(" [package] is an optional package name to limit the output to.");
+ }
+
void dumpInternal(final PrintWriter pw, String[] args) {
int filterUid = -1;
if (!ArrayUtils.isEmpty(args)) {
- try {
- filterUid = getContext().getPackageManager().getPackageUid(args[0],
- PackageManager.MATCH_UNINSTALLED_PACKAGES);
- } catch (NameNotFoundException ignored) {
+ int opti = 0;
+ while (opti < args.length) {
+ String arg = args[opti];
+ if ("-h".equals(arg)) {
+ dumpHelp(pw);
+ return;
+ } else if ("-a".equals(arg)) {
+ // Ignore, we always dump all.
+ } else if (arg.length() > 0 && arg.charAt(0) == '-') {
+ pw.println("Unknown option: " + arg);
+ return;
+ } else {
+ break;
+ }
+ opti++;
+ }
+ if (opti < args.length) {
+ String pkg = args[opti];
+ try {
+ filterUid = getContext().getPackageManager().getPackageUid(pkg,
+ PackageManager.MATCH_UNINSTALLED_PACKAGES);
+ } catch (NameNotFoundException ignored) {
+ pw.println("Invalid package: " + pkg);
+ return;
+ }
}
}
- final int filterUidFinal = filterUid;
+ final int filterUidFinal = UserHandle.getAppId(filterUid);
final long now = SystemClock.elapsedRealtime();
synchronized (mLock) {
pw.println("Started users: " + Arrays.toString(mStartedUsers));
@@ -1502,8 +1530,7 @@
pw.println(job.toShortString());
// Skip printing details if the caller requested a filter
- if (filterUidFinal != -1 && job.getUid() != filterUidFinal
- && job.getSourceUid() != filterUidFinal) {
+ if (!job.shouldDump(filterUidFinal)) {
return;
}
@@ -1526,17 +1553,23 @@
}
for (int i=0; i<mControllers.size(); i++) {
pw.println();
- mControllers.get(i).dumpControllerStateLocked(pw);
+ mControllers.get(i).dumpControllerStateLocked(pw, filterUidFinal);
}
pw.println();
pw.println("Uid priority overrides:");
for (int i=0; i< mUidPriorityOverride.size(); i++) {
- pw.print(" "); pw.print(UserHandle.formatUid(mUidPriorityOverride.keyAt(i)));
- pw.print(": "); pw.println(mUidPriorityOverride.valueAt(i));
+ int uid = mUidPriorityOverride.keyAt(i);
+ if (filterUidFinal == -1 || filterUidFinal == UserHandle.getAppId(uid)) {
+ pw.print(" "); pw.print(UserHandle.formatUid(uid));
+ pw.print(": "); pw.println(mUidPriorityOverride.valueAt(i));
+ }
}
pw.println();
- mJobPackageTracker.dump(pw, "");
+ mJobPackageTracker.dump(pw, "", filterUidFinal);
pw.println();
+ if (mJobPackageTracker.dumpHistory(pw, "", filterUidFinal)) {
+ pw.println();
+ }
pw.println("Pending queue:");
for (int i=0; i<mPendingJobs.size(); i++) {
JobStatus job = mPendingJobs.get(i);
@@ -1571,10 +1604,12 @@
}
}
}
- pw.println();
- pw.print("mReadyToRock="); pw.println(mReadyToRock);
- pw.print("mReportedActive="); pw.println(mReportedActive);
- pw.print("mMaxActiveJobs="); pw.println(mMaxActiveJobs);
+ if (filterUid == -1) {
+ pw.println();
+ pw.print("mReadyToRock="); pw.println(mReadyToRock);
+ pw.print("mReportedActive="); pw.println(mReportedActive);
+ pw.print("mMaxActiveJobs="); pw.println(mMaxActiveJobs);
+ }
}
pw.println();
}