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

Commit 70c14604 authored by Paul Colța's avatar Paul Colța Committed by Android (Google) Code Review
Browse files

Merge "HDMI: Update eARC atom logging with new log reasons" into main

parents fbf560c0 590e6782
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));
    }
}