Loading services/core/java/com/android/server/power/ThermalManagerService.java +14 −16 Original line number Diff line number Diff line Loading @@ -110,9 +110,6 @@ public class ThermalManagerService extends SystemService { @VisibleForTesting final TemperatureWatcher mTemperatureWatcher = new TemperatureWatcher(); /** Invalid throttling status */ private static final int INVALID_THROTTLING = Integer.MIN_VALUE; public ThermalManagerService(Context context) { this(context, null); } Loading @@ -121,8 +118,7 @@ public class ThermalManagerService extends SystemService { ThermalManagerService(Context context, @Nullable ThermalHalWrapper halWrapper) { super(context); mHalWrapper = halWrapper; // Initialize to invalid to send status onActivityManagerReady mStatus = INVALID_THROTTLING; mStatus = Temperature.THROTTLING_NONE; } @Override Loading Loading @@ -155,11 +151,15 @@ public class ThermalManagerService extends SystemService { } mHalWrapper.setCallback(this::onTemperatureChangedCallback); if (!halConnected) { Slog.w(TAG, "No Thermal HAL service on this device"); return; } List<Temperature> temperatures = mHalWrapper.getCurrentTemperatures(false, 0); final int count = temperatures.size(); if (count == 0) { Slog.w(TAG, "Thermal HAL reported invalid data, abort connection"); } for (int i = 0; i < count; i++) { onTemperatureChanged(temperatures.get(i), false); } Loading @@ -183,9 +183,6 @@ public class ThermalManagerService extends SystemService { } private void notifyStatusListenersLocked() { if (!Temperature.isValidStatus(mStatus)) { return; } final int length = mThermalStatusListeners.beginBroadcast(); try { for (int i = 0; i < length; i++) { Loading @@ -199,7 +196,7 @@ public class ThermalManagerService extends SystemService { } private void onTemperatureMapChangedLocked() { int newStatus = INVALID_THROTTLING; int newStatus = Temperature.THROTTLING_NONE; final int count = mTemperatureMap.size(); for (int i = 0; i < count; i++) { Temperature t = mTemperatureMap.valueAt(i); Loading Loading @@ -292,11 +289,7 @@ public class ThermalManagerService extends SystemService { shutdownIfNeeded(temperature); synchronized (mLock) { Temperature old = mTemperatureMap.put(temperature.getName(), temperature); if (old != null) { if (old.getStatus() != temperature.getStatus()) { notifyEventListenersLocked(temperature); } } else { if (old == null || old.getStatus() != temperature.getStatus()) { notifyEventListenersLocked(temperature); } if (sendStatus) { Loading Loading @@ -438,8 +431,7 @@ public class ThermalManagerService extends SystemService { synchronized (mLock) { final long token = Binder.clearCallingIdentity(); try { return Temperature.isValidStatus(mStatus) ? mStatus : Temperature.THROTTLING_NONE; return mStatus; } finally { Binder.restoreCallingIdentity(token); } Loading Loading @@ -964,6 +956,12 @@ public class ThermalManagerService extends SystemService { if (ThermalStatusCode.SUCCESS == status.code) { for (android.hardware.thermal.V2_0.Temperature temperature : temperatures) { if (!Temperature.isValidStatus( temperature.throttlingStatus)) { Slog.e(TAG, "Invalid status data from HAL"); temperature.throttlingStatus = Temperature.THROTTLING_NONE; } ret.add(new Temperature( temperature.value, temperature.type, temperature.name, Loading services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -216,11 +216,11 @@ public class ThermalManagerServiceTest { verify(mEventListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(0)).notifyThrottling(any(Temperature.class)); verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(anyInt()); .times(1)).onStatusChange(Temperature.THROTTLING_NONE); verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(0)).notifyThrottling(any(Temperature.class)); verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(anyInt()); .times(1)).onStatusChange(Temperature.THROTTLING_NONE); resetListenerMock(); mService.onBootPhase(SystemService.PHASE_ACTIVITY_MANAGER_READY); ArgumentCaptor<Temperature> captor = ArgumentCaptor.forClass(Temperature.class); Loading @@ -228,7 +228,7 @@ public class ThermalManagerServiceTest { .times(4)).notifyThrottling(captor.capture()); assertListEqualsIgnoringOrder(mFakeHal.mTemperatureList, captor.getAllValues()); verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(Temperature.THROTTLING_NONE); .times(0)).onStatusChange(Temperature.THROTTLING_NONE); captor = ArgumentCaptor.forClass(Temperature.class); verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(2)).notifyThrottling(captor.capture()); Loading @@ -236,7 +236,7 @@ public class ThermalManagerServiceTest { new ArrayList<>(Arrays.asList(mFakeHal.mSkin1, mFakeHal.mSkin2)), captor.getAllValues()); verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(Temperature.THROTTLING_NONE); .times(0)).onStatusChange(Temperature.THROTTLING_NONE); } private void resetListenerMock() { Loading Loading
services/core/java/com/android/server/power/ThermalManagerService.java +14 −16 Original line number Diff line number Diff line Loading @@ -110,9 +110,6 @@ public class ThermalManagerService extends SystemService { @VisibleForTesting final TemperatureWatcher mTemperatureWatcher = new TemperatureWatcher(); /** Invalid throttling status */ private static final int INVALID_THROTTLING = Integer.MIN_VALUE; public ThermalManagerService(Context context) { this(context, null); } Loading @@ -121,8 +118,7 @@ public class ThermalManagerService extends SystemService { ThermalManagerService(Context context, @Nullable ThermalHalWrapper halWrapper) { super(context); mHalWrapper = halWrapper; // Initialize to invalid to send status onActivityManagerReady mStatus = INVALID_THROTTLING; mStatus = Temperature.THROTTLING_NONE; } @Override Loading Loading @@ -155,11 +151,15 @@ public class ThermalManagerService extends SystemService { } mHalWrapper.setCallback(this::onTemperatureChangedCallback); if (!halConnected) { Slog.w(TAG, "No Thermal HAL service on this device"); return; } List<Temperature> temperatures = mHalWrapper.getCurrentTemperatures(false, 0); final int count = temperatures.size(); if (count == 0) { Slog.w(TAG, "Thermal HAL reported invalid data, abort connection"); } for (int i = 0; i < count; i++) { onTemperatureChanged(temperatures.get(i), false); } Loading @@ -183,9 +183,6 @@ public class ThermalManagerService extends SystemService { } private void notifyStatusListenersLocked() { if (!Temperature.isValidStatus(mStatus)) { return; } final int length = mThermalStatusListeners.beginBroadcast(); try { for (int i = 0; i < length; i++) { Loading @@ -199,7 +196,7 @@ public class ThermalManagerService extends SystemService { } private void onTemperatureMapChangedLocked() { int newStatus = INVALID_THROTTLING; int newStatus = Temperature.THROTTLING_NONE; final int count = mTemperatureMap.size(); for (int i = 0; i < count; i++) { Temperature t = mTemperatureMap.valueAt(i); Loading Loading @@ -292,11 +289,7 @@ public class ThermalManagerService extends SystemService { shutdownIfNeeded(temperature); synchronized (mLock) { Temperature old = mTemperatureMap.put(temperature.getName(), temperature); if (old != null) { if (old.getStatus() != temperature.getStatus()) { notifyEventListenersLocked(temperature); } } else { if (old == null || old.getStatus() != temperature.getStatus()) { notifyEventListenersLocked(temperature); } if (sendStatus) { Loading Loading @@ -438,8 +431,7 @@ public class ThermalManagerService extends SystemService { synchronized (mLock) { final long token = Binder.clearCallingIdentity(); try { return Temperature.isValidStatus(mStatus) ? mStatus : Temperature.THROTTLING_NONE; return mStatus; } finally { Binder.restoreCallingIdentity(token); } Loading Loading @@ -964,6 +956,12 @@ public class ThermalManagerService extends SystemService { if (ThermalStatusCode.SUCCESS == status.code) { for (android.hardware.thermal.V2_0.Temperature temperature : temperatures) { if (!Temperature.isValidStatus( temperature.throttlingStatus)) { Slog.e(TAG, "Invalid status data from HAL"); temperature.throttlingStatus = Temperature.THROTTLING_NONE; } ret.add(new Temperature( temperature.value, temperature.type, temperature.name, Loading
services/tests/servicestests/src/com/android/server/power/ThermalManagerServiceTest.java +4 −4 Original line number Diff line number Diff line Loading @@ -216,11 +216,11 @@ public class ThermalManagerServiceTest { verify(mEventListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(0)).notifyThrottling(any(Temperature.class)); verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(anyInt()); .times(1)).onStatusChange(Temperature.THROTTLING_NONE); verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(0)).notifyThrottling(any(Temperature.class)); verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(anyInt()); .times(1)).onStatusChange(Temperature.THROTTLING_NONE); resetListenerMock(); mService.onBootPhase(SystemService.PHASE_ACTIVITY_MANAGER_READY); ArgumentCaptor<Temperature> captor = ArgumentCaptor.forClass(Temperature.class); Loading @@ -228,7 +228,7 @@ public class ThermalManagerServiceTest { .times(4)).notifyThrottling(captor.capture()); assertListEqualsIgnoringOrder(mFakeHal.mTemperatureList, captor.getAllValues()); verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(Temperature.THROTTLING_NONE); .times(0)).onStatusChange(Temperature.THROTTLING_NONE); captor = ArgumentCaptor.forClass(Temperature.class); verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(2)).notifyThrottling(captor.capture()); Loading @@ -236,7 +236,7 @@ public class ThermalManagerServiceTest { new ArrayList<>(Arrays.asList(mFakeHal.mSkin1, mFakeHal.mSkin2)), captor.getAllValues()); verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC) .times(1)).onStatusChange(Temperature.THROTTLING_NONE); .times(0)).onStatusChange(Temperature.THROTTLING_NONE); } private void resetListenerMock() { Loading