Loading apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +37 −32 Original line number Diff line number Diff line Loading @@ -1679,9 +1679,17 @@ public final class QuotaController extends StateController { // Update job bookkeeping out of band. JobSchedulerBackgroundThread.getHandler().post(() -> { final int bucketIndex = JobSchedulerService.standbyBucketToBucketIndex(bucket); updateStandbyBucket(userId, packageName, bucketIndex); }); } } @VisibleForTesting void updateStandbyBucket( final int userId, final @NonNull String packageName, final int bucketIndex) { if (DEBUG) { Slog.i(TAG, "Moving pkg " + string(userId, packageName) + " to bucketIndex " + bucketIndex); Slog.i(TAG, "Moving pkg " + string(userId, packageName) + " to bucketIndex " + bucketIndex); } List<JobStatus> restrictedChanges = new ArrayList<>(); synchronized (mLock) { Loading @@ -1693,8 +1701,7 @@ public final class QuotaController extends StateController { JobStatus js = jobs.valueAt(i); // Effective standby bucket can change after this in some situations so // use the real bucket so that the job is tracked by the controllers. if ((bucketIndex == RESTRICTED_INDEX || js.getStandbyBucket() == RESTRICTED_INDEX) if ((bucketIndex == RESTRICTED_INDEX || js.getStandbyBucket() == RESTRICTED_INDEX) && bucketIndex != js.getStandbyBucket()) { restrictedChanges.add(js); } Loading @@ -1711,8 +1718,6 @@ public final class QuotaController extends StateController { if (restrictedChanges.size() > 0) { mStateChangedListener.onRestrictedBucketChanged(restrictedChanges); } }); } } private final class DeleteTimingSessionsFunctor implements Consumer<List<TimingSession>> { Loading services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -284,6 +284,8 @@ public class QuotaControllerTest { return UsageStatsManager.STANDBY_BUCKET_FREQUENT; case RARE_INDEX: return UsageStatsManager.STANDBY_BUCKET_RARE; case RESTRICTED_INDEX: return UsageStatsManager.STANDBY_BUCKET_RESTRICTED; default: return UsageStatsManager.STANDBY_BUCKET_NEVER; } Loading @@ -292,6 +294,7 @@ public class QuotaControllerTest { private void setStandbyBucket(int bucketIndex) { when(mUsageStatsManager.getAppStandbyBucket(eq(SOURCE_PACKAGE), eq(SOURCE_USER_ID), anyLong())).thenReturn(bucketIndexToUsageStatsBucket(bucketIndex)); mQuotaController.updateStandbyBucket(SOURCE_USER_ID, SOURCE_PACKAGE, bucketIndex); } private void setStandbyBucket(int bucketIndex, JobStatus... jobs) { Loading Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/QuotaController.java +37 −32 Original line number Diff line number Diff line Loading @@ -1679,9 +1679,17 @@ public final class QuotaController extends StateController { // Update job bookkeeping out of band. JobSchedulerBackgroundThread.getHandler().post(() -> { final int bucketIndex = JobSchedulerService.standbyBucketToBucketIndex(bucket); updateStandbyBucket(userId, packageName, bucketIndex); }); } } @VisibleForTesting void updateStandbyBucket( final int userId, final @NonNull String packageName, final int bucketIndex) { if (DEBUG) { Slog.i(TAG, "Moving pkg " + string(userId, packageName) + " to bucketIndex " + bucketIndex); Slog.i(TAG, "Moving pkg " + string(userId, packageName) + " to bucketIndex " + bucketIndex); } List<JobStatus> restrictedChanges = new ArrayList<>(); synchronized (mLock) { Loading @@ -1693,8 +1701,7 @@ public final class QuotaController extends StateController { JobStatus js = jobs.valueAt(i); // Effective standby bucket can change after this in some situations so // use the real bucket so that the job is tracked by the controllers. if ((bucketIndex == RESTRICTED_INDEX || js.getStandbyBucket() == RESTRICTED_INDEX) if ((bucketIndex == RESTRICTED_INDEX || js.getStandbyBucket() == RESTRICTED_INDEX) && bucketIndex != js.getStandbyBucket()) { restrictedChanges.add(js); } Loading @@ -1711,8 +1718,6 @@ public final class QuotaController extends StateController { if (restrictedChanges.size() > 0) { mStateChangedListener.onRestrictedBucketChanged(restrictedChanges); } }); } } private final class DeleteTimingSessionsFunctor implements Consumer<List<TimingSession>> { Loading
services/tests/mockingservicestests/src/com/android/server/job/controllers/QuotaControllerTest.java +3 −0 Original line number Diff line number Diff line Loading @@ -284,6 +284,8 @@ public class QuotaControllerTest { return UsageStatsManager.STANDBY_BUCKET_FREQUENT; case RARE_INDEX: return UsageStatsManager.STANDBY_BUCKET_RARE; case RESTRICTED_INDEX: return UsageStatsManager.STANDBY_BUCKET_RESTRICTED; default: return UsageStatsManager.STANDBY_BUCKET_NEVER; } Loading @@ -292,6 +294,7 @@ public class QuotaControllerTest { private void setStandbyBucket(int bucketIndex) { when(mUsageStatsManager.getAppStandbyBucket(eq(SOURCE_PACKAGE), eq(SOURCE_USER_ID), anyLong())).thenReturn(bucketIndexToUsageStatsBucket(bucketIndex)); mQuotaController.updateStandbyBucket(SOURCE_USER_ID, SOURCE_PACKAGE, bucketIndex); } private void setStandbyBucket(int bucketIndex, JobStatus... jobs) { Loading