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

Commit fdc031d8 authored by Sarah Chin's avatar Sarah Chin Committed by Gerrit Code Review
Browse files

Merge "5G metered metrics"

parents 80d3c539 de147676
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -795,6 +795,9 @@ message TelephonyEvent {

    // Emergency Number update event (Device HAL >= 1.4).
    EMERGENCY_NUMBER_REPORT = 21;

    // Network capabilities change event.
    NETWORK_CAPABILITIES_CHANGED = 22;
  }

  enum ApnType {
@@ -1697,6 +1700,11 @@ message TelephonyEvent {
    optional string preferApn = 12;
  }

  message NetworkCapabilitiesInfo {
    // Is network unmetered
    optional bool is_network_unmetered = 1;
  }

  // Time when event happened on device, in milliseconds since epoch
  optional int64 timestamp_millis = 1;

@@ -1769,6 +1777,9 @@ message TelephonyEvent {

  // Updated Emergency Call info.
  optional EmergencyNumberInfo updated_emergency_number = 25;

  // NetworkCapabilities changed info.
  optional NetworkCapabilitiesInfo network_capabilities = 26;
}

message ActiveSubscriptionInfo {
+9 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.util.SparseArray;
import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.util.IndentingPrintWriter;

import java.io.FileDescriptor;
@@ -216,6 +217,14 @@ public class DcNetworkAgent extends NetworkAgent {
                    + ", dc=" + mDataConnection.getName();
            logd(logStr);
            mNetCapsLocalLog.log(logStr);
            if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) {
                // only log metrics for DataConnection with NET_CAPABILITY_INTERNET
                if (mNetworkCapabilities == null
                        || networkCapabilities.isMetered() != mNetworkCapabilities.isMetered()) {
                    TelephonyMetrics.getInstance().writeNetworkCapabilitiesChangedEvent(
                            mPhone.getPhoneId(), networkCapabilities);
                }
            }
            mNetworkCapabilities = networkCapabilities;
        }
        sendNetworkCapabilities(networkCapabilities);
+9 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierIdMatching;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.ModemRestart;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.NetworkCapabilitiesInfo;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCallResponse;
@@ -209,4 +210,12 @@ public class TelephonyEventBuilder {
        mEvent.onDemandDataSwitch = onDemandDataSwitch;
        return this;
    }

    /** Set and build network capabilities changed event. */
    public TelephonyEventBuilder setNetworkCapabilities(
            NetworkCapabilitiesInfo networkCapabilities) {
        mEvent.type = TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED;
        mEvent.networkCapabilities = networkCapabilities;
        return this;
    }
}
+35 −0
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYP
import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_TYPE_UNSTRUCTURED;
import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_UNKNOWN;

import android.net.NetworkCapabilities;
import android.os.Build;
import android.os.SystemClock;
import android.os.SystemProperties;
@@ -93,6 +94,7 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.Carrier
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.DataSwitch;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.ModemRestart;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.NetworkCapabilitiesInfo;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.OnDemandDataSwitch;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilDeactivateDataCall.DeactivateReason;
@@ -206,6 +208,12 @@ public class TelephonyMetrics {
     */
    private final SparseArray<CarrierIdMatching> mLastCarrierId = new SparseArray<>();

    /**
     * Last NetworkCapabilitiesInfo, indexed by phone id.
     */
    private final SparseArray<NetworkCapabilitiesInfo> mLastNetworkCapabilitiesInfos =
            new SparseArray<>();

    /**
     * Last RilDataCall Events (indexed by cid), indexed by phone id
     */
@@ -314,6 +322,8 @@ public class TelephonyMetrics {
                return "NITZ_TIME";
            case TelephonyEvent.Type.EMERGENCY_NUMBER_REPORT:
                return "EMERGENCY_NUMBER_REPORT";
            case TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED:
                return "NETWORK_CAPABILITIES_CHANGED";
            default:
                return Integer.toString(event);
        }
@@ -652,6 +662,13 @@ public class TelephonyMetrics {
            addTelephonyEvent(event);
        }

        for (int i = 0; i < mLastNetworkCapabilitiesInfos.size(); i++) {
            final int key = mLastNetworkCapabilitiesInfos.keyAt(i);
            TelephonyEvent event = new TelephonyEventBuilder(mStartElapsedTimeMs, key)
                    .setNetworkCapabilities(mLastNetworkCapabilitiesInfos.get(key)).build();
            addTelephonyEvent(event);
        }

        for (int i = 0; i < mLastRilDataCallEvents.size(); i++) {
            final int key = mLastRilDataCallEvents.keyAt(i);
            for (int j = 0; j < mLastRilDataCallEvents.get(key).size(); j++) {
@@ -2515,6 +2532,24 @@ public class TelephonyMetrics {
        addTelephonyEvent(event);
    }

    /**
     * Write network capabilities changed event
     *
     * @param phoneId Phone id
     * @param networkCapabilities Network capabilities
     */
    public void writeNetworkCapabilitiesChangedEvent(int phoneId,
            NetworkCapabilities networkCapabilities) {
        final NetworkCapabilitiesInfo caps = new NetworkCapabilitiesInfo();
        caps.isNetworkUnmetered = networkCapabilities.hasCapability(
                NetworkCapabilities.NET_CAPABILITY_NOT_METERED);

        TelephonyEvent event = new TelephonyEventBuilder(phoneId)
                .setNetworkCapabilities(caps).build();
        mLastNetworkCapabilitiesInfos.put(phoneId, caps);
        addTelephonyEvent(event);
    }

    /**
     * Convert SMS format
     */
+27 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;

import android.net.LinkAddress;
import android.net.NetworkCapabilities;
import android.net.NetworkUtils;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
@@ -306,6 +307,32 @@ public class TelephonyMetricsTest extends TelephonyTest {
                log.events[0].updatedEmergencyNumber.routing);
    }

    // Test write Network Capabilities changed event
    @Test
    @SmallTest
    public void testWriteNetworkCapabilitiesChangedEvent() throws Exception {
        NetworkCapabilities caps = new NetworkCapabilities();
        caps.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
        mMetrics.writeNetworkCapabilitiesChangedEvent(mPhone.getPhoneId(), caps);

        caps.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED);
        mMetrics.writeNetworkCapabilitiesChangedEvent(mPhone.getPhoneId(), caps);

        TelephonyLog log = buildProto();

        assertEquals(2, log.events.length);
        assertEquals(0, log.callSessions.length);
        assertEquals(0, log.smsSessions.length);

        assertEquals(mPhone.getPhoneId(), log.events[0].phoneId);
        assertEquals(TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED, log.events[0].type);
        assertTrue(log.events[0].networkCapabilities.isNetworkUnmetered);

        assertEquals(mPhone.getPhoneId(), log.events[1].phoneId);
        assertEquals(TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED, log.events[1].type);
        assertFalse(log.events[1].networkCapabilities.isNetworkUnmetered);
    }

    // Test write on IMS call start
    @Test
    @SmallTest