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
This commit is contained in:
Varun Shah
2022-12-15 02:41:39 +00:00
parent f1dfcfec0d
commit 8adb704a4a
2 changed files with 16 additions and 26 deletions

View File

@@ -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,

View File

@@ -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());