diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java index 5bf2eb942a6b142c11d48f95f1c497cded51e566..6550f26436d420a848f6d2c996e0ca8e42e3a242 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java @@ -1518,8 +1518,8 @@ class JobConcurrencyManager { @WorkType final int workType) { final List<StateController> controllers = mService.mControllers; final int numControllers = controllers.size(); - final PowerManager.WakeLock wl = - mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, jobStatus.getTag()); + final PowerManager.WakeLock wl = mPowerManager.newWakeLock( + PowerManager.PARTIAL_WAKE_LOCK, jobStatus.getWakelockTag()); wl.setWorkSource(mService.deriveWorkSource( jobStatus.getSourceUid(), jobStatus.getSourcePackageName())); wl.setReferenceCounted(false); diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java index bbe1485ddcd49d2940256bd2498920da67b4d24c..592aff80f618cc669c4908f0be3455208ec1d883 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -5512,7 +5512,6 @@ public class JobSchedulerService extends com.android.server.SystemService pw.print("Evaluated bias: "); pw.println(JobInfo.getBiasString(bias)); - pw.print("Tag: "); pw.println(job.getTag()); pw.print("Enq: "); TimeUtils.formatDuration(job.madePending - nowUptime, pw); pw.decreaseIndent(); diff --git a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java index f47766ed0393fc42118510b1f6ed6412ae6934bb..79653f0e0a918427f37bdd8ab92cb51b1be4d657 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java @@ -398,7 +398,8 @@ public final class JobServiceContext implements ServiceConnection { // it was inflated from disk with not-yet-coherent delay/deadline bounds. job.clearPersistedUtcTimes(); - mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, job.getTag()); + mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, + job.getWakelockTag()); mWakeLock.setWorkSource( mService.deriveWorkSource(job.getSourceUid(), job.getSourcePackageName())); mWakeLock.setReferenceCounted(false); diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java index 458ff35c30ee975222e47ff1a2c0728e470c3116..1fb54d59179b3e112e1babe779a6e2ca576bf8ee 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java @@ -253,7 +253,12 @@ public final class JobStatus { /** An ID that can be used to uniquely identify the job when logging statsd metrics. */ private final long mLoggingJobId; - final String tag; + /** + * Tag to identify the wakelock held for this job. Lazily loaded in + * {@link #getWakelockTag()} since it's not typically needed until the job is about to run. + */ + @Nullable + private String mWakelockTag; /** Whether this job was scheduled by one app on behalf of another. */ final boolean mIsProxyJob; @@ -627,7 +632,6 @@ public final class JobStatus { this.batteryName = this.sourceTag != null ? bnNamespace + this.sourceTag + ":" + job.getService().getPackageName() : bnNamespace + job.getService().flattenToShortString(); - this.tag = "*job*/" + this.batteryName + "#" + job.getId(); final String componentPackage = job.getService().getPackageName(); mIsProxyJob = !this.sourcePackageName.equals(componentPackage); @@ -1321,8 +1325,13 @@ public final class JobStatus { return batteryName; } - public String getTag() { - return tag; + /** Return the String to be used as the tag for the wakelock held for this job. */ + @NonNull + public String getWakelockTag() { + if (mWakelockTag == null) { + mWakelockTag = "*job*/" + this.batteryName; + } + return mWakelockTag; } public int getBias() { @@ -2639,7 +2648,7 @@ public final class JobStatus { @NeverCompile // Avoid size overhead of debugging code. public void dump(IndentingPrintWriter pw, boolean full, long nowElapsed) { UserHandle.formatUid(pw, callingUid); - pw.print(" tag="); pw.println(tag); + pw.print(" tag="); pw.println(getWakelockTag()); pw.print("Source: uid="); UserHandle.formatUid(pw, getSourceUid()); pw.print(" user="); pw.print(getSourceUserId()); @@ -2955,7 +2964,7 @@ public final class JobStatus { final long token = proto.start(fieldId); proto.write(JobStatusDumpProto.CALLING_UID, callingUid); - proto.write(JobStatusDumpProto.TAG, tag); + proto.write(JobStatusDumpProto.TAG, getWakelockTag()); proto.write(JobStatusDumpProto.SOURCE_UID, getSourceUid()); proto.write(JobStatusDumpProto.SOURCE_USER_ID, getSourceUserId()); proto.write(JobStatusDumpProto.SOURCE_PACKAGE_NAME, getSourcePackageName());