Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d46c77e authored by Kweku Adams's avatar Kweku Adams
Browse files

Fix bug and migrate test.

Migrate WorkCountTrackerTest to specify WorkType limits explicitly. Also
fix bug in how we assign slots to pending & already running jobs.

Bug: 141645789
Bug: 171305774
Bug: 178119369
Test: atest CtsJobSchedulerTestCases
Test: atest FrameworksMockingServicesTests:JobSchedulerServiceTest
Test: atest FrameworksServicesTests:PrioritySchedulingTest
Test: atest FrameworksServicesTests:WorkCountTrackerTest
Test: atest FrameworksServicesTests:WorkTypeConfigTest
Change-Id: I741e071391819ad3575ef981e8feb287093aa387
parent dfeb4031
Loading
Loading
Loading
Loading
+29 −16
Original line number Diff line number Diff line
@@ -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)));
            }
        }

@@ -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;
        }
+196 −99

File changed.

Preview size limit exceeded, changes collapsed.