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

Commit 63b76294 authored by Kweku Adams's avatar Kweku Adams Committed by Android (Google) Code Review
Browse files

Merge "Tweak EJ & UI job thermal policy."

parents 9cb5718b 79809166
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -91,12 +91,23 @@ public class ThermalStatusRestriction extends JobRestriction {
        }
        final int priority = job.getEffectivePriority();
        if (mThermalStatus >= HIGHER_PRIORITY_THRESHOLD) {
            // For moderate throttling, only let expedited jobs and high priority regular jobs that
            // haven't been running for a long time run.
            return !job.shouldTreatAsExpeditedJob()
                    && !(priority == JobInfo.PRIORITY_HIGH
                        && mService.isCurrentlyRunningLocked(job)
                        && !mService.isJobInOvertimeLocked(job));
            // For moderate throttling:
            // Only let expedited & user-initiated jobs run if:
            // 1. They haven't previously run
            // 2. They're already running and aren't yet in overtime
            // Only let high priority jobs run if:
            //   They are already running and aren't yet in overtime
            // Don't let any other job run.
            if (job.shouldTreatAsExpeditedJob() || job.shouldTreatAsUserInitiated()) {
                return job.getNumPreviousAttempts() > 0
                        || (mService.isCurrentlyRunningLocked(job)
                                && mService.isJobInOvertimeLocked(job));
            }
            if (priority == JobInfo.PRIORITY_HIGH) {
                return !mService.isCurrentlyRunningLocked(job)
                        || mService.isJobInOvertimeLocked(job);
            }
            return true;
        }
        if (mThermalStatus >= LOW_PRIORITY_THRESHOLD) {
            // For light throttling, throttle all min priority jobs and all low priority jobs that
+68 −0
Original line number Diff line number Diff line
@@ -180,14 +180,47 @@ public class ThermalStatusRestrictionTest {
                createJobBuilder(7).setExpedited(true).build());
        final JobStatus ej = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(8).setExpedited(true).build()));
        final JobStatus ejRetried = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(11).setExpedited(true).build()));
        final JobStatus ejRunning = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(12).setExpedited(true).build()));
        final JobStatus ejRunningLong = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(13).setExpedited(true).build()));
        final JobStatus ui = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(14).build()));
        final JobStatus uiRetried = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(15).build()));
        final JobStatus uiRunning = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(16).build()));
        final JobStatus uiRunningLong = spy(createJobStatus("testIsJobRestricted",
                createJobBuilder(17).build()));
        when(ej.shouldTreatAsExpeditedJob()).thenReturn(true);
        when(ejRetried.shouldTreatAsExpeditedJob()).thenReturn(true);
        when(ejRunning.shouldTreatAsExpeditedJob()).thenReturn(true);
        when(ejRunningLong.shouldTreatAsExpeditedJob()).thenReturn(true);
        when(ui.shouldTreatAsUserInitiated()).thenReturn(true);
        when(uiRetried.shouldTreatAsUserInitiated()).thenReturn(true);
        when(uiRunning.shouldTreatAsUserInitiated()).thenReturn(true);
        when(uiRunningLong.shouldTreatAsUserInitiated()).thenReturn(true);
        when(ejRetried.getNumPreviousAttempts()).thenReturn(1);
        when(uiRetried.getNumPreviousAttempts()).thenReturn(2);
        when(mJobSchedulerService.isCurrentlyRunningLocked(jobLowPriorityRunning)).thenReturn(true);
        when(mJobSchedulerService.isCurrentlyRunningLocked(jobHighPriorityRunning))
                .thenReturn(true);
        when(mJobSchedulerService.isCurrentlyRunningLocked(jobLowPriorityRunningLong))
                .thenReturn(true);
        when(mJobSchedulerService.isCurrentlyRunningLocked(jobHighPriorityRunningLong))
                .thenReturn(true);
        when(mJobSchedulerService.isCurrentlyRunningLocked(ejRunning)).thenReturn(true);
        when(mJobSchedulerService.isCurrentlyRunningLocked(ejRunningLong)).thenReturn(true);
        when(mJobSchedulerService.isCurrentlyRunningLocked(uiRunning)).thenReturn(true);
        when(mJobSchedulerService.isCurrentlyRunningLocked(uiRunningLong)).thenReturn(true);
        when(mJobSchedulerService.isJobInOvertimeLocked(jobLowPriorityRunningLong))
                .thenReturn(true);
        when(mJobSchedulerService.isJobInOvertimeLocked(jobHighPriorityRunningLong))
                .thenReturn(true);
        when(mJobSchedulerService.isJobInOvertimeLocked(ejRunningLong)).thenReturn(true);
        when(mJobSchedulerService.isJobInOvertimeLocked(uiRunningLong)).thenReturn(true);

        assertFalse(mThermalStatusRestriction.isJobRestricted(jobMinPriority));
        assertFalse(mThermalStatusRestriction.isJobRestricted(jobLowPriority));
@@ -199,6 +232,13 @@ public class ThermalStatusRestrictionTest {
        assertFalse(mThermalStatusRestriction.isJobRestricted(jobHighPriorityRunningLong));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ej));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejDowngraded));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejRetried));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejRunning));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejRunningLong));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ui));
        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRetried));
        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRunning));
        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRunningLong));

        mStatusChangedListener.onThermalStatusChanged(THERMAL_STATUS_LIGHT);

@@ -212,6 +252,13 @@ public class ThermalStatusRestrictionTest {
        assertFalse(mThermalStatusRestriction.isJobRestricted(jobHighPriorityRunningLong));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejDowngraded));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ej));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejRetried));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejRunning));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejRunningLong));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ui));
        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRetried));
        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRunning));
        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRunningLong));

        mStatusChangedListener.onThermalStatusChanged(THERMAL_STATUS_MODERATE);

@@ -225,6 +272,13 @@ public class ThermalStatusRestrictionTest {
        assertTrue(mThermalStatusRestriction.isJobRestricted(jobHighPriorityRunningLong));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejDowngraded));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ej));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRetried));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ejRunning));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRunningLong));
        assertFalse(mThermalStatusRestriction.isJobRestricted(ui));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRetried));
        assertFalse(mThermalStatusRestriction.isJobRestricted(uiRunning));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRunningLong));

        mStatusChangedListener.onThermalStatusChanged(THERMAL_STATUS_SEVERE);

@@ -238,6 +292,13 @@ public class ThermalStatusRestrictionTest {
        assertTrue(mThermalStatusRestriction.isJobRestricted(jobHighPriorityRunningLong));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejDowngraded));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ej));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRetried));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRunning));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRunningLong));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ui));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRetried));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRunning));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRunningLong));

        mStatusChangedListener.onThermalStatusChanged(THERMAL_STATUS_CRITICAL);

@@ -251,6 +312,13 @@ public class ThermalStatusRestrictionTest {
        assertTrue(mThermalStatusRestriction.isJobRestricted(jobHighPriorityRunningLong));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejDowngraded));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ej));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRetried));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRunning));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ejRunningLong));
        assertTrue(mThermalStatusRestriction.isJobRestricted(ui));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRetried));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRunning));
        assertTrue(mThermalStatusRestriction.isJobRestricted(uiRunningLong));
    }

    private JobInfo.Builder createJobBuilder(int jobId) {