ThermalManagerService: validate input for getThermalHeadroom API

The getThermalHeadroom API only allows 0-60 seconds as the input
value. Return Float.NaN and print warning logs when users input
out-of-range values.

Add testcase testGetThermalHeadroomInputRange.

Bug: 235192825
Test: atest ThermalManagerServiceTest
Change-Id: I5d22672545961ff148be89620eecd9d03fbbdd29
This commit is contained in:
Richard Chang
2022-07-01 10:27:00 +00:00
parent bcdc02173e
commit bd8329dae9
2 changed files with 22 additions and 0 deletions

View File

@@ -72,6 +72,12 @@ import java.util.concurrent.atomic.AtomicBoolean;
public class ThermalManagerService extends SystemService {
private static final String TAG = ThermalManagerService.class.getSimpleName();
private static final boolean DEBUG = false;
/** Input range limits for getThermalHeadroom API */
public static final int MIN_FORECAST_SEC = 0;
public static final int MAX_FORECAST_SEC = 60;
/** Lock to protect listen list. */
private final Object mLock = new Object();
@@ -478,6 +484,13 @@ public class ThermalManagerService extends SystemService {
return Float.NaN;
}
if (forecastSeconds < MIN_FORECAST_SEC || forecastSeconds > MAX_FORECAST_SEC) {
if (DEBUG) {
Slog.d(TAG, "Invalid forecastSeconds: " + forecastSeconds);
}
return Float.NaN;
}
return mTemperatureWatcher.getForecast(forecastSeconds);
}

View File

@@ -381,6 +381,7 @@ public class ThermalManagerServiceTest {
assertEquals(0, Arrays.asList(mService.mService.getCurrentTemperaturesWithType(
Temperature.TYPE_SKIN)).size());
assertEquals(Temperature.THROTTLING_NONE, mService.mService.getCurrentThermalStatus());
assertTrue(Float.isNaN(mService.mService.getThermalHeadroom(0)));
}
@Test
@@ -396,6 +397,14 @@ public class ThermalManagerServiceTest {
CoolingDevice.TYPE_CPU)));
}
@Test
public void testGetThermalHeadroomInputRange() throws RemoteException {
assertTrue(Float.isNaN(mService.mService.getThermalHeadroom(
ThermalManagerService.MIN_FORECAST_SEC - 1)));
assertTrue(Float.isNaN(mService.mService.getThermalHeadroom(
ThermalManagerService.MAX_FORECAST_SEC + 1)));
}
@Test
public void testTemperatureWatcherUpdateSevereThresholds() throws RemoteException {
ThermalManagerService.TemperatureWatcher watcher = mService.mTemperatureWatcher;