Loading apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java +29 −16 Original line number Diff line number Diff line Loading @@ -791,15 +791,10 @@ class JobConcurrencyManager { mNumUnspecialized = mConfigMaxTotal; mNumUnspecialized -= mConfigNumReservedSlots.get(WORK_TYPE_TOP); mNumUnspecialized -= mConfigNumReservedSlots.get(WORK_TYPE_BG); mNumUnspecialized -= mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP); mNumUnspecialized -= mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG); calculateUnspecializedRemaining(); } private void calculateUnspecializedRemaining() { mNumUnspecializedRemaining = mNumUnspecialized; mNumUnspecializedRemaining = mConfigMaxTotal; for (int i = mNumRunningJobs.size() - 1; i >= 0; --i) { mNumUnspecializedRemaining -= mNumRunningJobs.valueAt(i); mNumUnspecializedRemaining -= Math.max(mNumRunningJobs.valueAt(i), mConfigNumReservedSlots.get(mNumRunningJobs.keyAt(i))); } } Loading Loading @@ -882,24 +877,42 @@ class JobConcurrencyManager { mNumUnspecialized = mConfigMaxTotal; final int numTop = mNumRunningJobs.get(WORK_TYPE_TOP) + mNumPendingJobs.get(WORK_TYPE_TOP); final int resTop = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_TOP), numTop); int resTop = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_TOP), numTop); mNumActuallyReservedSlots.put(WORK_TYPE_TOP, resTop); mNumUnspecialized -= resTop; final int numBg = mNumRunningJobs.get(WORK_TYPE_BG) + mNumPendingJobs.get(WORK_TYPE_BG); final int resBg = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_BG), numBg); int resBg = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_BG), numBg); mNumActuallyReservedSlots.put(WORK_TYPE_BG, resBg); mNumUnspecialized -= resBg; calculateUnspecializedRemaining(); mNumUnspecializedRemaining = mNumUnspecialized; // Account for already running jobs after we've assigned the minimum number of slots. int unspecializedAssigned; int extraRunning = (mNumRunningJobs.get(WORK_TYPE_TOP) - resTop); if (extraRunning > 0) { unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP) - resTop, extraRunning)); resTop += unspecializedAssigned; mNumUnspecializedRemaining -= extraRunning; } extraRunning = (mNumRunningJobs.get(WORK_TYPE_BG) - resBg); if (extraRunning > 0) { unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG) - resBg, extraRunning)); resBg += unspecializedAssigned; mNumUnspecializedRemaining -= extraRunning; } // Assign remaining unspecialized based on ranking. int unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP), Math.min(mNumUnspecializedRemaining, numTop - resTop))); unspecializedAssigned = Math.max(0, Math.min(mNumUnspecializedRemaining, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP), numTop) - resTop)); mNumActuallyReservedSlots.put(WORK_TYPE_TOP, resTop + unspecializedAssigned); mNumUnspecializedRemaining -= unspecializedAssigned; unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG), Math.min(mNumUnspecializedRemaining, numBg - resBg))); Math.min(mNumUnspecializedRemaining, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG), numBg) - resBg)); mNumActuallyReservedSlots.put(WORK_TYPE_BG, resBg + unspecializedAssigned); mNumUnspecializedRemaining -= unspecializedAssigned; } Loading services/tests/servicestests/src/com/android/server/job/WorkCountTrackerTest.java +196 −99 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
apex/jobscheduler/service/java/com/android/server/job/JobConcurrencyManager.java +29 −16 Original line number Diff line number Diff line Loading @@ -791,15 +791,10 @@ class JobConcurrencyManager { mNumUnspecialized = mConfigMaxTotal; mNumUnspecialized -= mConfigNumReservedSlots.get(WORK_TYPE_TOP); mNumUnspecialized -= mConfigNumReservedSlots.get(WORK_TYPE_BG); mNumUnspecialized -= mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP); mNumUnspecialized -= mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG); calculateUnspecializedRemaining(); } private void calculateUnspecializedRemaining() { mNumUnspecializedRemaining = mNumUnspecialized; mNumUnspecializedRemaining = mConfigMaxTotal; for (int i = mNumRunningJobs.size() - 1; i >= 0; --i) { mNumUnspecializedRemaining -= mNumRunningJobs.valueAt(i); mNumUnspecializedRemaining -= Math.max(mNumRunningJobs.valueAt(i), mConfigNumReservedSlots.get(mNumRunningJobs.keyAt(i))); } } Loading Loading @@ -882,24 +877,42 @@ class JobConcurrencyManager { mNumUnspecialized = mConfigMaxTotal; final int numTop = mNumRunningJobs.get(WORK_TYPE_TOP) + mNumPendingJobs.get(WORK_TYPE_TOP); final int resTop = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_TOP), numTop); int resTop = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_TOP), numTop); mNumActuallyReservedSlots.put(WORK_TYPE_TOP, resTop); mNumUnspecialized -= resTop; final int numBg = mNumRunningJobs.get(WORK_TYPE_BG) + mNumPendingJobs.get(WORK_TYPE_BG); final int resBg = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_BG), numBg); int resBg = Math.min(mConfigNumReservedSlots.get(WORK_TYPE_BG), numBg); mNumActuallyReservedSlots.put(WORK_TYPE_BG, resBg); mNumUnspecialized -= resBg; calculateUnspecializedRemaining(); mNumUnspecializedRemaining = mNumUnspecialized; // Account for already running jobs after we've assigned the minimum number of slots. int unspecializedAssigned; int extraRunning = (mNumRunningJobs.get(WORK_TYPE_TOP) - resTop); if (extraRunning > 0) { unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP) - resTop, extraRunning)); resTop += unspecializedAssigned; mNumUnspecializedRemaining -= extraRunning; } extraRunning = (mNumRunningJobs.get(WORK_TYPE_BG) - resBg); if (extraRunning > 0) { unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG) - resBg, extraRunning)); resBg += unspecializedAssigned; mNumUnspecializedRemaining -= extraRunning; } // Assign remaining unspecialized based on ranking. int unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP), Math.min(mNumUnspecializedRemaining, numTop - resTop))); unspecializedAssigned = Math.max(0, Math.min(mNumUnspecializedRemaining, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_TOP), numTop) - resTop)); mNumActuallyReservedSlots.put(WORK_TYPE_TOP, resTop + unspecializedAssigned); mNumUnspecializedRemaining -= unspecializedAssigned; unspecializedAssigned = Math.max(0, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG), Math.min(mNumUnspecializedRemaining, numBg - resBg))); Math.min(mNumUnspecializedRemaining, Math.min(mConfigAbsoluteMaxSlots.get(WORK_TYPE_BG), numBg) - resBg)); mNumActuallyReservedSlots.put(WORK_TYPE_BG, resBg + unspecializedAssigned); mNumUnspecializedRemaining -= unspecializedAssigned; } Loading
services/tests/servicestests/src/com/android/server/job/WorkCountTrackerTest.java +196 −99 File changed.Preview size limit exceeded, changes collapsed. Show changes