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

Commit de147676 authored by Sarah Chin's avatar Sarah Chin
Browse files

5G metered metrics

Add metrics for NETWORK_CAPABILITY_NOT_METERED changed

Bug: 141726507
Test: atest FrameworksTelephonyTests:TelephonyMetricsTest
Change-Id: Ie677804d03efc523607ed64d3b470b7e46c9593e
Merged-In: Ie677804d03efc523607ed64d3b470b7e46c9593e
parent f00698cb
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -749,6 +749,9 @@ message TelephonyEvent {


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

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


  enum ApnType {
  enum ApnType {
@@ -1651,6 +1654,11 @@ message TelephonyEvent {
    optional string preferApn = 12;
    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
  // Time when event happened on device, in milliseconds since epoch
  optional int64 timestamp_millis = 1;
  optional int64 timestamp_millis = 1;


@@ -1723,6 +1731,9 @@ message TelephonyEvent {


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

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


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


import java.io.FileDescriptor;
import java.io.FileDescriptor;
@@ -216,6 +217,14 @@ public class DcNetworkAgent extends NetworkAgent {
                    + ", dc=" + mDataConnection.getName();
                    + ", dc=" + mDataConnection.getName();
            logd(logStr);
            logd(logStr);
            mNetCapsLocalLog.log(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;
            mNetworkCapabilities = networkCapabilities;
        }
        }
        sendNetworkCapabilities(networkCapabilities);
        sendNetworkCapabilities(networkCapabilities);
+9 −0
Original line number Original line 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.CarrierIdMatching;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.CarrierKeyChange;
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.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.RilDeactivateDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCall;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCallResponse;
import static com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.RilSetupDataCallResponse;
@@ -209,4 +210,12 @@ public class TelephonyEventBuilder {
        mEvent.onDemandDataSwitch = onDemandDataSwitch;
        mEvent.onDemandDataSwitch = onDemandDataSwitch;
        return this;
        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;
    }
}
}
+36 −1
Original line number Original line 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_TYPE_UNSTRUCTURED;
import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_UNKNOWN;
import static com.android.internal.telephony.nano.TelephonyProto.PdpType.PDP_UNKNOWN;


import android.net.NetworkCapabilities;
import android.os.Build;
import android.os.Build;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.SystemProperties;
@@ -72,7 +73,6 @@ import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.RIL;
import com.android.internal.telephony.RIL;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.SmsResponse;
import com.android.internal.telephony.SmsResponse;
import com.android.internal.telephony.util.TelephonyUtils;
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;
@@ -94,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.CarrierKeyChange;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent.DataSwitch;
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.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.OnDemandDataSwitch;
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;
@@ -105,6 +106,7 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyServiceState;
import com.android.internal.telephony.nano.TelephonyProto.TelephonySettings;
import com.android.internal.telephony.nano.TelephonyProto.TelephonySettings;
import com.android.internal.telephony.nano.TelephonyProto.TimeInterval;
import com.android.internal.telephony.nano.TelephonyProto.TimeInterval;
import com.android.internal.telephony.protobuf.nano.MessageNano;
import com.android.internal.telephony.protobuf.nano.MessageNano;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.IndentingPrintWriter;


import java.io.FileDescriptor;
import java.io.FileDescriptor;
@@ -206,6 +208,12 @@ public class TelephonyMetrics {
     */
     */
    private final SparseArray<CarrierIdMatching> mLastCarrierId = new SparseArray<>();
    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
     * Last RilDataCall Events (indexed by cid), indexed by phone id
     */
     */
@@ -314,6 +322,8 @@ public class TelephonyMetrics {
                return "NITZ_TIME";
                return "NITZ_TIME";
            case TelephonyEvent.Type.EMERGENCY_NUMBER_REPORT:
            case TelephonyEvent.Type.EMERGENCY_NUMBER_REPORT:
                return "EMERGENCY_NUMBER_REPORT";
                return "EMERGENCY_NUMBER_REPORT";
            case TelephonyEvent.Type.NETWORK_CAPABILITIES_CHANGED:
                return "NETWORK_CAPABILITIES_CHANGED";
            default:
            default:
                return Integer.toString(event);
                return Integer.toString(event);
        }
        }
@@ -648,6 +658,13 @@ public class TelephonyMetrics {
            addTelephonyEvent(event);
            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++) {
        for (int i = 0; i < mLastRilDataCallEvents.size(); i++) {
            final int key = mLastRilDataCallEvents.keyAt(i);
            final int key = mLastRilDataCallEvents.keyAt(i);
            for (int j = 0; j < mLastRilDataCallEvents.get(key).size(); j++) {
            for (int j = 0; j < mLastRilDataCallEvents.get(key).size(); j++) {
@@ -2509,6 +2526,24 @@ public class TelephonyMetrics {
        addTelephonyEvent(event);
        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
     * Convert SMS format
     */
     */
+27 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;


import android.net.LinkAddress;
import android.net.LinkAddress;
import android.net.NetworkCapabilities;
import android.net.NetworkUtils;
import android.net.NetworkUtils;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
@@ -300,6 +301,32 @@ public class TelephonyMetricsTest extends TelephonyTest {
                log.events[0].updatedEmergencyNumber.routing);
                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 write on IMS call start
    @Test
    @Test
    @SmallTest
    @SmallTest