From ebf8d23f1a85ca71df9e064dea9a865c4981c1e3 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Tue, 11 Aug 2020 15:39:02 -0700 Subject: ThermalManagerService: only update thermal status for SKIN type thermistor Skin thermistors are the ones to monitor long term thermal stress. The public thermal API for app is meant to be used mitigation Tskin. This CL will eliminate status update from other types of thermistors. Test: atest ThermalManagerServiceTest Change-Id: I333f358ee49fc83ad6d7b4944541f6fc428023ce --- .../com/android/server/power/ThermalManagerService.java | 2 +- .../android/server/power/ThermalManagerServiceTest.java | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/power/ThermalManagerService.java b/services/core/java/com/android/server/power/ThermalManagerService.java index ef4954aa4e4c..ae0db4419080 100644 --- a/services/core/java/com/android/server/power/ThermalManagerService.java +++ b/services/core/java/com/android/server/power/ThermalManagerService.java @@ -200,7 +200,7 @@ public class ThermalManagerService extends SystemService { final int count = mTemperatureMap.size(); for (int i = 0; i < count; i++) { Temperature t = mTemperatureMap.valueAt(i); - if (t.getStatus() >= newStatus) { + if (t.getType() == Temperature.TYPE_SKIN && t.getStatus() >= newStatus) { newStatus = t.getStatus(); } } 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 083df28b2278..aaa74dd832af 100644 --- a/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java @@ -284,28 +284,29 @@ public class ThermalManagerServiceTest { @Test public void testNotify() throws RemoteException { int status = Temperature.THROTTLING_SEVERE; + // Should only notify event not status Temperature newBattery = new Temperature(50, Temperature.TYPE_BATTERY, "batt", status); mFakeHal.mCallback.onValues(newBattery); verify(mEventListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).notifyThrottling(newBattery); verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) - .times(1)).onStatusChange(status); + .times(0)).onStatusChange(anyInt()); verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(0)).notifyThrottling(newBattery); verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) - .times(1)).onStatusChange(status); + .times(0)).onStatusChange(anyInt()); resetListenerMock(); - // Should only notify event not status + // Notify both event and status Temperature newSkin = new Temperature(50, Temperature.TYPE_SKIN, "skin1", status); mFakeHal.mCallback.onValues(newSkin); verify(mEventListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).notifyThrottling(newSkin); verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) - .times(0)).onStatusChange(anyInt()); + .times(1)).onStatusChange(status); verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).notifyThrottling(newSkin); verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) - .times(0)).onStatusChange(anyInt()); + .times(1)).onStatusChange(status); resetListenerMock(); // Back to None, should only notify event not status status = Temperature.THROTTLING_NONE; @@ -345,10 +346,13 @@ public class ThermalManagerServiceTest { @Test public void testGetCurrentStatus() throws RemoteException { - int status = Temperature.THROTTLING_EMERGENCY; + int status = Temperature.THROTTLING_SEVERE; Temperature newSkin = new Temperature(100, Temperature.TYPE_SKIN, "skin1", status); mFakeHal.mCallback.onValues(newSkin); assertEquals(status, mService.mService.getCurrentThermalStatus()); + int battStatus = Temperature.THROTTLING_EMERGENCY; + Temperature newBattery = new Temperature(60, Temperature.TYPE_BATTERY, "batt", battStatus); + assertEquals(status, mService.mService.getCurrentThermalStatus()); } @Test -- cgit v1.2.3-59-g8ed1b