Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2a49370 authored by Wei Wang's avatar Wei Wang Committed by Automerger Merge Worker
Browse files

Merge "ThermalManagerService: initialize to THROTTLING_NONE explicitly" into...

Merge "ThermalManagerService: initialize to THROTTLING_NONE explicitly" into rvc-dev am: 1a8ed6d9 am: f15fa636 am: e580cf35

Change-Id: I4e6a1a78385e3fa2f05f11aa7cadf893c4f36cdd
parents 8bed24b5 e580cf35
Loading
Loading
Loading
Loading
+14 −16
Original line number Original line Diff line number Diff line
@@ -110,9 +110,6 @@ public class ThermalManagerService extends SystemService {
    @VisibleForTesting
    @VisibleForTesting
    final TemperatureWatcher mTemperatureWatcher = new TemperatureWatcher();
    final TemperatureWatcher mTemperatureWatcher = new TemperatureWatcher();


    /** Invalid throttling status */
    private static final int INVALID_THROTTLING = Integer.MIN_VALUE;

    public ThermalManagerService(Context context) {
    public ThermalManagerService(Context context) {
        this(context, null);
        this(context, null);
    }
    }
@@ -121,8 +118,7 @@ public class ThermalManagerService extends SystemService {
    ThermalManagerService(Context context, @Nullable ThermalHalWrapper halWrapper) {
    ThermalManagerService(Context context, @Nullable ThermalHalWrapper halWrapper) {
        super(context);
        super(context);
        mHalWrapper = halWrapper;
        mHalWrapper = halWrapper;
        // Initialize to invalid to send status onActivityManagerReady
        mStatus = Temperature.THROTTLING_NONE;
        mStatus = INVALID_THROTTLING;
    }
    }


    @Override
    @Override
@@ -155,11 +151,15 @@ public class ThermalManagerService extends SystemService {
            }
            }
            mHalWrapper.setCallback(this::onTemperatureChangedCallback);
            mHalWrapper.setCallback(this::onTemperatureChangedCallback);
            if (!halConnected) {
            if (!halConnected) {
                Slog.w(TAG, "No Thermal HAL service on this device");
                return;
                return;
            }
            }
            List<Temperature> temperatures = mHalWrapper.getCurrentTemperatures(false,
            List<Temperature> temperatures = mHalWrapper.getCurrentTemperatures(false,
                    0);
                    0);
            final int count = temperatures.size();
            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++) {
            for (int i = 0; i < count; i++) {
                onTemperatureChanged(temperatures.get(i), false);
                onTemperatureChanged(temperatures.get(i), false);
            }
            }
@@ -183,9 +183,6 @@ public class ThermalManagerService extends SystemService {
    }
    }


    private void notifyStatusListenersLocked() {
    private void notifyStatusListenersLocked() {
        if (!Temperature.isValidStatus(mStatus)) {
            return;
        }
        final int length = mThermalStatusListeners.beginBroadcast();
        final int length = mThermalStatusListeners.beginBroadcast();
        try {
        try {
            for (int i = 0; i < length; i++) {
            for (int i = 0; i < length; i++) {
@@ -199,7 +196,7 @@ public class ThermalManagerService extends SystemService {
    }
    }


    private void onTemperatureMapChangedLocked() {
    private void onTemperatureMapChangedLocked() {
        int newStatus = INVALID_THROTTLING;
        int newStatus = Temperature.THROTTLING_NONE;
        final int count = mTemperatureMap.size();
        final int count = mTemperatureMap.size();
        for (int i = 0; i < count; i++) {
        for (int i = 0; i < count; i++) {
            Temperature t = mTemperatureMap.valueAt(i);
            Temperature t = mTemperatureMap.valueAt(i);
@@ -292,11 +289,7 @@ public class ThermalManagerService extends SystemService {
        shutdownIfNeeded(temperature);
        shutdownIfNeeded(temperature);
        synchronized (mLock) {
        synchronized (mLock) {
            Temperature old = mTemperatureMap.put(temperature.getName(), temperature);
            Temperature old = mTemperatureMap.put(temperature.getName(), temperature);
            if (old != null) {
            if (old == null || old.getStatus() != temperature.getStatus()) {
                if (old.getStatus() != temperature.getStatus()) {
                    notifyEventListenersLocked(temperature);
                }
            } else {
                notifyEventListenersLocked(temperature);
                notifyEventListenersLocked(temperature);
            }
            }
            if (sendStatus) {
            if (sendStatus) {
@@ -438,8 +431,7 @@ public class ThermalManagerService extends SystemService {
            synchronized (mLock) {
            synchronized (mLock) {
                final long token = Binder.clearCallingIdentity();
                final long token = Binder.clearCallingIdentity();
                try {
                try {
                    return Temperature.isValidStatus(mStatus) ? mStatus
                    return mStatus;
                            : Temperature.THROTTLING_NONE;
                } finally {
                } finally {
                    Binder.restoreCallingIdentity(token);
                    Binder.restoreCallingIdentity(token);
                }
                }
@@ -964,6 +956,12 @@ public class ThermalManagerService extends SystemService {
                                if (ThermalStatusCode.SUCCESS == status.code) {
                                if (ThermalStatusCode.SUCCESS == status.code) {
                                    for (android.hardware.thermal.V2_0.Temperature
                                    for (android.hardware.thermal.V2_0.Temperature
                                            temperature : temperatures) {
                                            temperature : temperatures) {
                                        if (!Temperature.isValidStatus(
                                                temperature.throttlingStatus)) {
                                            Slog.e(TAG, "Invalid status data from HAL");
                                            temperature.throttlingStatus =
                                                Temperature.THROTTLING_NONE;
                                        }
                                        ret.add(new Temperature(
                                        ret.add(new Temperature(
                                                temperature.value, temperature.type,
                                                temperature.value, temperature.type,
                                                temperature.name,
                                                temperature.name,
+4 −4
Original line number Original line Diff line number Diff line
@@ -216,11 +216,11 @@ public class ThermalManagerServiceTest {
        verify(mEventListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
        verify(mEventListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
                .times(0)).notifyThrottling(any(Temperature.class));
                .times(0)).notifyThrottling(any(Temperature.class));
        verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
        verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
                .times(1)).onStatusChange(anyInt());
                .times(1)).onStatusChange(Temperature.THROTTLING_NONE);
        verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
        verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
                .times(0)).notifyThrottling(any(Temperature.class));
                .times(0)).notifyThrottling(any(Temperature.class));
        verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
        verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
                .times(1)).onStatusChange(anyInt());
                .times(1)).onStatusChange(Temperature.THROTTLING_NONE);
        resetListenerMock();
        resetListenerMock();
        mService.onBootPhase(SystemService.PHASE_ACTIVITY_MANAGER_READY);
        mService.onBootPhase(SystemService.PHASE_ACTIVITY_MANAGER_READY);
        ArgumentCaptor<Temperature> captor = ArgumentCaptor.forClass(Temperature.class);
        ArgumentCaptor<Temperature> captor = ArgumentCaptor.forClass(Temperature.class);
@@ -228,7 +228,7 @@ public class ThermalManagerServiceTest {
                .times(4)).notifyThrottling(captor.capture());
                .times(4)).notifyThrottling(captor.capture());
        assertListEqualsIgnoringOrder(mFakeHal.mTemperatureList, captor.getAllValues());
        assertListEqualsIgnoringOrder(mFakeHal.mTemperatureList, captor.getAllValues());
        verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
        verify(mStatusListener1, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
                .times(1)).onStatusChange(Temperature.THROTTLING_NONE);
                .times(0)).onStatusChange(Temperature.THROTTLING_NONE);
        captor = ArgumentCaptor.forClass(Temperature.class);
        captor = ArgumentCaptor.forClass(Temperature.class);
        verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
        verify(mEventListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
                .times(2)).notifyThrottling(captor.capture());
                .times(2)).notifyThrottling(captor.capture());
@@ -236,7 +236,7 @@ public class ThermalManagerServiceTest {
                new ArrayList<>(Arrays.asList(mFakeHal.mSkin1, mFakeHal.mSkin2)),
                new ArrayList<>(Arrays.asList(mFakeHal.mSkin1, mFakeHal.mSkin2)),
                captor.getAllValues());
                captor.getAllValues());
        verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
        verify(mStatusListener2, timeout(CALLBACK_TIMEOUT_MILLI_SEC)
                .times(1)).onStatusChange(Temperature.THROTTLING_NONE);
                .times(0)).onStatusChange(Temperature.THROTTLING_NONE);
    }
    }


    private void resetListenerMock() {
    private void resetListenerMock() {