From 8adb704a4a7fe2a39e5bf338302cba3b2ca2ea95 Mon Sep 17 00:00:00 2001 From: Varun Shah Date: Thu, 15 Dec 2022 02:41:39 +0000 Subject: [PATCH] Update min and max job execution guarantees. Associate the RUN_LONG_JOBS permission with UI jobs instead of DT jobs and update the job execution guarantees accordingly. Bug: 255371817 Test: atest FrameworksMockingServicesTests:ConnectivityControllerTest Test: atest FrameworksMockingServicesTests:JobSchedulerServiceTest Change-Id: Iebf756018155de32115133ed919d4d372da7ff9a --- .../server/job/JobSchedulerService.java | 34 ++++++++----------- .../server/job/JobSchedulerServiceTest.java | 8 ++--- 2 files changed, 16 insertions(+), 26 deletions(-) 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 f6aba74b676cf..45d47eaee6d93 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java +++ b/apex/jobscheduler/service/java/com/android/server/job/JobSchedulerService.java @@ -622,7 +622,7 @@ public class JobSchedulerService extends com.android.server.SystemService public static final long DEFAULT_RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_MS = Math.max(10 * MINUTE_IN_MILLIS, DEFAULT_RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS); public static final long DEFAULT_RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS = - Math.max(Long.MAX_VALUE, DEFAULT_RUNTIME_USER_INITIATED_LIMIT_MS); + Math.min(Long.MAX_VALUE, DEFAULT_RUNTIME_USER_INITIATED_LIMIT_MS); static final boolean DEFAULT_PERSIST_IN_SPLIT_FILES = true; private static final boolean DEFAULT_USE_TARE_POLICY = false; @@ -3174,10 +3174,9 @@ public class JobSchedulerService extends com.android.server.SystemService /** Returns the minimum amount of time we should let this job run before timing out. */ public long getMinJobExecutionGuaranteeMs(JobStatus job) { synchronized (mLock) { - final boolean shouldTreatAsDataTransfer = job.getJob().isDataTransfer() - && checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName()); - if (job.shouldTreatAsUserInitiatedJob()) { - if (shouldTreatAsDataTransfer) { + if (job.shouldTreatAsUserInitiatedJob() + && checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName())) { + if (job.getJob().isDataTransfer()) { final long estimatedTransferTimeMs = mConnectivityController.getEstimatedTransferTimeMs(job); if (estimatedTransferTimeMs == ConnectivityController.UNKNOWN_TIME) { @@ -3194,7 +3193,7 @@ public class JobSchedulerService extends com.android.server.SystemService )); } return mConstants.RUNTIME_MIN_USER_INITIATED_GUARANTEE_MS; - } else if (shouldTreatAsDataTransfer) { + } else if (job.getJob().isDataTransfer()) { // For now, don't increase a bg data transfer's minimum guarantee. return mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS; } else if (job.shouldTreatAsExpeditedJob()) { @@ -3213,23 +3212,18 @@ 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 allowLongerJob; - final boolean isDataTransfer = job.getJob().isDataTransfer(); - if (isDataTransfer || job.shouldTreatAsUserInitiatedJob()) { - allowLongerJob = - checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName()); - } else { - allowLongerJob = false; + final boolean allowLongerJob = job.shouldTreatAsUserInitiatedJob() + && checkRunLongJobsPermission(job.getSourceUid(), job.getSourcePackageName()); + if (job.getJob().isDataTransfer() && allowLongerJob) { // UI+DT + return mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS; + } + if (allowLongerJob) { // UI with LRJ permission + return mConstants.RUNTIME_USER_INITIATED_LIMIT_MS; } if (job.shouldTreatAsUserInitiatedJob()) { - if (isDataTransfer && allowLongerJob) { - return mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS; - } - if (allowLongerJob) { - return mConstants.RUNTIME_USER_INITIATED_LIMIT_MS; - } return mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS; - } else if (isDataTransfer && allowLongerJob) { + } + if (job.getJob().isDataTransfer()) { return mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS; } return Math.min(mConstants.RUNTIME_FREE_QUOTA_MAX_LIMIT_MS, diff --git a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java index 2c103298b5571..6374c669c5998 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/JobSchedulerServiceTest.java @@ -254,11 +254,6 @@ public class JobSchedulerServiceTest { ConnectivityController connectivityController = mService.getConnectivityController(); spyOn(connectivityController); - mService.mConstants.RUNTIME_MIN_DATA_TRANSFER_GUARANTEE_MS = 10 * MINUTE_IN_MILLIS; - mService.mConstants.RUNTIME_DATA_TRANSFER_LIMIT_MS = 60 * MINUTE_IN_MILLIS; - mService.mConstants.RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_BUFFER_FACTOR = 1.5f; - mService.mConstants.RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_MS = HOUR_IN_MILLIS; - mService.mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS = 6 * HOUR_IN_MILLIS; assertEquals(mService.mConstants.RUNTIME_MIN_EJ_GUARANTEE_MS, mService.getMinJobExecutionGuaranteeMs(ejMax)); @@ -311,7 +306,8 @@ public class JobSchedulerServiceTest { .when(connectivityController).getEstimatedTransferTimeMs(any()); assertEquals( (long) (mService.mConstants.RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_MS - * 2 * 1.5), + * 2 * mService.mConstants + .RUNTIME_MIN_USER_INITIATED_DATA_TRANSFER_GUARANTEE_BUFFER_FACTOR), mService.getMinJobExecutionGuaranteeMs(jobUIDT)); doReturn(mService.mConstants.RUNTIME_USER_INITIATED_DATA_TRANSFER_LIMIT_MS * 2) .when(connectivityController).getEstimatedTransferTimeMs(any());