Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85f3d3f3 authored by Sanath Kumar's avatar Sanath Kumar
Browse files

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
parent c3fcccec
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -106,3 +106,13 @@ flag {
        purpose: PURPOSE_BUGFIX
    }
}

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
    }
}
+6 −0
Original line number Diff line number Diff line
@@ -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("@");
        }
+86 −0
Original line number Diff line number Diff line
@@ -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);