diff options
author | 2025-02-04 11:35:44 -0600 | |
---|---|---|
committer | 2025-02-11 20:41:35 -0600 | |
commit | 85f3d3f39f1527dc9e01aa76a253059893b91402 (patch) | |
tree | 171dd605fe911dcf0e5524003b660decdc267add | |
parent | c3fcccec063719c8ec8de08572adbff19d229642 (diff) |
JobScheduler: Add Trace Tag to the job name
Job Name Creation Logic with #<TraceTag>#
* When both tag and namespace are present:
#<TraceTag>#@<Namespace>@<Tag>:<PackageName>
* When a tag is present but a namespace is not:
#<TraceTag>#<Tag>:<PackageName>
* When a tag is not present but a namespace is present:
#<TraceTag>#@<Namespace>@<PackageName>/<Classname>
* When both a tag and namespace are not present:
#<TraceTag>#<PackageName>/<Classname>
Bug: 354795473
Test: atest FrameworksMockingServicesTests:com.android.server.job
Test: atest CtsJobSchedulerTestCases
Flag: com.android.server.job.include_trace_tag_in_job_name
Change-Id: I5dfec8aaf2a082ace0dd1e4857c02552cdfbda2f
3 files changed, 103 insertions, 1 deletions
diff --git a/apex/jobscheduler/service/aconfig/job.aconfig b/apex/jobscheduler/service/aconfig/job.aconfig index 86ed06bf4e3d..29df80fda33d 100644 --- a/apex/jobscheduler/service/aconfig/job.aconfig +++ b/apex/jobscheduler/service/aconfig/job.aconfig @@ -105,4 +105,14 @@ flag { metadata { purpose: PURPOSE_BUGFIX } -}
\ No newline at end of file +} + +flag { + name: "include_trace_tag_in_job_name" + namespace: "backstage_power" + description: "Add the trace tag to the job name" + bug: "354795473" + metadata { + purpose: PURPOSE_BUGFIX + } +} 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 aaf69864fe97..2d069f934d0d 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 @@ -674,6 +674,12 @@ public final class JobStatus { this.job = job; StringBuilder batteryName = new StringBuilder(); + if (com.android.server.job.Flags.includeTraceTagInJobName()) { + final String filteredTraceTag = this.getFilteredTraceTag(); + if (filteredTraceTag != null) { + batteryName.append("#").append(filteredTraceTag).append("#"); + } + } if (namespace != null) { batteryName.append("@").append(namespace).append("@"); } diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java index 2cd105ba5317..67b26c1c0b00 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/JobStatusTest.java @@ -60,6 +60,8 @@ import android.content.ComponentName; import android.content.pm.PackageManagerInternal; import android.net.Uri; import android.os.SystemClock; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import android.provider.MediaStore; import android.util.SparseIntArray; @@ -71,6 +73,7 @@ import com.android.server.job.JobSchedulerService; import org.junit.After; import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -92,6 +95,9 @@ public class JobStatusTest { private static final Uri IMAGES_MEDIA_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; private static final Uri VIDEO_MEDIA_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + @Rule + public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); + @Mock private JobSchedulerInternal mJobSchedulerInternal; private MockitoSession mMockingSession; @@ -1373,6 +1379,86 @@ public class JobStatusTest { assertEquals("@TestNamespace@TestTag:foo", jobStatus.getBatteryName()); } + @Test + @EnableFlags({ + com.android.server.job.Flags.FLAG_INCLUDE_TRACE_TAG_IN_JOB_NAME, + android.app.job.Flags.FLAG_JOB_DEBUG_INFO_APIS + }) + public void testJobName_NotTagNoNamespace_IncludeTraceTagInJobNameEnabled() { + JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) + .setTraceTag("TestTraceTag") + .build(); + JobStatus jobStatus = createJobStatus(jobInfo, null, -1, null, null); + assertEquals("#TestTraceTag#foo/bar", jobStatus.getBatteryName()); + } + + @Test + @EnableFlags({ + com.android.server.job.Flags.FLAG_INCLUDE_TRACE_TAG_IN_JOB_NAME, + android.app.job.Flags.FLAG_JOB_DEBUG_INFO_APIS + }) + public void testJobName_NoTagWithNamespace_IncludeTraceTagInJobNameEnabled() { + JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) + .setTraceTag("TestTraceTag") + .build(); + JobStatus jobStatus = createJobStatus(jobInfo, null, -1, "TestNamespace", null); + assertEquals("#TestTraceTag#@TestNamespace@foo/bar", jobStatus.getBatteryName()); + } + + @Test + @EnableFlags({ + com.android.server.job.Flags.FLAG_INCLUDE_TRACE_TAG_IN_JOB_NAME, + android.app.job.Flags.FLAG_JOB_DEBUG_INFO_APIS + }) + public void testJobName_WithTagNoNamespace_IncludeTraceTagInJobNameEnabled() { + JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) + .setTraceTag("TestTraceTag") + .build(); + JobStatus jobStatus = createJobStatus(jobInfo, SOURCE_PACKAGE, 0, null, "TestTag"); + assertEquals("#TestTraceTag#TestTag:foo", jobStatus.getBatteryName()); + } + + @Test + @EnableFlags({ + com.android.server.job.Flags.FLAG_INCLUDE_TRACE_TAG_IN_JOB_NAME, + android.app.job.Flags.FLAG_JOB_DEBUG_INFO_APIS + }) + public void testJobName_FilteredTraceTagEmail_IncludeTraceTagInJobNameEnabled() { + JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) + .setTraceTag("test@email.com") + .build(); + JobStatus jobStatus = createJobStatus(jobInfo, SOURCE_PACKAGE, 0, null, "TestTag"); + assertEquals("#[EMAIL]#TestTag:foo", jobStatus.getBatteryName()); + } + + @Test + @EnableFlags({ + com.android.server.job.Flags.FLAG_INCLUDE_TRACE_TAG_IN_JOB_NAME, + android.app.job.Flags.FLAG_JOB_DEBUG_INFO_APIS + }) + public void testJobName_FilteredTraceTagPhone_IncludeTraceTagInJobNameEnabled() { + JobInfo jobInfo = new JobInfo.Builder(101, new ComponentName("foo", "bar")) + .setTraceTag("123-456-7890") + .build(); + JobStatus jobStatus = createJobStatus(jobInfo, SOURCE_PACKAGE, 0, null, "TestTag"); + assertEquals("#[PHONE]#TestTag:foo", jobStatus.getBatteryName()); + } + + @Test + @EnableFlags({ + com.android.server.job.Flags.FLAG_INCLUDE_TRACE_TAG_IN_JOB_NAME, + android.app.job.Flags.FLAG_JOB_DEBUG_INFO_APIS + }) + public void testJobName_WithTagAndNamespace_IncludeTraceTagInJobNameEnabled() { + JobInfo jobInfo = + new JobInfo.Builder(101, new ComponentName("foo", "bar")) + .setTraceTag("TestTraceTag") + .build(); + JobStatus jobStatus = + createJobStatus(jobInfo, SOURCE_PACKAGE, 0, "TestNamespace", "TestTag"); + assertEquals("#TestTraceTag#@TestNamespace@TestTag:foo", jobStatus.getBatteryName()); + } + private void markExpeditedQuotaApproved(JobStatus job, boolean isApproved) { if (job.isRequestedExpeditedJob()) { job.setExpeditedJobQuotaApproved(sElapsedRealtimeClock.millis(), isApproved); |