diff options
3 files changed, 38 insertions, 7 deletions
diff --git a/core/java/android/os/Temperature.java b/core/java/android/os/Temperature.java index 5499181c3cdb..eee2b520afa8 100644 --- a/core/java/android/os/Temperature.java +++ b/core/java/android/os/Temperature.java @@ -70,6 +70,7 @@ public final class Temperature implements Parcelable { TYPE_BCL_VOLTAGE, TYPE_BCL_CURRENT, TYPE_BCL_PERCENTAGE, + TYPE_NPU, }) @Retention(RetentionPolicy.SOURCE) public @interface Type {} @@ -85,6 +86,7 @@ public final class Temperature implements Parcelable { public static final int TYPE_BCL_VOLTAGE = TemperatureType.BCL_VOLTAGE; public static final int TYPE_BCL_CURRENT = TemperatureType.BCL_CURRENT; public static final int TYPE_BCL_PERCENTAGE = TemperatureType.BCL_PERCENTAGE; + public static final int TYPE_NPU = TemperatureType.NPU; /** * Verify a valid temperature type. @@ -92,7 +94,7 @@ public final class Temperature implements Parcelable { * @return true if a temperature type is valid otherwise false. */ public static boolean isValidType(@Type int type) { - return type >= TYPE_UNKNOWN && type <= TYPE_BCL_PERCENTAGE; + return type >= TYPE_UNKNOWN && type <= TYPE_NPU; } /** diff --git a/services/core/java/com/android/server/power/ThermalManagerService.java b/services/core/java/com/android/server/power/ThermalManagerService.java index 07bebad8e190..2eea3a40eb62 100644 --- a/services/core/java/com/android/server/power/ThermalManagerService.java +++ b/services/core/java/com/android/server/power/ThermalManagerService.java @@ -250,14 +250,29 @@ public class ThermalManagerService extends SystemService { } } - private void onTemperatureChanged(Temperature temperature, boolean sendStatus) { - synchronized (mLock) { - // Thermal Shutdown for Skin temperature - if (temperature.getStatus() == Temperature.THROTTLING_SHUTDOWN - && temperature.getType() == Temperature.TYPE_SKIN) { + private void shutdownIfNeededLocked(Temperature temperature) { + if (temperature.getStatus() != Temperature.THROTTLING_SHUTDOWN) { + return; + } + switch (temperature.getType()) { + case Temperature.TYPE_CPU: + // Fall through + case Temperature.TYPE_GPU: + // Fall through + case Temperature.TYPE_NPU: + // Fall through + case Temperature.TYPE_SKIN: mPowerManager.shutdown(false, PowerManager.SHUTDOWN_THERMAL_STATE, false); - } + break; + case Temperature.TYPE_BATTERY: + mPowerManager.shutdown(false, PowerManager.SHUTDOWN_BATTERY_THERMAL_STATE, false); + break; + } + } + private void onTemperatureChanged(Temperature temperature, boolean sendStatus) { + synchronized (mLock) { + shutdownIfNeededLocked(temperature); Temperature old = mTemperatureMap.put(temperature.getName(), temperature); if (old != null) { if (old.getStatus() != temperature.getStatus()) { @@ -300,6 +315,8 @@ public class ThermalManagerService extends SystemService { final IThermalService.Stub mService = new IThermalService.Stub() { @Override public boolean registerThermalEventListener(IThermalEventListener listener) { + getContext().enforceCallingOrSelfPermission( + android.Manifest.permission.DEVICE_POWER, null); synchronized (mLock) { final long token = Binder.clearCallingIdentity(); try { @@ -320,6 +337,8 @@ public class ThermalManagerService extends SystemService { @Override public boolean registerThermalEventListenerWithType(IThermalEventListener listener, int type) { + getContext().enforceCallingOrSelfPermission( + android.Manifest.permission.DEVICE_POWER, null); synchronized (mLock) { final long token = Binder.clearCallingIdentity(); try { @@ -339,6 +358,8 @@ public class ThermalManagerService extends SystemService { @Override public boolean unregisterThermalEventListener(IThermalEventListener listener) { + getContext().enforceCallingOrSelfPermission( + android.Manifest.permission.DEVICE_POWER, null); synchronized (mLock) { final long token = Binder.clearCallingIdentity(); try { @@ -351,6 +372,8 @@ public class ThermalManagerService extends SystemService { @Override public List<Temperature> getCurrentTemperatures() { + getContext().enforceCallingOrSelfPermission( + android.Manifest.permission.DEVICE_POWER, null); final long token = Binder.clearCallingIdentity(); try { if (!mHalReady) { @@ -364,6 +387,8 @@ public class ThermalManagerService extends SystemService { @Override public List<Temperature> getCurrentTemperaturesWithType(int type) { + getContext().enforceCallingOrSelfPermission( + android.Manifest.permission.DEVICE_POWER, null); final long token = Binder.clearCallingIdentity(); try { if (!mHalReady) { diff --git a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java index c1963da3b3af..94d293efd204 100644 --- a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java @@ -281,6 +281,10 @@ public class ThermalManagerServiceTest { mFakeHal.mCallback.onValues(newSkin); verify(mIPowerManagerMock, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).shutdown(false, PowerManager.SHUTDOWN_THERMAL_STATE, false); + Temperature newBattery = new Temperature(60, Temperature.TYPE_BATTERY, "batt", status); + mFakeHal.mCallback.onValues(newBattery); + verify(mIPowerManagerMock, timeout(CALLBACK_TIMEOUT_MILLI_SEC) + .times(1)).shutdown(false, PowerManager.SHUTDOWN_BATTERY_THERMAL_STATE, false); } @Test |