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
This commit is contained in:
Wei Wang
2020-08-11 15:39:02 -07:00
parent 63963ebb0d
commit ebf8d23f1a
2 changed files with 11 additions and 7 deletions

View File

@@ -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();
}
}

View File

@@ -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