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

Commit 52dfc92e authored by Ling Ma's avatar Ling Ma Committed by Android (Google) Code Review
Browse files

Merge "Create NetworkRequestV2 atom with more capabilities" into tm-dev

parents b5833f78 8d5855cc
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -89,10 +89,10 @@ message PersistAtoms {
    optional string build_fingerprint = 21;

    /* Summary of received network requests. */
    repeated NetworkRequests network_requests = 22;
    repeated NetworkRequests network_requests = 22 [deprecated = true];

    /* Timestamp of last network_requests pull. */
    optional int64 network_requests_pull_timestamp_millis = 23;
    optional int64 network_requests_pull_timestamp_millis = 23 [deprecated = true];

    /* RCS single registrtions feature tag information. */
    repeated ImsRegistrationFeatureTagStats ims_registration_feature_tag_stats = 24;
@@ -171,6 +171,12 @@ message PersistAtoms {

    /* Timestamp of last gba_event pull. */
    optional int64 gba_event_pull_timestamp_millis = 49;

    /* Summary of received network requests. */
    repeated NetworkRequestsV2 network_requests_v2 = 50;

    /* Timestamp of last network_requests_v2 pull. */
    optional int64 network_requests_v2_pull_timestamp_millis = 51;
}

// The canonical versions of the following enums live in:
@@ -347,12 +353,26 @@ message ImsRegistrationStats {
    optional int64 last_used_millis = 10001;
}

// deprecated - please use NetworkRequestsV2 instead
message NetworkRequests {
    optional int32 carrier_id = 1;
    optional int32 enterprise_request_count = 2;
    optional int32 enterprise_release_count = 3;
}

message NetworkRequestsV2 {
    enum NetworkCapability {
        UNKNOWN = 0;
        PRIORITIZE_LATENCY = 1;
        PRIORITIZE_BANDWIDTH = 2;
        CBS = 3;
        ENTERPRISE = 4;
    }
    optional int32 carrier_id = 1;
    optional NetworkCapability capability = 2;
    optional int32 request_count = 3;
}

message ImsRegistrationFeatureTagStats {
    optional int32 carrier_id = 1;
    optional int32 slot_id = 2;
+0 −4
Original line number Diff line number Diff line
@@ -268,8 +268,6 @@ public class TelephonyNetworkFactory extends NetworkFactory {
    }

    private void releaseNetworkInternal(TelephonyNetworkRequest networkRequest) {
        NetworkRequestsStats.addNetworkRelease(networkRequest.getNativeNetworkRequest(),
                mSubscriptionId);
        mPhone.getDataNetworkController().removeNetworkRequest(networkRequest);
    }

@@ -277,8 +275,6 @@ public class TelephonyNetworkFactory extends NetworkFactory {
    private void releaseNetworkInternal(TelephonyNetworkRequest networkRequest,
                                        @ReleaseNetworkType int releaseType,
                                        int transport) {
        NetworkRequestsStats.addNetworkRelease(networkRequest.getNativeNetworkRequest(),
                mSubscriptionId);
        if (mPhone.isUsingNewDataStack()) {
            mPhone.getDataNetworkController().removeNetworkRequest(networkRequest);
        } else {
+12 −12
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ import static com.android.internal.telephony.TelephonyStatsLog.SIP_MESSAGE_RESPO
import static com.android.internal.telephony.TelephonyStatsLog.SIP_TRANSPORT_FEATURE_TAG_STATS;
import static com.android.internal.telephony.TelephonyStatsLog.SIP_TRANSPORT_SESSION;
import static com.android.internal.telephony.TelephonyStatsLog.SUPPORTED_RADIO_ACCESS_FAMILY;
import static com.android.internal.telephony.TelephonyStatsLog.TELEPHONY_NETWORK_REQUESTS;
import static com.android.internal.telephony.TelephonyStatsLog.TELEPHONY_NETWORK_REQUESTS_V2;
import static com.android.internal.telephony.TelephonyStatsLog.UCE_EVENT_STATS;
import static com.android.internal.telephony.TelephonyStatsLog.VOICE_CALL_RAT_USAGE;
import static com.android.internal.telephony.TelephonyStatsLog.VOICE_CALL_SESSION;
@@ -69,7 +69,7 @@ import com.android.internal.telephony.nano.PersistAtomsProto.ImsRegistrationServ
import com.android.internal.telephony.nano.PersistAtomsProto.ImsRegistrationStats;
import com.android.internal.telephony.nano.PersistAtomsProto.ImsRegistrationTermination;
import com.android.internal.telephony.nano.PersistAtomsProto.IncomingSms;
import com.android.internal.telephony.nano.PersistAtomsProto.NetworkRequests;
import com.android.internal.telephony.nano.PersistAtomsProto.NetworkRequestsV2;
import com.android.internal.telephony.nano.PersistAtomsProto.OutgoingSms;
import com.android.internal.telephony.nano.PersistAtomsProto.PresenceNotifyEvent;
import com.android.internal.telephony.nano.PersistAtomsProto.RcsAcsProvisioningStats;
@@ -157,7 +157,7 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
            registerAtom(DATA_CALL_SESSION, POLICY_PULL_DAILY);
            registerAtom(IMS_REGISTRATION_STATS, POLICY_PULL_DAILY);
            registerAtom(IMS_REGISTRATION_TERMINATION, POLICY_PULL_DAILY);
            registerAtom(TELEPHONY_NETWORK_REQUESTS, POLICY_PULL_DAILY);
            registerAtom(TELEPHONY_NETWORK_REQUESTS_V2, POLICY_PULL_DAILY);
            registerAtom(IMS_REGISTRATION_FEATURE_TAG_STATS, POLICY_PULL_DAILY);
            registerAtom(RCS_CLIENT_PROVISIONING_STATS, POLICY_PULL_DAILY);
            registerAtom(RCS_ACS_PROVISIONING_STATS, POLICY_PULL_DAILY);
@@ -215,8 +215,8 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
                return pullImsRegistrationStats(data);
            case IMS_REGISTRATION_TERMINATION:
                return pullImsRegistrationTermination(data);
            case TELEPHONY_NETWORK_REQUESTS:
                return pullTelephonyNetworkRequests(data);
            case TELEPHONY_NETWORK_REQUESTS_V2:
                return pullTelephonyNetworkRequestsV2(data);
            case IMS_REGISTRATION_FEATURE_TAG_STATS:
                return pullImsRegistrationFeatureTagStats(data);
            case RCS_CLIENT_PROVISIONING_STATS:
@@ -459,14 +459,14 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
        }
    }

    private int pullTelephonyNetworkRequests(List<StatsEvent> data) {
        NetworkRequests[] persistAtoms = mStorage.getNetworkRequests(MIN_COOLDOWN_MILLIS);
    private int pullTelephonyNetworkRequestsV2(List<StatsEvent> data) {
        NetworkRequestsV2[] persistAtoms = mStorage.getNetworkRequestsV2(MIN_COOLDOWN_MILLIS);
        if (persistAtoms != null) {
            Arrays.stream(persistAtoms)
                    .forEach(persistAtom -> data.add(buildStatsEvent(persistAtom)));
            return StatsManager.PULL_SUCCESS;
        } else {
            Rlog.w(TAG, "TELEPHONY_NETWORK_REQUESTS pull too frequent, skipping");
            Rlog.w(TAG, "TELEPHONY_NETWORK_REQUESTS_V2 pull too frequent, skipping");
            return StatsManager.PULL_SKIP;
        }
    }
@@ -850,12 +850,12 @@ public class MetricsCollector implements StatsManager.StatsPullAtomCallback {
                termination.count);
    }

    private static StatsEvent buildStatsEvent(NetworkRequests networkRequests) {
    private static StatsEvent buildStatsEvent(NetworkRequestsV2 networkRequests) {
        return TelephonyStatsLog.buildStatsEvent(
                TELEPHONY_NETWORK_REQUESTS,
                TELEPHONY_NETWORK_REQUESTS_V2,
                networkRequests.carrierId,
                networkRequests.enterpriseRequestCount,
                networkRequests.enterpriseReleaseCount);
                networkRequests.capability,
                networkRequests.requestCount);
    }

    private static StatsEvent buildStatsEvent(ImsRegistrationFeatureTagStats stats) {
+23 −20
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@ import android.telephony.TelephonyManager;

import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.nano.PersistAtomsProto.NetworkRequests;
import com.android.internal.telephony.nano.PersistAtomsProto.NetworkRequestsV2;


/** Metrics for the network requests. */
@@ -32,30 +32,33 @@ public class NetworkRequestsStats {

    /** Generate metrics when network request occurs. */
    public static void addNetworkRequest(NetworkRequest networkRequest, int subId) {
        if (!networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)) {
            // Currently only handle enterprise
            return;
        PersistAtomsStorage storage = PhoneFactory.getMetricsCollector().getAtomsStorage();

        NetworkRequestsV2 networkRequestsTemplate = new NetworkRequestsV2();
        networkRequestsTemplate.carrierId = getCarrierId(subId);
        networkRequestsTemplate.requestCount = 1;

        if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY)) {
            networkRequestsTemplate.capability =
                    NetworkRequestsV2.NetworkCapability.PRIORITIZE_LATENCY;
            storage.addNetworkRequestsV2(networkRequestsTemplate);
        }
        NetworkRequests networkRequests = new NetworkRequests();
        networkRequests.carrierId = getCarrierId(subId);
        networkRequests.enterpriseRequestCount = 1;

        PersistAtomsStorage storage = PhoneFactory.getMetricsCollector().getAtomsStorage();
        storage.addNetworkRequests(networkRequests);
        if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_BANDWIDTH)) {
            networkRequestsTemplate.capability =
                    NetworkRequestsV2.NetworkCapability.PRIORITIZE_BANDWIDTH;
            storage.addNetworkRequestsV2(networkRequestsTemplate);
        }

    /** Generate metrics when network release occurs. */
    public static void addNetworkRelease(NetworkRequest networkRequest, int subId) {
        if (!networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)) {
            // Currently only handle enterprise
            return;
        if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_CBS)) {
            networkRequestsTemplate.capability = NetworkRequestsV2.NetworkCapability.CBS;
            storage.addNetworkRequestsV2(networkRequestsTemplate);
        }
        NetworkRequests networkRequests = new NetworkRequests();
        networkRequests.carrierId = getCarrierId(subId);
        networkRequests.enterpriseReleaseCount = 1;

        PersistAtomsStorage storage = PhoneFactory.getMetricsCollector().getAtomsStorage();
        storage.addNetworkRequests(networkRequests);
        if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_ENTERPRISE)) {
            networkRequestsTemplate.capability = NetworkRequestsV2.NetworkCapability.ENTERPRISE;
            storage.addNetworkRequestsV2(networkRequestsTemplate);
        }
    }

    /** Returns the carrier ID of the given subscription id. */
+27 −22
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ import com.android.internal.telephony.nano.PersistAtomsProto.ImsRegistrationServ
import com.android.internal.telephony.nano.PersistAtomsProto.ImsRegistrationStats;
import com.android.internal.telephony.nano.PersistAtomsProto.ImsRegistrationTermination;
import com.android.internal.telephony.nano.PersistAtomsProto.IncomingSms;
import com.android.internal.telephony.nano.PersistAtomsProto.NetworkRequests;
import com.android.internal.telephony.nano.PersistAtomsProto.NetworkRequestsV2;
import com.android.internal.telephony.nano.PersistAtomsProto.OutgoingSms;
import com.android.internal.telephony.nano.PersistAtomsProto.PersistAtoms;
import com.android.internal.telephony.nano.PersistAtomsProto.PresenceNotifyEvent;
@@ -412,16 +412,19 @@ public class PersistAtomsStorage {
        }
    }

    /** Adds a new {@link NetworkRequests} to the storage. */
    public synchronized void addNetworkRequests(NetworkRequests networkRequests) {
        NetworkRequests existingMetrics = find(networkRequests);
    /** Adds a new {@link NetworkRequestsV2} to the storage. */
    public synchronized void addNetworkRequestsV2(NetworkRequestsV2 networkRequests) {
        NetworkRequestsV2 existingMetrics = find(networkRequests);
        if (existingMetrics != null) {
            existingMetrics.enterpriseRequestCount += networkRequests.enterpriseRequestCount;
            existingMetrics.enterpriseReleaseCount += networkRequests.enterpriseReleaseCount;
            existingMetrics.requestCount += networkRequests.requestCount;
        } else {
            int newLength = mAtoms.networkRequests.length + 1;
            mAtoms.networkRequests = Arrays.copyOf(mAtoms.networkRequests, newLength);
            mAtoms.networkRequests[newLength - 1] = networkRequests;
            NetworkRequestsV2 newMetrics = new NetworkRequestsV2();
            newMetrics.capability = networkRequests.capability;
            newMetrics.carrierId = networkRequests.carrierId;
            newMetrics.requestCount = networkRequests.requestCount;
            int newLength = mAtoms.networkRequestsV2.length + 1;
            mAtoms.networkRequestsV2 = Arrays.copyOf(mAtoms.networkRequestsV2, newLength);
            mAtoms.networkRequestsV2[newLength - 1] = newMetrics;
        }
        saveAtomsToFile(SAVE_TO_FILE_DELAY_FOR_UPDATE_MILLIS);
    }
@@ -774,11 +777,11 @@ public class PersistAtomsStorage {
     * minIntervalMillis} ago, otherwise returns {@code null}.
     */
    @Nullable
    public synchronized NetworkRequests[] getNetworkRequests(long minIntervalMillis) {
        if (getWallTimeMillis() - mAtoms.networkRequestsPullTimestampMillis > minIntervalMillis) {
            mAtoms.networkRequestsPullTimestampMillis = getWallTimeMillis();
            NetworkRequests[] previousNetworkRequests = mAtoms.networkRequests;
            mAtoms.networkRequests = new NetworkRequests[0];
    public synchronized NetworkRequestsV2[] getNetworkRequestsV2(long minIntervalMillis) {
        if (getWallTimeMillis() - mAtoms.networkRequestsV2PullTimestampMillis > minIntervalMillis) {
            mAtoms.networkRequestsV2PullTimestampMillis = getWallTimeMillis();
            NetworkRequestsV2[] previousNetworkRequests = mAtoms.networkRequestsV2;
            mAtoms.networkRequestsV2 = new NetworkRequestsV2[0];
            saveAtomsToFile(SAVE_TO_FILE_DELAY_FOR_GET_MILLIS);
            return previousNetworkRequests;
        } else {
@@ -1091,7 +1094,8 @@ public class PersistAtomsStorage {
                            atoms.imsRegistrationTermination,
                            ImsRegistrationTermination.class,
                            mMaxNumImsRegistrationTerminations);
            atoms.networkRequests = sanitizeAtoms(atoms.networkRequests, NetworkRequests.class);
            atoms.networkRequestsV2 =
                    sanitizeAtoms(atoms.networkRequestsV2, NetworkRequestsV2.class);
            atoms.imsRegistrationFeatureTagStats =
                    sanitizeAtoms(
                            atoms.imsRegistrationFeatureTagStats,
@@ -1177,8 +1181,8 @@ public class PersistAtomsStorage {
                    sanitizeTimestamp(atoms.imsRegistrationStatsPullTimestampMillis);
            atoms.imsRegistrationTerminationPullTimestampMillis =
                    sanitizeTimestamp(atoms.imsRegistrationTerminationPullTimestampMillis);
            atoms.networkRequestsPullTimestampMillis =
                    sanitizeTimestamp(atoms.networkRequestsPullTimestampMillis);
            atoms.networkRequestsV2PullTimestampMillis =
                    sanitizeTimestamp(atoms.networkRequestsV2PullTimestampMillis);
            atoms.imsRegistrationFeatureTagStatsPullTimestampMillis =
                    sanitizeTimestamp(atoms.imsRegistrationFeatureTagStatsPullTimestampMillis);
            atoms.rcsClientProvisioningStatsPullTimestampMillis =
@@ -1329,12 +1333,12 @@ public class PersistAtomsStorage {
    }

    /**
     * Returns the network requests event that has the same carrier id as the given one,
     * or {@code null} if it does not exist.
     * Returns the network requests event that has the same carrier id and capability as the given
     * one, or {@code null} if it does not exist.
     */
    private @Nullable NetworkRequests find(NetworkRequests key) {
        for (NetworkRequests item : mAtoms.networkRequests) {
            if (item.carrierId == key.carrierId) {
    private @Nullable NetworkRequestsV2 find(NetworkRequestsV2 key) {
        for (NetworkRequestsV2 item : mAtoms.networkRequestsV2) {
            if (item.carrierId == key.carrierId && item.capability == key.capability) {
                return item;
            }
        }
@@ -1686,6 +1690,7 @@ public class PersistAtomsStorage {
        atoms.imsRegistrationStatsPullTimestampMillis = currentTime;
        atoms.imsRegistrationTerminationPullTimestampMillis = currentTime;
        atoms.networkRequestsPullTimestampMillis = currentTime;
        atoms.networkRequestsV2PullTimestampMillis = currentTime;
        atoms.imsRegistrationFeatureTagStatsPullTimestampMillis = currentTime;
        atoms.rcsClientProvisioningStatsPullTimestampMillis = currentTime;
        atoms.rcsAcsProvisioningStatsPullTimestampMillis = currentTime;