diff options
2 files changed, 20 insertions, 13 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/job/controllers/FlexibilityController.java b/apex/jobscheduler/service/java/com/android/server/job/controllers/FlexibilityController.java index bbd661acca01..547f94badd69 100644 --- a/apex/jobscheduler/service/java/com/android/server/job/controllers/FlexibilityController.java +++ b/apex/jobscheduler/service/java/com/android/server/job/controllers/FlexibilityController.java @@ -237,7 +237,7 @@ public final class FlexibilityController extends StateController { @GuardedBy("mLock") boolean isFlexibilitySatisfiedLocked(JobStatus js) { return !mFlexibilityEnabled - || mService.getUidBias(js.getUid()) == JobInfo.BIAS_TOP_APP + || mService.getUidBias(js.getSourceUid()) == JobInfo.BIAS_TOP_APP || mService.isCurrentlyRunningLocked(js) || getNumSatisfiedRequiredConstraintsLocked(js) >= js.getNumRequiredFlexibleConstraints(); @@ -587,7 +587,7 @@ public final class FlexibilityController extends StateController { } if (latest - nowElapsed < mDeadlineProximityLimitMs) { if (DEBUG) { - Slog.d(TAG, "deadline proximity met: " + js.getUid()); + Slog.d(TAG, "deadline proximity met: " + js); } mFlexibilityTracker.adjustJobsRequiredConstraints(js, -js.getNumRequiredFlexibleConstraints(), nowElapsed); @@ -600,7 +600,7 @@ public final class FlexibilityController extends StateController { } if (latest - nextTimeElapsed <= mDeadlineProximityLimitMs) { if (DEBUG) { - Slog.d(TAG, "last alarm set: " + js.getUid()); + Slog.d(TAG, "last alarm set: " + js); } addAlarm(js, latest - mDeadlineProximityLimitMs); return; diff --git a/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java index c58104a50613..674e500d2e41 100644 --- a/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/job/controllers/FlexibilityControllerTest.java @@ -48,6 +48,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import android.app.AlarmManager; +import android.app.AppGlobals; import android.app.job.JobInfo; import android.content.ComponentName; import android.content.Context; @@ -80,11 +81,13 @@ public class FlexibilityControllerTest { private static final String SOURCE_PACKAGE = "com.android.frameworks.mockingservicestests"; private static final int SOURCE_USER_ID = 0; private static final long FROZEN_TIME = 100L; + private MockitoSession mMockingSession; private FlexibilityController mFlexibilityController; private DeviceConfig.Properties.Builder mDeviceConfigPropertiesBuilder; private JobStore mJobStore; private FlexibilityController.FcConfig mFcConfig; + private int mSourceUid; @Mock private AlarmManager mAlarmManager; @@ -98,7 +101,7 @@ public class FlexibilityControllerTest { private PackageManager mPackageManager; @Before - public void setup() { + public void setup() throws Exception { mMockingSession = mockitoSession() .initMocks(this) .strictness(Strictness.LENIENT) @@ -144,6 +147,8 @@ public class FlexibilityControllerTest { mPrefetchController); mFcConfig = mFlexibilityController.getFcConfig(); + mSourceUid = AppGlobals.getPackageManager().getPackageUid(SOURCE_PACKAGE, 0, 0); + setDeviceConfigString(KEY_PERCENTS_TO_DROP_NUM_FLEXIBLE_CONSTRAINTS, "50,60,70,80"); setDeviceConfigLong(KEY_DEADLINE_PROXIMITY_LIMIT, 0L); setDeviceConfigBoolean(KEY_FLEXIBILITY_ENABLED, true); @@ -648,20 +653,22 @@ public class FlexibilityControllerTest { public void testTopAppBypass() { JobInfo.Builder jb = createJob(0); JobStatus js = createJobStatus("testTopAppBypass", jb); - js.adjustNumRequiredFlexibleConstraints(100); mJobStore.add(js); // Needed because if before and after Uid bias is the same, nothing happens. - when(mJobSchedulerService.getUidBias(js.getUid())) + when(mJobSchedulerService.getUidBias(mSourceUid)) .thenReturn(JobInfo.BIAS_FOREGROUND_SERVICE); synchronized (mFlexibilityController.mLock) { - setUidBias(js.getUid(), JobInfo.BIAS_TOP_APP); + mFlexibilityController.maybeStartTrackingJobLocked(js, null); + assertFalse(mFlexibilityController.isFlexibilitySatisfiedLocked(js)); + + setUidBias(mSourceUid, JobInfo.BIAS_TOP_APP); assertTrue(mFlexibilityController.isFlexibilitySatisfiedLocked(js)); assertTrue(js.isConstraintSatisfied(CONSTRAINT_FLEXIBLE)); - setUidBias(js.getUid(), JobInfo.BIAS_FOREGROUND_SERVICE); + setUidBias(mSourceUid, JobInfo.BIAS_FOREGROUND_SERVICE); assertFalse(mFlexibilityController.isFlexibilitySatisfiedLocked(js)); assertFalse(js.isConstraintSatisfied(CONSTRAINT_FLEXIBLE)); @@ -858,18 +865,18 @@ public class FlexibilityControllerTest { final ArraySet<String> pkgs = new ArraySet<>(); pkgs.add(js.getSourcePackageName()); - when(mJobSchedulerService.getPackagesForUidLocked(js.getUid())).thenReturn(pkgs); + when(mJobSchedulerService.getPackagesForUidLocked(mSourceUid)).thenReturn(pkgs); - setUidBias(js.getUid(), BIAS_TOP_APP); - setUidBias(js.getUid(), BIAS_FOREGROUND_SERVICE); + setUidBias(mSourceUid, BIAS_TOP_APP); + setUidBias(mSourceUid, BIAS_FOREGROUND_SERVICE); assertEquals(100L, (long) mFlexibilityController.mPrefetchLifeCycleStart .getOrDefault(js.getSourceUserId(), js.getSourcePackageName(), 0L)); JobSchedulerService.sElapsedRealtimeClock = Clock.fixed(Instant.ofEpochMilli(50L), ZoneOffset.UTC); - setUidBias(js.getUid(), BIAS_TOP_APP); - setUidBias(js.getUid(), BIAS_FOREGROUND_SERVICE); + setUidBias(mSourceUid, BIAS_TOP_APP); + setUidBias(mSourceUid, BIAS_FOREGROUND_SERVICE); assertEquals(100L, (long) mFlexibilityController .mPrefetchLifeCycleStart.get(js.getSourceUserId(), js.getSourcePackageName())); |