Loading apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +24 −5 Original line number Diff line number Diff line Loading @@ -3212,14 +3212,23 @@ public class JobSchedulerService extends com.android.server.SystemService /** Returns the maximum amount of time this job could run for. */ public long getMaxJobExecutionTimeMs(JobStatus job) { synchronized (mLock) { final boolean shouldTreatAsDataTransfer = job.getJob().isDataTransfer() && checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName()); final boolean allowLongerJob; final boolean isDataTransfer = job.getJob().isDataTransfer(); if (isDataTransfer || job.shouldTreatAsUserInitiated()) { allowLongerJob = checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName()); } else { allowLongerJob = false; } if (job.shouldTreatAsUserInitiated()) { if (shouldTreatAsDataTransfer) { if (isDataTransfer && allowLongerJob) { return mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS; } if (allowLongerJob) { return mConstants.RUNTIME_USER_INITIATED_LIMIT_MS; } else if (shouldTreatAsDataTransfer) { } return mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS; } else if (isDataTransfer && allowLongerJob) { return mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS; } return Math.min(mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, Loading Loading @@ -4171,6 +4180,16 @@ public class JobSchedulerService extends com.android.server.SystemService return mConnectivityController; } @VisibleForTesting protected QuotaController getQuotaController() { return mQuotaController; } @VisibleForTesting protected TareController getTareController() { return mTareController; } // Shell command infrastructure int getJobState(PrintWriter pw, String pkgName, int userId, int jobId) { try { Loading services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java +18 −1 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ import com.android.server.PowerAllowlistInternal; import com.android.server.SystemServiceManager; import com.android.server.job.controllers.ConnectivityController; import com.android.server.job.controllers.JobStatus; import com.android.server.job.controllers.QuotaController; import com.android.server.job.controllers.TareController; import com.android.server.pm.UserManagerInternal; import com.android.server.usage.AppStandbyInternal; Loading Loading @@ -336,14 +338,29 @@ public class JobSchedulerServiceTest { when(jobUI.shouldTreatAsUserInitiated()).thenReturn(true); when(jobUIDT.shouldTreatAsUserInitiated()).thenReturn(true); grantRunLongJobsPermission(true); QuotaController quotaController = mService.getQuotaController(); spyOn(quotaController); TareController tareController = mService.getTareController(); spyOn(tareController); doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS) .when(quotaController).getMaxJobExecutionTimeMsLocked(any()); doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS) .when(quotaController).getMaxJobExecutionTimeMsLocked(any()); grantRunLongJobsPermission(true); assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobDT)); assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUI)); assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUIDT)); grantRunLongJobsPermission(false); assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobDT)); assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUI)); assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUIDT)); } /** Loading Loading
apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +24 −5 Original line number Diff line number Diff line Loading @@ -3212,14 +3212,23 @@ public class JobSchedulerService extends com.android.server.SystemService /** Returns the maximum amount of time this job could run for. */ public long getMaxJobExecutionTimeMs(JobStatus job) { synchronized (mLock) { final boolean shouldTreatAsDataTransfer = job.getJob().isDataTransfer() && checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName()); final boolean allowLongerJob; final boolean isDataTransfer = job.getJob().isDataTransfer(); if (isDataTransfer || job.shouldTreatAsUserInitiated()) { allowLongerJob = checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName()); } else { allowLongerJob = false; } if (job.shouldTreatAsUserInitiated()) { if (shouldTreatAsDataTransfer) { if (isDataTransfer && allowLongerJob) { return mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS; } if (allowLongerJob) { return mConstants.RUNTIME_USER_INITIATED_LIMIT_MS; } else if (shouldTreatAsDataTransfer) { } return mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS; } else if (isDataTransfer && allowLongerJob) { return mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS; } return Math.min(mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, Loading Loading @@ -4171,6 +4180,16 @@ public class JobSchedulerService extends com.android.server.SystemService return mConnectivityController; } @VisibleForTesting protected QuotaController getQuotaController() { return mQuotaController; } @VisibleForTesting protected TareController getTareController() { return mTareController; } // Shell command infrastructure int getJobState(PrintWriter pw, String pkgName, int userId, int jobId) { try { Loading
services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java +18 −1 Original line number Diff line number Diff line Loading @@ -68,6 +68,8 @@ import com.android.server.PowerAllowlistInternal; import com.android.server.SystemServiceManager; import com.android.server.job.controllers.ConnectivityController; import com.android.server.job.controllers.JobStatus; import com.android.server.job.controllers.QuotaController; import com.android.server.job.controllers.TareController; import com.android.server.pm.UserManagerInternal; import com.android.server.usage.AppStandbyInternal; Loading Loading @@ -336,14 +338,29 @@ public class JobSchedulerServiceTest { when(jobUI.shouldTreatAsUserInitiated()).thenReturn(true); when(jobUIDT.shouldTreatAsUserInitiated()).thenReturn(true); grantRunLongJobsPermission(true); QuotaController quotaController = mService.getQuotaController(); spyOn(quotaController); TareController tareController = mService.getTareController(); spyOn(tareController); doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS) .when(quotaController).getMaxJobExecutionTimeMsLocked(any()); doReturn(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS) .when(quotaController).getMaxJobExecutionTimeMsLocked(any()); grantRunLongJobsPermission(true); assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobDT)); assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUI)); assertEquals(mService.mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUIDT)); grantRunLongJobsPermission(false); assertEquals(mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobDT)); assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUI)); assertEquals(mService.mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, mService.getMaxJobExecutionTimeMs(jobUIDT)); } /** Loading