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

Commit 0b171672 authored by Ling Ma's avatar Ling Ma Committed by Automerger Merge Worker
Browse files

Merge "Create NetworkRequestV2 atom with more capabilities" into tm-dev am: 52dfc92e

parents fabd2048 52dfc92e
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;