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

Commit dd9f89c9 authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge changes from topic "metrics_datastack" am: c1eeb4e1

parents d40c7530 c1eeb4e1
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ import com.android.internal.telephony.data.DataNetworkController.NetworkRequestL
import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEntry;
import com.android.internal.telephony.data.DataRetryManager.DataRetryEntry;
import com.android.internal.telephony.data.TelephonyNetworkAgent.TelephonyNetworkAgentCallback;
import com.android.internal.telephony.metrics.DataCallSessionStats;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IState;
@@ -446,6 +447,10 @@ public class DataNetwork extends StateMachine {
    /** The log tag. */
    private String mLogTag;

    /** Metrics of per data network connection. */
    private final DataCallSessionStats mDataCallSessionStats;


    /**
     * The unique context id assigned by the data service in {@link DataCallResponse#getId()}. One
     * for {@link AccessNetworkConstants#TRANSPORT_TYPE_WWAN} and one for
@@ -762,6 +767,7 @@ public class DataNetwork extends StateMachine {
                        sendMessage(EVENT_SUBSCRIPTION_PLAN_OVERRIDE);
                    }});
        mDataConfigManager = mDataNetworkController.getDataConfigManager();
        mDataCallSessionStats = new DataCallSessionStats(mPhone);
        mDataNetworkCallback = callback;
        mDataProfile = dataProfile;
        mTransport = transport;
@@ -879,6 +885,7 @@ public class DataNetwork extends StateMachine {
                    updateSuspendState();
                    updateTcpBufferSizes();
                    updateBandwidthFromDataConfig();
                    updateDataCallSessionStatsOfDrsOrRatChange((AsyncResult) msg.obj);
                    break;
                }
                case EVENT_ATTACH_NETWORK_REQUEST: {
@@ -1218,6 +1225,7 @@ public class DataNetwork extends StateMachine {
            quit();
            notifyPreciseDataConnectionState();
            mNetworkAgent.unregister();
            mDataCallSessionStats.onDataCallDisconnected(mFailCause);

            if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WLAN
                    && mPduSessionId != DataCallResponse.PDU_SESSION_ID_NOT_SET) {
@@ -1594,6 +1602,19 @@ public class DataNetwork extends StateMachine {
        return mDataProfile;
    }

    /**
     * Once RIL Data Radio Technology changes, the new radio technology will be returned in
     * AsyncResult.
     * See
     * {@link com.android.internal.telephony.ServiceStateTracker#registerForDataRegStateOrRatChanged}
     *
     * @param ar RegistrationInfo: {@code Pair(drs, rat)}
     */
    private void updateDataCallSessionStatsOfDrsOrRatChange(AsyncResult ar) {
        Pair<Integer, Integer> drsRatPair = (Pair<Integer, Integer>) ar.result;
        mDataCallSessionStats.onDrsOrRatChanged(drsRatPair.second);
    }

    /**
     * Update data suspended state.
     */
@@ -1679,6 +1700,10 @@ public class DataNetwork extends StateMachine {
                        trafficDescriptor, matchAllRuleAllowed,
                        obtainMessage(EVENT_SETUP_DATA_CALL_RESPONSE));

        int apnTypeBitmask = mDataProfile.getApnSetting() != null
                ? mDataProfile.getApnSetting().getApnTypeBitmask() : ApnSetting.TYPE_NONE;
        mDataCallSessionStats.onSetupDataCall(apnTypeBitmask);

        logl("setupData: accessNetwork="
                + AccessNetworkType.toString(accessNetwork) + ", " + mDataProfile
                + ", isModemRoaming=" + isModemRoaming + ", allowRoaming=" + allowRoaming
@@ -1934,6 +1959,18 @@ public class DataNetwork extends StateMachine {
                            DataNetwork.this, requestList, mFailCause, retryDelayMillis));
            transitionTo(mDisconnectedState);
        }

        int apnTypeBitmask = ApnSetting.TYPE_NONE;
        int protocol = ApnSetting.PROTOCOL_UNKNOWN;
        if (mDataProfile.getApnSetting() != null) {
            apnTypeBitmask = mDataProfile.getApnSetting().getApnTypeBitmask();
            protocol = mDataProfile.getApnSetting().getProtocol();
        }
        mDataCallSessionStats.onSetupDataCallResponse(response,
                getDataNetworkType(),
                apnTypeBitmask,
                protocol,
                mFailCause);
    }

    /**
@@ -1962,6 +1999,7 @@ public class DataNetwork extends StateMachine {
        // TODO: Need to support DataService.REQUEST_REASON_SHUTDOWN
        mDataServiceManagers.get(mTransport).deactivateDataCall(mCid.get(mTransport),
                DataService.REQUEST_REASON_NORMAL, null);
        mDataCallSessionStats.setDeactivateDataCallReason(DataService.REQUEST_REASON_NORMAL);
        mInvokedDataDeactivation = true;
    }

+2 −1
Original line number Diff line number Diff line
@@ -2794,7 +2794,8 @@ public class DataConnection extends StateMachine {
                    }
                    retVal = HANDLED;
                    mDataCallSessionStats
                            .onSetupDataCallResponse(dataCallResponse, cp.mRilRat,
                            .onSetupDataCallResponse(dataCallResponse,
                                    ServiceState.rilRadioTechnologyToNetworkType(cp.mRilRat),
                                    getApnTypeBitmask(), mApnSetting.getProtocol(),
                                    result.mFailCause);
                    break;
+2 −4
Original line number Diff line number Diff line
@@ -74,14 +74,14 @@ public class DataCallSessionStats {
     * Updates the ongoing dataCall's atom for data call response event.
     *
     * @param response setup Data call response
     * @param radioTechnology The data call RAT
     * @param currentRat The data call current Network Type
     * @param apnTypeBitmask APN type bitmask
     * @param protocol Data connection protocol
     * @param failureCause failure cause as per android.telephony.DataFailCause
     */
    public synchronized void onSetupDataCallResponse(
            @Nullable DataCallResponse response,
            @RilRadioTechnology int radioTechnology,
            @NetworkType int currentRat,
            @ApnType int apnTypeBitmask,
            @ProtocolType int protocol,
            @DataFailureCause int failureCause) {
@@ -92,7 +92,6 @@ public class DataCallSessionStats {
            return;
        }

        @NetworkType int currentRat = ServiceState.rilRadioTechnologyToNetworkType(radioTechnology);
        if (currentRat != TelephonyManager.NETWORK_TYPE_UNKNOWN) {
            mDataCallSession.ratAtEnd = currentRat;
            mDataCallSession.bandAtEnd =
@@ -113,7 +112,6 @@ public class DataCallSessionStats {
                    (int) Math.min(response.getRetryDurationMillis(), Integer.MAX_VALUE);
            // If setup has failed, then store the atom
            if (failureCause != DataFailCause.NONE) {
                mDataCallSession.failureCause = failureCause;
                mDataCallSession.oosAtEnd = getIsOos();
                mDataCallSession.setupFailed = true;
                mDataCallSession.ongoing = false;
+42 −16
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.telephony.Annotation.DataFailureCause;
import android.telephony.DataFailCause;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PreciseDataConnectionState;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
@@ -54,11 +55,13 @@ import android.telephony.data.NetworkSliceInfo;
import android.telephony.data.TrafficDescriptor;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.Pair;
import android.util.SparseArray;

import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason;
import com.android.internal.telephony.data.DataNetwork.DataNetworkCallback;
import com.android.internal.telephony.metrics.DataCallSessionStats;

import org.junit.After;
import org.junit.Before;
@@ -130,6 +133,7 @@ public class DataNetworkTest extends TelephonyTest {

    // Mocked classes
    private DataNetworkCallback mDataNetworkCallback;
    private DataCallSessionStats mDataCallSessionStats;

    private final NetworkRegistrationInfo mIwlanNetworkRegistrationInfo =
            new NetworkRegistrationInfo.Builder()
@@ -193,10 +197,17 @@ public class DataNetworkTest extends TelephonyTest {
                any(Message.class));
    }

    private void sendServiceStateChangedEvent(@ServiceState.RegState int dataRegState,
            @ServiceState.RilRadioTechnology int rat) {
        mDataNetworkUT.obtainMessage(9/*EVENT_SERVICE_STATE_CHANGED*/,
                new AsyncResult(null, new Pair<>(dataRegState, rat), null)).sendToTarget();
    }

    @Before
    public void setUp() throws Exception {
        super.setUp(getClass().getSimpleName());
        mDataNetworkCallback = Mockito.mock(DataNetworkCallback.class);
        mDataCallSessionStats = Mockito.mock(DataCallSessionStats.class);
        doReturn(true).when(mPhone).isUsingNewDataStack();
        doAnswer(invocation -> {
            ((Runnable) invocation.getArguments()[0]).run();
@@ -241,7 +252,7 @@ public class DataNetworkTest extends TelephonyTest {
    // The purpose of this test is to make sure the network request insertion/removal works as
    // expected, and make sure it is always sorted.
    @Test
    public void testCreateDataNetwork() {
    public void testCreateDataNetwork() throws Exception {
        DataNetworkController.NetworkRequestList
                networkRequestList = new DataNetworkController.NetworkRequestList();
        networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder()
@@ -252,9 +263,12 @@ public class DataNetworkTest extends TelephonyTest {

        mDataNetworkUT = new DataNetwork(mPhone, Looper.myLooper(), mDataServiceManagers,
                mInternetDataProfile, networkRequestList,
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN, DataAllowedReason.NORMAL,
                mDataNetworkCallback);
        mDataNetworkUT.sendMessage(9/*EVENT_SERVICE_STATE_CHANGED*/);
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
                DataAllowedReason.NORMAL, mDataNetworkCallback);
        replaceInstance(DataNetwork.class, "mDataCallSessionStats",
                mDataNetworkUT, mDataCallSessionStats);
        sendServiceStateChangedEvent(ServiceState.STATE_IN_SERVICE,
                ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN);

        processAllMessages();
        verify(mSimulatedCommandsVerifier, never()).allocatePduSessionId(any(Message.class));
@@ -305,7 +319,7 @@ public class DataNetworkTest extends TelephonyTest {
    }

    @Test
    public void testCreateDataNetworkOnEnterpriseSlice() {
    public void testCreateDataNetworkOnEnterpriseSlice() throws Exception {
        DataNetworkController.NetworkRequestList
                networkRequestList = new DataNetworkController.NetworkRequestList();
        networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder()
@@ -324,7 +338,10 @@ public class DataNetworkTest extends TelephonyTest {
                mInternetDataProfile, networkRequestList,
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN, DataAllowedReason.NORMAL,
                mDataNetworkCallback);
        mDataNetworkUT.sendMessage(9/*EVENT_SERVICE_STATE_CHANGED*/);
        replaceInstance(DataNetwork.class, "mDataCallSessionStats",
                mDataNetworkUT, mDataCallSessionStats);
        sendServiceStateChangedEvent(ServiceState.STATE_IN_SERVICE,
                ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN);

        processAllMessages();

@@ -334,7 +351,7 @@ public class DataNetworkTest extends TelephonyTest {
    }

    @Test
    public void testCreateDataNetworkOnUrllcSlice() {
    public void testCreateDataNetworkOnUrllcSlice() throws Exception {
        DataNetworkController.NetworkRequestList
                networkRequestList = new DataNetworkController.NetworkRequestList();
        networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder()
@@ -352,7 +369,10 @@ public class DataNetworkTest extends TelephonyTest {
                mInternetDataProfile, networkRequestList,
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN, DataAllowedReason.NORMAL,
                mDataNetworkCallback);
        mDataNetworkUT.sendMessage(9/*EVENT_SERVICE_STATE_CHANGED*/);
        replaceInstance(DataNetwork.class, "mDataCallSessionStats",
                mDataNetworkUT, mDataCallSessionStats);
        sendServiceStateChangedEvent(ServiceState.STATE_IN_SERVICE,
                ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN);

        processAllMessages();

@@ -362,7 +382,7 @@ public class DataNetworkTest extends TelephonyTest {
    }

    @Test
    public void testCreateDataNetworkOnEmbbSlice() {
    public void testCreateDataNetworkOnEmbbSlice() throws Exception {
        DataNetworkController.NetworkRequestList
                networkRequestList = new DataNetworkController.NetworkRequestList();
        networkRequestList.add(new TelephonyNetworkRequest(new NetworkRequest.Builder()
@@ -380,7 +400,10 @@ public class DataNetworkTest extends TelephonyTest {
                mInternetDataProfile, networkRequestList,
                AccessNetworkConstants.TRANSPORT_TYPE_WWAN, DataAllowedReason.NORMAL,
                mDataNetworkCallback);
        mDataNetworkUT.sendMessage(9/*EVENT_SERVICE_STATE_CHANGED*/);
        replaceInstance(DataNetwork.class, "mDataCallSessionStats",
                mDataNetworkUT, mDataCallSessionStats);
        sendServiceStateChangedEvent(ServiceState.STATE_IN_SERVICE,
                ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN);

        processAllMessages();

@@ -391,7 +414,7 @@ public class DataNetworkTest extends TelephonyTest {

    // The purpose of this test is to make sure data could be torn down properly.
    @Test
    public void testTearDown() {
    public void testTearDown() throws Exception {
        testCreateDataNetwork();
        sendTearDownEvent(AccessNetworkConstants.TRANSPORT_TYPE_WWAN, 123,
                DataFailCause.EMM_DETACHED);
@@ -424,7 +447,7 @@ public class DataNetworkTest extends TelephonyTest {
    }

    @Test
    public void testCreateDataNetworkOnIwlan() {
    public void testCreateDataNetworkOnIwlan() throws Exception {
        doReturn(mIwlanNetworkRegistrationInfo).when(mServiceState).getNetworkRegistrationInfo(
                eq(NetworkRegistrationInfo.DOMAIN_PS),
                eq(AccessNetworkConstants.TRANSPORT_TYPE_WLAN));
@@ -442,7 +465,10 @@ public class DataNetworkTest extends TelephonyTest {
        mDataNetworkUT = new DataNetwork(mPhone, Looper.myLooper(), mDataServiceManagers,
                mImsDataProfile, networkRequestList, AccessNetworkConstants.TRANSPORT_TYPE_WLAN,
                DataAllowedReason.NORMAL, mDataNetworkCallback);
        mDataNetworkUT.sendMessage(9/*EVENT_SERVICE_STATE_CHANGED*/);
        replaceInstance(DataNetwork.class, "mDataCallSessionStats",
                mDataNetworkUT, mDataCallSessionStats);
        sendServiceStateChangedEvent(ServiceState.STATE_IN_SERVICE,
                ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN);

        processAllMessages();
        verify(mSimulatedCommandsVerifier).allocatePduSessionId(any(Message.class));
@@ -491,7 +517,7 @@ public class DataNetworkTest extends TelephonyTest {
    }

    @Test
    public void testTearDownIwlan() {
    public void testTearDownIwlan() throws Exception {
        testCreateDataNetworkOnIwlan();
        sendTearDownEvent(AccessNetworkConstants.TRANSPORT_TYPE_WLAN, 123,
                DataFailCause.EMM_DETACHED);
@@ -523,7 +549,7 @@ public class DataNetworkTest extends TelephonyTest {
    }

    @Test
    public void testHandover() {
    public void testHandover() throws Exception {
        testCreateDataNetwork();

        setSuccessfulSetupDataResponse(mMockedWlanDataServiceManager, 456);
@@ -565,7 +591,7 @@ public class DataNetworkTest extends TelephonyTest {
    }

    @Test
    public void testHandoverFailed() {
    public void testHandoverFailed() throws Exception {
        testCreateDataNetwork();

        setFailedSetupDataResponse(mMockedWlanDataServiceManager,