summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kweku Adams <kwekua@google.com> 2023-10-24 20:02:02 +0000
committer Kweku Adams <kwekua@google.com> 2023-10-24 22:41:24 +0000
commitc3d14d17d7440d530e5c2469d477366c64c1b267 (patch)
tree3a0ce6b1ddf759d7d92358fdf29436b5114f707d
parent8943b729ede32de4734e34ba9ea76722445a8ace (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
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java4
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java1
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/JobServiceContext.java3
-rw-r--r--apex/jobscheduler/service/java/com/android/server/job/controllers/JobStatus.java21
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());