diff options
| author | 2023-10-24 20:02:02 +0000 | |
|---|---|---|
| committer | 2023-10-24 22:41:24 +0000 | |
| commit | c3d14d17d7440d530e5c2469d477366c64c1b267 (patch) | |
| tree | 3a0ce6b1ddf759d7d92358fdf29436b5114f707d | |
| parent | 8943b729ede32de4734e34ba9ea76722445a8ace (diff) | |
Modify wakelock tag.
1. Remove the job ID from the wakelock tag.
2. Lazily load the tag when needed to reduce memory usage of jobs
waiting for constraints to be satisfied.
3. Remove redundant log line.
Bug: 273758274
Bug: 302348192
Bug: 307556230
Test: atest CtsJobSchedulerTestCases
Test: Manually remove output of `adb shell dumpsys jobscheduler`
Change-Id: If8547d23ced90b17225ab8efd758ac735655687e
4 files changed, 19 insertions, 10 deletions
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 5bf2eb942a6b..6550f26436d4 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 bbe1485ddcd4..592aff80f618 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 f47766ed0393..79653f0e0a91 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 458ff35c30ee..1fb54d59179b 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()); |