From ab8a67fa78fc8e03ae8eb73d633d3e5e70867f02 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Tue, 20 Jun 2017 12:20:34 -0700 Subject: Update jobscheduler dumpsys - Show job IDs in the history. - Show "last successful/failed run time" for existing jobs. Bug 62052247 Test: Manual test with dumpsys jobscheduler Change-Id: Ic0cdab58e4c5b454a3df8300607e9c24c4b1f438 --- .../com/android/server/job/JobPackageTracker.java | 24 +++++++--- .../android/server/job/JobSchedulerService.java | 7 ++- .../core/java/com/android/server/job/JobStore.java | 16 ++++++- .../android/server/job/controllers/JobStatus.java | 55 +++++++++++++++++++--- .../src/com/android/server/job/JobStoreTest.java | 3 +- 5 files changed, 87 insertions(+), 18 deletions(-) diff --git a/services/core/java/com/android/server/job/JobPackageTracker.java b/services/core/java/com/android/server/job/JobPackageTracker.java index 8ad1beace643..ba922959213c 100644 --- a/services/core/java/com/android/server/job/JobPackageTracker.java +++ b/services/core/java/com/android/server/job/JobPackageTracker.java @@ -39,19 +39,23 @@ public final class JobPackageTracker { public static final int EVENT_NULL = 0; public static final int EVENT_START_JOB = 1; public static final int EVENT_STOP_JOB = 2; + public static final int EVENT_START_PERIODIC_JOB = 3; + public static final int EVENT_STOP_PERIODIC_JOB = 4; private final RingBufferIndices mEventIndices = new RingBufferIndices(EVENT_BUFFER_SIZE); private final int[] mEventCmds = new int[EVENT_BUFFER_SIZE]; private final long[] mEventTimes = new long[EVENT_BUFFER_SIZE]; private final int[] mEventUids = new int[EVENT_BUFFER_SIZE]; private final String[] mEventTags = new String[EVENT_BUFFER_SIZE]; + private final int[] mEventJobIds = new int[EVENT_BUFFER_SIZE]; - public void addEvent(int cmd, int uid, String tag) { + public void addEvent(int cmd, int uid, String tag, int jobId) { int index = mEventIndices.add(); mEventCmds[index] = cmd; mEventTimes[index] = SystemClock.elapsedRealtime(); mEventUids[index] = uid; mEventTags[index] = tag; + mEventJobIds[index] = jobId; } DataSet mCurDataSet = new DataSet(); @@ -365,7 +369,8 @@ public final class JobPackageTracker { } else { mCurDataSet.incActive(job.getSourceUid(), job.getSourcePackageName(), now); } - addEvent(EVENT_START_JOB, job.getSourceUid(), job.getBatteryName()); + addEvent(job.getJob().isPeriodic() ? EVENT_START_PERIODIC_JOB : EVENT_START_JOB, + job.getSourceUid(), job.getBatteryName(), job.getJobId()); } public void noteInactive(JobStatus job) { @@ -376,7 +381,8 @@ public final class JobPackageTracker { mCurDataSet.decActive(job.getSourceUid(), job.getSourcePackageName(), now); } rebatchIfNeeded(now); - addEvent(EVENT_STOP_JOB, job.getSourceUid(), job.getBatteryName()); + addEvent(job.getJob().isPeriodic() ? EVENT_STOP_JOB : EVENT_STOP_PERIODIC_JOB, + job.getSourceUid(), job.getBatteryName(), job.getJobId()); } public void noteConcurrency(int totalActive, int fgActive) { @@ -448,16 +454,20 @@ public final class JobPackageTracker { } final String label; switch (mEventCmds[index]) { - case EVENT_START_JOB: label = "START"; break; - case EVENT_STOP_JOB: label = " STOP"; break; - default: label = " ??"; break; + case EVENT_START_JOB: label = " START"; break; + case EVENT_STOP_JOB: label = " STOP"; break; + case EVENT_START_PERIODIC_JOB: label = "START-P"; break; + case EVENT_STOP_PERIODIC_JOB: label = " STOP-P"; break; + default: label = " ??"; break; } pw.print(prefix); TimeUtils.formatDuration(mEventTimes[index]-now, pw, TimeUtils.HUNDRED_DAY_FIELD_LEN); pw.print(" "); pw.print(label); - pw.print(": "); + pw.print(": #"); UserHandle.formatUid(pw, uid); + pw.print("/"); + pw.print(mEventJobIds[index]); pw.print(" "); pw.println(mEventTags[index]); } diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index b8fe88439c2d..98c65fd487ca 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -1122,7 +1122,8 @@ public final class JobSchedulerService extends com.android.server.SystemService delayMillis = Math.min(delayMillis, JobInfo.MAX_BACKOFF_DELAY_MILLIS); JobStatus newJob = new JobStatus(failureToReschedule, elapsedNowMillis + delayMillis, - JobStatus.NO_LATEST_RUNTIME, backoffAttempts); + JobStatus.NO_LATEST_RUNTIME, backoffAttempts, + failureToReschedule.getLastSuccessfulRunTime(), System.currentTimeMillis()); for (int ic=0; ic