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

Commit 03ebd42a authored by Kweku Adams's avatar Kweku Adams
Browse files

Lower EJ execution limit to 10 minutes.

Developers are informed that expedited jobs can be stopped earlier than
regular jobs and so shouldn't use them for long pieces of work.
The standard timeout is 3 minutes for EJs. There's little reason to let
them run longer than the normal 10 minutes, and letting them run up to
30 minutes may give developers the wrong impression and increases the
potential for accidental power issues. Lower the maximum execution limit
of EJs to 10 minutes (the base execution limit of regular jobs) to be
more in line with what EJs should be used for and prevent additional
issues.

Bug: 284512488
Bug: 297106511
Bug: 299329948
Bug: 299346198
Test: atest FrameworksMockingServicesTests:JobSchedulerServiceTest
Change-Id: Ia4950f0801f2881a34976987f735e5ab7f493ee1
parent b1df6237
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -3859,10 +3859,16 @@ public class JobSchedulerService extends com.android.server.SystemService
            // Only let the app use the higher runtime if it hasn't repeatedly timed out.
            final String timeoutTag = job.shouldTreatAsExpeditedJob()
                    ? QUOTA_TRACKER_TIMEOUT_EJ_TAG : QUOTA_TRACKER_TIMEOUT_REG_TAG;
            // Developers are informed that expedited jobs can be stopped earlier than regular jobs
            // and so shouldn't use them for long pieces of work. There's little reason to let
            // them run longer than the normal 10 minutes.
            final long normalUpperLimitMs = job.shouldTreatAsExpeditedJob()
                    ? mConstants.RUNTIME_MIN_GUARANTEE_MS
                    : mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS;
            final long upperLimitMs =
                    mQuotaTracker.isWithinQuota(job.getTimeoutBlameUserId(),
                            job.getTimeoutBlamePackageName(), timeoutTag)
                            ? mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS
                            ? normalUpperLimitMs
                            : mConstants.RUNTIME_MIN_GUARANTEE_MS;
            return Math.min(upperLimitMs,
                    mConstants.USE_TARE_POLICY
+24 −13
Original line number Diff line number Diff line
@@ -577,8 +577,14 @@ public class JobSchedulerServiceTest {
        JobStatus jobUIDT = createJobStatus("testGetMaxJobExecutionTimeMs",
                createJobInfo(10)
                        .setUserInitiated(true).setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY));
        JobStatus jobEj = createJobStatus("testGetMaxJobExecutionTimeMs",
                createJobInfo(2).setExpedited(true));
        JobStatus jobReg = createJobStatus("testGetMaxJobExecutionTimeMs",
                createJobInfo(3));
        spyOn(jobUIDT);
        when(jobUIDT.shouldTreatAsUserInitiatedJob()).thenReturn(true);
        spyOn(jobEj);
        when(jobEj.shouldTreatAsExpeditedJob()).thenReturn(true);

        QuotaController quotaController = mService.getQuotaController();
        spyOn(quotaController);
@@ -595,6 +601,11 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUIDT));

        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
    }

    @Test
@@ -636,7 +647,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -649,7 +660,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -664,7 +675,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -677,7 +688,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -692,7 +703,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -705,7 +716,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -720,7 +731,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -765,7 +776,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -778,7 +789,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -792,7 +803,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -807,7 +818,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -820,7 +831,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));
@@ -834,7 +845,7 @@ public class JobSchedulerServiceTest {
        grantRunUserInitiatedJobsPermission(false);
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobUij));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
        assertEquals(mService.mConstants.RUNTIME_MIN_GUARANTEE_MS,
                mService.getMaxJobExecutionTimeMs(jobEj));
        assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS,
                mService.getMaxJobExecutionTimeMs(jobReg));