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

Commit ea050038 authored by Pengquan Meng's avatar Pengquan Meng Committed by android-build-merger
Browse files

Merge "Add DSDS metrics to telephonyMetrics"

am: 41336f2e

Change-Id: I4f40498f4e650411fd445fc8f4cd56c6a6f51369
parents 96aa3477 41336f2e
Loading
Loading
Loading
Loading
+20 −13
Original line number Original line Diff line number Diff line
@@ -48,6 +48,7 @@ import android.util.Log;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.IccCardConstants.State;
import com.android.internal.telephony.IccCardConstants.State;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.UiccCard;
import com.android.internal.telephony.uicc.UiccCard;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.uicc.UiccController;
@@ -279,6 +280,9 @@ public class SubscriptionController extends ISub.Stub {
        mContext.sendBroadcast(intent);
        mContext.sendBroadcast(intent);
     }
     }


    /**
     * Notify the changed of subscription info.
     */
    public void notifySubscriptionInfoChanged() {
    public void notifySubscriptionInfoChanged() {
        ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
        ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface(ServiceManager.getService(
                "telephony.registry"));
                "telephony.registry"));
@@ -291,6 +295,9 @@ public class SubscriptionController extends ISub.Stub {


        // FIXME: Remove if listener technique accepted.
        // FIXME: Remove if listener technique accepted.
        broadcastSimInfoContentChanged();
        broadcastSimInfoContentChanged();

        TelephonyMetrics metrics = TelephonyMetrics.getInstance();
        metrics.updateActiveSubscriptionInfoList(mCacheActiveSubInfoList);
    }
    }


    /**
    /**
+3 −0
Original line number Original line Diff line number Diff line
@@ -51,6 +51,7 @@ import android.text.TextUtils;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.euicc.EuiccController;
import com.android.internal.telephony.euicc.EuiccController;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.IccUtils;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.uicc.UiccController;
@@ -781,6 +782,7 @@ public class SubscriptionInfoUpdater extends Handler {
            logd("Broadcasting intent ACTION_SIM_CARD_STATE_CHANGED " + simStateString(state)
            logd("Broadcasting intent ACTION_SIM_CARD_STATE_CHANGED " + simStateString(state)
                    + " for phone: " + phoneId);
                    + " for phone: " + phoneId);
            mContext.sendBroadcast(i, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
            mContext.sendBroadcast(i, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
            TelephonyMetrics.getInstance().updateSimState(phoneId, state);
        }
        }
    }
    }


@@ -800,6 +802,7 @@ public class SubscriptionInfoUpdater extends Handler {
            logd("Broadcasting intent ACTION_SIM_APPLICATION_STATE_CHANGED " + simStateString(state)
            logd("Broadcasting intent ACTION_SIM_APPLICATION_STATE_CHANGED " + simStateString(state)
                    + " for phone: " + phoneId);
                    + " for phone: " + phoneId);
            mContext.sendBroadcast(i, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
            mContext.sendBroadcast(i, Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
            TelephonyMetrics.getInstance().updateSimState(phoneId, state);
        }
        }
    }
    }


+12 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,9 @@ import static com.android.internal.telephony.nano.TelephonyProto.TelephonySettin


import android.os.SystemClock;
import android.os.SystemClock;


import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.PhoneStatus;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.Type;

public class TelephonyEventBuilder {
public class TelephonyEventBuilder {
    private final TelephonyEvent mEvent = new TelephonyEvent();
    private final TelephonyEvent mEvent = new TelephonyEvent();


@@ -133,4 +136,13 @@ public class TelephonyEventBuilder {
        mEvent.carrierKeyChange = carrierKeyChange;
        mEvent.carrierKeyChange = carrierKeyChange;
        return this;
        return this;
    }
    }

    /**
     * Set and build phone status changed event.
     */
    public TelephonyEventBuilder setPhoneStatusChange(PhoneStatus phoneStatus) {
        mEvent.type = Type.PHONE_STATUS_CHANGED;
        mEvent.phoneStatus = phoneStatus;
        return this;
    }
}
}
+89 −1
Original line number Original line Diff line number Diff line
@@ -45,6 +45,8 @@ import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.SmsManager;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.telephony.SmsMessage;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyHistogram;
import android.telephony.TelephonyHistogram;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.telephony.data.DataCallResponse;
import android.telephony.data.DataCallResponse;
@@ -69,10 +71,12 @@ import com.android.internal.telephony.SmsResponse;
import com.android.internal.telephony.UUSInfo;
import com.android.internal.telephony.UUSInfo;
import com.android.internal.telephony.imsphone.ImsPhoneCall;
import com.android.internal.telephony.imsphone.ImsPhoneCall;
import com.android.internal.telephony.nano.TelephonyProto;
import com.android.internal.telephony.nano.TelephonyProto;
import com.android.internal.telephony.nano.TelephonyProto.ActiveSubscriptionInfo;
import com.android.internal.telephony.nano.TelephonyProto.ImsCapabilities;
import com.android.internal.telephony.nano.TelephonyProto.ImsCapabilities;
import com.android.internal.telephony.nano.TelephonyProto.ImsConnectionState;
import com.android.internal.telephony.nano.TelephonyProto.ImsConnectionState;
import com.android.internal.telephony.nano.TelephonyProto.ModemPowerStats;
import com.android.internal.telephony.nano.TelephonyProto.ModemPowerStats;
import com.android.internal.telephony.nano.TelephonyProto.RilDataCall;
import com.android.internal.telephony.nano.TelephonyProto.RilDataCall;
import com.android.internal.telephony.nano.TelephonyProto.SimState;
import com.android.internal.telephony.nano.TelephonyProto.SmsSession;
import com.android.internal.telephony.nano.TelephonyProto.SmsSession;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.CallState;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyCallSession.Event.CallState;
@@ -83,6 +87,7 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.Carrier
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierIdMatchingResult;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierIdMatchingResult;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.ModemRestart;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.ModemRestart;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.PhoneStatus;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall.DeactivateReason;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall.DeactivateReason;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCall;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCall;
@@ -167,6 +172,25 @@ public class TelephonyMetrics {
     */
     */
    private final SparseArray<TelephonySettings> mLastSettings = new SparseArray<>();
    private final SparseArray<TelephonySettings> mLastSettings = new SparseArray<>();


    /**
     * Last sim state, indexed by phone id.
     */
    private final SparseArray<Integer> mLastSimState = new SparseArray<>();

    /**
     * Last active subscription information, indexed by phone id.
     */
    private final SparseArray<ActiveSubscriptionInfo> mLastActiveSubscriptionInfos =
            new SparseArray<>();

    /**
     * The last modem state represent by a bitmap, the i-th bit(LSB) indicates the i-th modem
     * state(0 - disabled, 1 - enabled).
     *
     * TODO: initialize the enabled modem bitmap when it's possible to get the modem state.
     */
    private int mLastEnabledModemBitmap = (1 << TelephonyManager.getDefault().getPhoneCount()) - 1;

    /**
    /**
     * Last carrier id matching.
     * Last carrier id matching.
     */
     */
@@ -182,7 +206,8 @@ public class TelephonyMetrics {
    private boolean mTelephonyEventsDropped = false;
    private boolean mTelephonyEventsDropped = false;


    public TelephonyMetrics() {
    public TelephonyMetrics() {
        reset();
        mStartSystemTimeMs = System.currentTimeMillis();
        mStartElapsedTimeMs = SystemClock.elapsedRealtime();
    }
    }


    /**
    /**
@@ -569,6 +594,8 @@ public class TelephonyMetrics {
                    .setCarrierIdMatching(mLastCarrierId.get(key)).build();
                    .setCarrierIdMatching(mLastCarrierId.get(key)).build();
            addTelephonyEvent(event);
            addTelephonyEvent(event);
        }
        }

        writePhoneStatusChangedEvent();
    }
    }


    /**
    /**
@@ -628,6 +655,56 @@ public class TelephonyMetrics {
        return log;
        return log;
    }
    }


    /** Update the sim state. */
    public void updateSimState(int phoneId, int simState) {
        int state = mapSimStateToProto(simState);
        Integer lastSimState = mLastSimState.get(phoneId);
        if (lastSimState == null || !lastSimState.equals(state)) {
            mLastSimState.put(phoneId, state);
            writePhoneStatusChangedEvent();
        }
    }

    /** Update active subscription info list. */
    public void updateActiveSubscriptionInfoList(List<SubscriptionInfo> subInfos) {
        mLastActiveSubscriptionInfos.clear();
        for (SubscriptionInfo info : subInfos) {
            int phoneId = SubscriptionManager.getPhoneId(info.getSubscriptionId());
            ActiveSubscriptionInfo activeSubscriptionInfo = new ActiveSubscriptionInfo();
            activeSubscriptionInfo.isOpportunistic = info.isOpportunistic();
            activeSubscriptionInfo.carrierId = info.getCarrierId();
            mLastActiveSubscriptionInfos.put(phoneId, activeSubscriptionInfo);
        }
    }

    /** Update the enabled modem bitmap. */
    public void updateEnabledModemBitmap(int enabledModemBitmap) {
        if (mLastEnabledModemBitmap == enabledModemBitmap) return;
        mLastEnabledModemBitmap = enabledModemBitmap;
        writePhoneStatusChangedEvent();
    }

    /** Write the event of phone status changed. */
    public void writePhoneStatusChangedEvent() {
        int phoneCount = TelephonyManager.getDefault().getPhoneCount();
        PhoneStatus phoneStatus = new PhoneStatus();
        phoneStatus.enabledModemBitmap = mLastEnabledModemBitmap;
        phoneStatus.simState = new int[phoneCount];
        Arrays.fill(phoneStatus.simState, SimState.SIM_STATE_ABSENT);
        for (int i = 0; i < mLastSimState.size(); i++) {
            int phoneId = mLastSimState.keyAt(i);
            if (SubscriptionManager.isValidPhoneId(phoneId)) {
                phoneStatus.simState[phoneId] = mLastSimState.get(phoneId);
            }
        }

        // Phone status is not associated with any phone id, so set the phone id to -1 for the phone
        // status changed event.
        addTelephonyEvent(new TelephonyEventBuilder(-1 /* phoneId */)
                .setPhoneStatusChange(phoneStatus)
                .build());
    }

    /**
    /**
     * Reduce precision to meet privacy requirements.
     * Reduce precision to meet privacy requirements.
     *
     *
@@ -2343,4 +2420,15 @@ public class TelephonyMetrics {
    public void writeOnImsCallResumeFailed(int phoneId, ImsCallSession session,
    public void writeOnImsCallResumeFailed(int phoneId, ImsCallSession session,
                                           ImsReasonInfo reasonInfo) {}
                                           ImsReasonInfo reasonInfo) {}
    public void writeOnRilTimeoutResponse(int phoneId, int rilSerial, int rilRequest) {}
    public void writeOnRilTimeoutResponse(int phoneId, int rilSerial, int rilRequest) {}

    private static int mapSimStateToProto(int simState) {
        switch (simState) {
            case TelephonyManager.SIM_STATE_ABSENT:
                return SimState.SIM_STATE_ABSENT;
            case TelephonyManager.SIM_STATE_LOADED:
                return SimState.SIM_STATE_LOADED;
            default:
                return SimState.SIM_STATE_UNKNOWN;
        }
    }
}
}
+7 −4
Original line number Original line Diff line number Diff line
@@ -618,15 +618,18 @@ public class TelephonyMetricsTest extends TelephonyTest {
    public void testReset() throws Exception {
    public void testReset() throws Exception {
        mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState);
        mMetrics.writeServiceStateChanged(mPhone.getPhoneId(), mServiceState);
        reset();
        reset();

        TelephonyLog log = buildProto();
        TelephonyLog log = buildProto();


        assertEquals(1, log.events.length);
        Object[] serviceStateEvents = Arrays.stream(log.events)
        assertEquals(0, log.callSessions.length);
                .filter(event -> event.type == TelephonyEvent.Type.RIL_SERVICE_STATE_CHANGED)
        assertEquals(0, log.smsSessions.length);
                .toArray();

        assertEquals(1, serviceStateEvents.length);


        assertFalse(log.eventsDropped);
        assertFalse(log.eventsDropped);


        TelephonyEvent event = log.events[0];
        TelephonyEvent event = (TelephonyEvent) serviceStateEvents[0];


        assertEquals(TelephonyEvent.Type.RIL_SERVICE_STATE_CHANGED, event.type);
        assertEquals(TelephonyEvent.Type.RIL_SERVICE_STATE_CHANGED, event.type);