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

Commit 729dd5b0 authored by David Lin's avatar David Lin Committed by Android (Google) Code Review
Browse files

Merge "Add requestSatelliteSessionStats API." into 24D1-dev

parents d0479606 d35fca1e
Loading
Loading
Loading
Loading
+30 −4
Original line number Diff line number Diff line
@@ -123,6 +123,16 @@ public class DatagramDispatcher extends Handler {
        return sInstance;
    }

    /**
     * @return The singleton instance of DatagramDispatcher.
     */
    public static DatagramDispatcher getInstance() {
        if (sInstance == null) {
            loge("DatagramDispatcher was not yet initialized.");
        }
        return sInstance;
    }

    /**
     * Create a DatagramDispatcher to send satellite datagrams.
     *
@@ -570,6 +580,22 @@ public class DatagramDispatcher extends Handler {
        }
    }

    /** Return pending user messages count */
    public int getPendingUserMessagesCount() {
        synchronized (mLock) {
            int pendingUserMessagesCount = 0;
            for (Entry<Long, SendSatelliteDatagramArgument> entry :
                    mPendingNonEmergencyDatagramsMap.entrySet()) {
                SendSatelliteDatagramArgument argument = entry.getValue();
                if (argument.datagramType != SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE) {
                    pendingUserMessagesCount += 1;
                }
            }
            pendingUserMessagesCount += mPendingEmergencyDatagramsMap.size();
            return pendingUserMessagesCount;
        }
    }

    /**
     * Posts the specified command to be executed on the main thread and returns immediately.
     *
@@ -600,11 +626,12 @@ public class DatagramDispatcher extends Handler {
        if (resultCode == SatelliteManager.SATELLITE_RESULT_SUCCESS) {
            mControllerMetricsStats.reportOutgoingDatagramSuccessCount(argument.datagramType,
                    mIsDemoMode);
            mSessionMetricsStats.addCountOfSuccessfulOutgoingDatagram();
            mSessionMetricsStats.addCountOfSuccessfulOutgoingDatagram(argument.datagramType);
        } else {
            mControllerMetricsStats.reportOutgoingDatagramFailCount(argument.datagramType,
                    mIsDemoMode);
            mSessionMetricsStats.addCountOfFailedOutgoingDatagram();
            mSessionMetricsStats.addCountOfFailedOutgoingDatagram(argument.datagramType,
                    resultCode);
        }
    }

@@ -809,8 +836,7 @@ public class DatagramDispatcher extends Handler {
            }

            // Abort sending all the pending datagrams
            abortSendingPendingDatagrams(argument.subId,
                    SatelliteManager.SATELLITE_RESULT_REQUEST_ABORTED);
            abortSendingPendingDatagrams(argument.subId, SATELLITE_RESULT_MODEM_TIMEOUT);
        }
    }

+14 −0
Original line number Diff line number Diff line
@@ -2911,6 +2911,20 @@ public class SatelliteController extends Handler {
        return new ArrayList<>();
    }

    /**
     * Request to get the {@link SatelliteSessionStats} of the satellite service.
     *
     * @param subId The subId of the subscription to the satellite session stats for.
     * @param result The result receiver that returns the {@link SatelliteSessionStats}
     *               if the request is successful or an error code if the request failed.
     */
    public void requestSatelliteSessionStats(int subId, @NonNull ResultReceiver result) {
        if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
            return;
        }
        mSessionMetricsStats.requestSatelliteSessionStats(subId, result);
    }

    /**
     * Get the carrier-enabled emergency call wait for connection timeout millis
     */
+76 −2
Original line number Diff line number Diff line
@@ -17,13 +17,18 @@
package com.android.internal.telephony.satellite.metrics;

import static android.telephony.satellite.NtnSignalStrength.NTN_SIGNAL_STRENGTH_NONE;
import static android.telephony.satellite.SatelliteManager.SATELLITE_RESULT_SUCCESS;

import android.annotation.NonNull;
import android.os.Bundle;
import android.os.ResultReceiver;
import android.telephony.satellite.NtnSignalStrength;
import android.telephony.satellite.SatelliteManager;
import android.telephony.satellite.SatelliteSessionStats;
import android.util.Log;

import com.android.internal.telephony.metrics.SatelliteStats;
import com.android.internal.telephony.satellite.DatagramDispatcher;

/**
 * Stats to log to satellite session metrics
@@ -41,6 +46,8 @@ public class SessionMetricsStats {
    private int mSessionDurationSec;
    private int mCountOfSuccessfulOutgoingDatagram;
    private int mCountOfFailedOutgoingDatagram;
    private int mCountOfTimedOutUserMessagesWaitingForConnection;
    private int mCountOfTimedOutUserMessagesWaitingForAck;
    private int mCountOfSuccessfulIncomingDatagram;
    private int mCountOfIncomingDatagramFailed;
    private boolean mIsDemoMode;
@@ -111,7 +118,13 @@ public class SessionMetricsStats {
    }

    /** Increase the count of successful outgoing datagram transmission. */
    public SessionMetricsStats addCountOfSuccessfulOutgoingDatagram() {
    public SessionMetricsStats addCountOfSuccessfulOutgoingDatagram(
            @NonNull @SatelliteManager.DatagramType int datagramType) {
        if (datagramType == SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE) {
            // Ignore KEEP_ALIVE messages
            return this;
        }

        mCountOfSuccessfulOutgoingDatagram++;
        logd("addCountOfSuccessfulOutgoingDatagram: current count="
                + mCountOfSuccessfulOutgoingDatagram);
@@ -119,9 +132,51 @@ public class SessionMetricsStats {
    }

    /** Increase the count of failed outgoing datagram transmission. */
    public SessionMetricsStats addCountOfFailedOutgoingDatagram() {
    public SessionMetricsStats addCountOfFailedOutgoingDatagram(
            @NonNull @SatelliteManager.DatagramType int datagramType,
            @NonNull @SatelliteManager.SatelliteResult int resultCode) {
        if (datagramType == SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE) {
            // Ignore KEEP_ALIVE messages
            return this;
        }

        mCountOfFailedOutgoingDatagram++;
        logd("addCountOfFailedOutgoingDatagram: current count=" + mCountOfFailedOutgoingDatagram);

        if (resultCode == SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE) {
            addCountOfTimedOutUserMessagesWaitingForConnection(datagramType);
        } else if (resultCode == SatelliteManager.SATELLITE_RESULT_MODEM_TIMEOUT) {
            addCountOfTimedOutUserMessagesWaitingForAck(datagramType);
        }

        return this;
    }

    /** Increase the count of user messages that timed out waiting for connection. */
    private SessionMetricsStats addCountOfTimedOutUserMessagesWaitingForConnection(
            @NonNull @SatelliteManager.DatagramType int datagramType) {
        if (datagramType == SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE) {
            // Ignore KEEP_ALIVE messages
            return this;
        }

        mCountOfTimedOutUserMessagesWaitingForConnection++;
        logd("addCountOfTimedOutUserMessagesWaitingForConnection: current count="
                + mCountOfTimedOutUserMessagesWaitingForConnection);
        return this;
    }

    /** Increase the count of user messages that timed out waiting for ack. */
    private SessionMetricsStats addCountOfTimedOutUserMessagesWaitingForAck(
            @NonNull @SatelliteManager.DatagramType int datagramType) {
        if (datagramType == SatelliteManager.DATAGRAM_TYPE_KEEP_ALIVE) {
            // Ignore KEEP_ALIVE messages
            return this;
        }

        mCountOfTimedOutUserMessagesWaitingForAck++;
        logd("addCountOfTimedOutUserMessagesWaitingForAck: current count="
                + mCountOfTimedOutUserMessagesWaitingForAck);
        return this;
    }

@@ -180,6 +235,23 @@ public class SessionMetricsStats {
        initializeSessionMetricsParam();
    }

    /** Returns {@link SatelliteSessionStats} of the satellite service. */
    public void requestSatelliteSessionStats(int subId, @NonNull ResultReceiver result) {
        Bundle bundle = new Bundle();
        SatelliteSessionStats sessionStats = new SatelliteSessionStats.Builder()
                .setCountOfSuccessfulUserMessages(mCountOfSuccessfulOutgoingDatagram)
                .setCountOfUnsuccessfulUserMessages(mCountOfFailedOutgoingDatagram)
                .setCountOfTimedOutUserMessagesWaitingForConnection(
                        mCountOfTimedOutUserMessagesWaitingForConnection)
                .setCountOfTimedOutUserMessagesWaitingForAck(
                        mCountOfTimedOutUserMessagesWaitingForAck)
                .setCountOfUserMessagesInQueueToBeSent(
                        DatagramDispatcher.getInstance().getPendingUserMessagesCount())
                .build();
        bundle.putParcelable(SatelliteManager.KEY_SESSION_STATS, sessionStats);
        result.send(SATELLITE_RESULT_SUCCESS, bundle);
    }

    /** Returns the processing time for satellite session initialization. */
    public long getSessionInitializationProcessingTimeMillis() {
        return mInitializationProcessingTimeMillis;
@@ -199,6 +271,8 @@ public class SessionMetricsStats {
        mSessionDurationSec = 0;
        mCountOfSuccessfulOutgoingDatagram = 0;
        mCountOfFailedOutgoingDatagram = 0;
        mCountOfTimedOutUserMessagesWaitingForConnection = 0;
        mCountOfTimedOutUserMessagesWaitingForAck = 0;
        mCountOfSuccessfulIncomingDatagram = 0;
        mCountOfIncomingDatagramFailed = 0;
        mIsDemoMode = false;
+20 −10
Original line number Diff line number Diff line
@@ -238,7 +238,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
                            eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
                            eq(SATELLITE_RESULT_SUCCESS));
            verifyNoMoreInteractions(mMockDatagramController);
            verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfSuccessfulOutgoingDatagram(eq(datagramType));
            verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
                    any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
            assertFalse(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
@@ -279,7 +280,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
            assertThat(mResultListener.peek()).isEqualTo(
                    SatelliteManager.SATELLITE_RESULT_NOT_REACHABLE);
            assertFalse(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
            verify(mMockSessionMetricsStats, times(1)).addCountOfFailedOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfFailedOutgoingDatagram(anyInt(), anyInt());

            mResultListener.clear();
            mDatagramDispatcherUT.onSatelliteModemStateChanged(
@@ -311,7 +313,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
            assertThat(mResultListener.peek()).isEqualTo(
                    SatelliteManager.SATELLITE_RESULT_REQUEST_ABORTED);
            assertFalse(mDatagramDispatcherUT.isDatagramWaitForConnectedStateTimerStarted());
            verify(mMockSessionMetricsStats, times(1)).addCountOfFailedOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfFailedOutgoingDatagram(anyInt(), anyInt());
        }
    }

@@ -372,7 +375,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
            verify(mMockSatelliteModemInterface, times(1)).sendSatelliteDatagram(
                    any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
            assertThat(mResultListener.peek()).isEqualTo(SATELLITE_RESULT_SUCCESS);
            verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfSuccessfulOutgoingDatagram(anyInt());
            clearInvocations(mMockSatelliteModemInterface);
            clearInvocations(mMockDatagramController);
            clearInvocations(mMockSessionMetricsStats);
@@ -406,7 +410,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
                    any(SatelliteDatagram.class), anyBoolean(), anyBoolean(), any(Message.class));
            verify(mMockSatelliteModemInterface).abortSendingSatelliteDatagrams(any(Message.class));
            assertThat(mResultListener.peek()).isEqualTo(SATELLITE_RESULT_MODEM_TIMEOUT);
            verify(mMockSessionMetricsStats, times(1)).addCountOfFailedOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfFailedOutgoingDatagram(anyInt(), anyInt());

            clearInvocations(mMockSatelliteModemInterface);
            clearInvocations(mMockDatagramController);
@@ -453,7 +458,8 @@ public class DatagramDispatcherTest extends TelephonyTest {

        assertThat(mResultListener.peek()).isEqualTo(
                SatelliteManager.SATELLITE_RESULT_SERVICE_ERROR);
        verify(mMockSessionMetricsStats, times(1)).addCountOfFailedOutgoingDatagram();
        verify(mMockSessionMetricsStats, times(1))
                .addCountOfFailedOutgoingDatagram(anyInt(), anyInt());
    }

    @Test
@@ -494,7 +500,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
                            eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
                            eq(SATELLITE_RESULT_SUCCESS));
            assertThat(mResultListener.peek()).isEqualTo(SATELLITE_RESULT_SUCCESS);
            verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfSuccessfulOutgoingDatagram(eq(datagramType));
            mDatagramDispatcherUT.setDemoMode(false);
            mDatagramDispatcherUT.setDeviceAlignedWithSatellite(false);
        }
@@ -542,7 +549,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
            verify(mMockDatagramController, never()).pollPendingSatelliteDatagrams(anyInt(), any());
            verify(mMockDatagramController, never()).pushDemoModeDatagram(
                    anyInt(), any(SatelliteDatagram.class));
            verify(mMockSessionMetricsStats, times(1)).addCountOfFailedOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfFailedOutgoingDatagram(anyInt(), anyInt());
        }

        mDatagramDispatcherUT.setDemoMode(false);
@@ -587,7 +595,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
                .updateSendStatus(eq(SUB_ID), eq(DATAGRAM_TYPE2),
                        eq(SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE), eq(0),
                        eq(SATELLITE_RESULT_SUCCESS));
        verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
        verify(mMockSessionMetricsStats, times(1))
                .addCountOfSuccessfulOutgoingDatagram(eq(DATAGRAM_TYPE2));

        mDatagramDispatcherUT.setDemoMode(false);
        mDatagramDispatcherUT.setDeviceAlignedWithSatellite(false);
@@ -699,7 +708,8 @@ public class DatagramDispatcherTest extends TelephonyTest {
            verify(mMockDatagramController).pushDemoModeDatagram(
                    anyInt(), any(SatelliteDatagram.class));
            verify(mMockDatagramController).pollPendingSatelliteDatagrams(anyInt(), any());
            verify(mMockSessionMetricsStats, times(1)).addCountOfSuccessfulOutgoingDatagram();
            verify(mMockSessionMetricsStats, times(1))
                    .addCountOfSuccessfulOutgoingDatagram(anyInt());

            // Test when overlay config config_send_satellite_datagram_to_modem_in_demo_mode is
            // false