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

Commit 590e6782 authored by Paul Colta's avatar Paul Colta
Browse files

HDMI: Update eARC atom logging with new log reasons

Log atoms when eARC state is changed to an unexpected state or when the port does not support eARC.
Include unit tests to cover this change.

Bug: 290884570
Test: atest HdmiCecAtomLoggingTvTest
Change-Id: I5a4f7d4247083668be82f9a3639b446d9f5881dc
parent 4f31ec72
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -4855,11 +4855,13 @@ public class HdmiControlService extends SystemService {
    @ServiceThreadOnly
    void handleEarcStateChange(int status, int portId) {
        assertRunOnServiceThread();
        int oldEarcStatus = getEarcStatus();
        if (!getPortInfo(portId).isEarcSupported()) {
            Slog.w(TAG, "Tried to update eARC status on a port that doesn't support eARC.");
            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(), oldEarcStatus,
                    status, HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_UNSUPPORTED_PORT);
            return;
        }
        int oldEarcStatus = getEarcStatus();
        if (mEarcLocalDevice != null) {
            mEarcLocalDevice.handleEarcStateChange(status);
            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(),
@@ -4872,6 +4874,10 @@ public class HdmiControlService extends SystemService {
            startArcAction(true, null);
            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(),
                    oldEarcStatus, status, HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED);
        } else {
            getAtomWriter().earcStatusChanged(isEarcSupported(), isEarcEnabled(),
                    oldEarcStatus, status,
                    HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_WRONG_STATE);
        }
    }

+43 −0
Original line number Diff line number Diff line
@@ -19,7 +19,9 @@ import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_EARC_PENDING;
import static com.android.server.hdmi.Constants.HDMI_EARC_STATUS_UNKNOWN;
import static com.android.server.hdmi.HdmiControlService.WAKE_UP_SCREEN_ON;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
@@ -206,4 +208,45 @@ public class HdmiCecAtomLoggingTvTest {
                .earcStatusChanged(false, false, HDMI_EARC_STATUS_UNKNOWN,
                        HDMI_EARC_STATUS_UNKNOWN, HdmiStatsEnums.LOG_REASON_WAKE);
    }

    @Test
    public void testEarcStatusChanged_handleEarcStateChange_unSupportedPort_writesAtom() {
        // Initialize HDMI port with eARC not supported.
        HdmiPortInfo[] hdmiPortInfos = new HdmiPortInfo[1];
        hdmiPortInfos[0] =
                new HdmiPortInfo.Builder(EARC_PORT_ID, HdmiPortInfo.PORT_OUTPUT, 0x0000)
                        .setCecSupported(true)
                        .setMhlSupported(false)
                        .setArcSupported(false)
                        .setEarcSupported(false)
                        .build();
        mNativeWrapper.setPortInfo(hdmiPortInfos);
        mNativeWrapper.setPortConnectionStatus(EARC_PORT_ID, true);
        mHdmiControlServiceSpy.initService();
        mTestLooper.dispatchAll();

        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_ENABLED);
        mTestLooper.dispatchAll();
        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);

        mHdmiControlServiceSpy.handleEarcStateChange(HDMI_EARC_STATUS_EARC_PENDING, EARC_PORT_ID);
        verify(mHdmiCecAtomWriterSpy, times(1))
                .earcStatusChanged(eq(false), eq(true), anyInt(),
                        eq(HDMI_EARC_STATUS_EARC_PENDING),
                        eq(HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_UNSUPPORTED_PORT));
    }

    @Test
    public void testEarcStatusChanged_handleEarcStateChange_wrongState_writesAtom() {
        mHdmiControlServiceSpy.setEarcEnabled(HdmiControlManager.EARC_FEATURE_DISABLED);
        mTestLooper.dispatchAll();
        Mockito.clearInvocations(mHdmiCecAtomWriterSpy);

        // mEarcLocalDevice should be empty since eARC is disabled.
        mHdmiControlServiceSpy.handleEarcStateChange(HDMI_EARC_STATUS_EARC_PENDING, EARC_PORT_ID);
        verify(mHdmiCecAtomWriterSpy, times(1))
                .earcStatusChanged(eq(true), eq(false), anyInt(),
                        eq(HDMI_EARC_STATUS_EARC_PENDING),
                        eq(HdmiStatsEnums.LOG_REASON_EARC_STATUS_CHANGED_WRONG_STATE));
    }
}