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

Commit f0833dc1 authored by Ling Ma's avatar Ling Ma
Browse files

Make IMS anomaly report trigger only on release-request

Change-Id: Ib0c49c7ff16ec7e30a0c6869f771ee01e7c916fb
Test: atest DataNetworkController
Fix: 228660888
parent 68098a11
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.internal.telephony;

import android.annotation.IntRange;
import android.annotation.NonNull;
import android.os.SystemClock;
import android.util.LongArrayQueue;

@@ -99,6 +100,15 @@ public class SlidingWindowEventCounter {
        return mNumOccurrences;
    }

    /**
     * Get the event frequency description.
     *
     * @return A string describing the anomaly event
     */
    public @NonNull String getFrequencyString() {
        return String.format("%d times within %d ms.", mNumOccurrences, mWindowSizeMillis);
    }

    @Override
    public String toString() {
        return String.format("SlidingWindowEventCounter=[windowSizeMillis=" + mWindowSizeMillis
+34 −19
Original line number Diff line number Diff line
@@ -358,6 +358,9 @@ public class DataNetworkController extends Handler {
     */
    private int[] mLastReleasedImsRequestCapabilities;

    /** True after try to release an IMS network; False after try to request an IMS network. */
    private boolean mLastImsOperationIsRelease;

    /** The broadcast receiver. */
    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
@@ -1144,14 +1147,16 @@ public class DataNetworkController extends Handler {
     * @param networkRequest The network request.
     */
    private void onAddNetworkRequest(@NonNull TelephonyNetworkRequest networkRequest) {
        if (Arrays.equals(mLastReleasedImsRequestCapabilities, networkRequest.getCapabilities())
        if (mLastImsOperationIsRelease) {
            mLastImsOperationIsRelease = false;
            if (Arrays.equals(
                    mLastReleasedImsRequestCapabilities, networkRequest.getCapabilities())
                    && mImsThrottleCounter.addOccurrence()) {
            AnomalyReporter.reportAnomaly(
                    UUID.fromString("ead6f8db-d2f2-4ed3-8da5-1d8560fe7daf"),
                    networkRequest.getNativeNetworkRequest().getRequestorPackageName()
                            + " requested with same capabilities falls under "
                            + mDataConfigManager.getAnomalyImsReleaseRequestThreshold().timeWindow
                            + " ms window.");
                reportAnomaly(networkRequest.getNativeNetworkRequest().getRequestorPackageName()
                                + " requested with same capabilities "
                                + mImsThrottleCounter.getFrequencyString(),
                        "ead6f8db-d2f2-4ed3-8da5-1d8560fe7daf");
            }
        }
        if (!mAllNetworkRequestList.add(networkRequest)) {
            loge("onAddNetworkRequest: Duplicate network request. " + networkRequest);
@@ -1912,6 +1917,7 @@ public class DataNetworkController extends Handler {
        if (networkRequest.hasCapability(NetworkCapabilities.NET_CAPABILITY_IMS)) {
            mImsThrottleCounter.addOccurrence();
            mLastReleasedImsRequestCapabilities = networkRequest.getCapabilities();
            mLastImsOperationIsRelease = true;
        }
        if (!mAllNetworkRequestList.remove(networkRequest)) {
            loge("onRemoveNetworkRequest: Network request does not exist. " + networkRequest);
@@ -2150,11 +2156,9 @@ public class DataNetworkController extends Handler {
     */
    private void onTrackNetworkUnwanted() {
        if (mNetworkUnwantedCounter.addOccurrence()) {
            AnomalyReporter.reportAnomaly(
                    UUID.fromString("9f3bc55b-bfa6-4e26-afaa-5031426a66d2"),
                    String.format("Network Unwanted called %d times in %d ms.",
                            mNetworkUnwantedCounter.getNumOccurrences(),
                            mNetworkUnwantedCounter.getWindowSizeMillis()));
            reportAnomaly("Network Unwanted called "
                            + mNetworkUnwantedCounter.getFrequencyString(),
                    "9f3bc55b-bfa6-4e26-afaa-5031426a66d2");
        }
    }

@@ -2353,16 +2357,16 @@ public class DataNetworkController extends Handler {
        switch (transport) {
            case AccessNetworkConstants.TRANSPORT_TYPE_WWAN:
                if (mSetupDataCallWwanFailureCounter.addOccurrence()) {
                    AnomalyReporter.reportAnomaly(
                            UUID.fromString("e6a98b97-9e34-4977-9a92-01d52a6691f6"),
                            "RIL fails setup data call request frequently");
                    reportAnomaly("RIL fails setup data call request "
                                    + mSetupDataCallWwanFailureCounter.getFrequencyString(),
                            "e6a98b97-9e34-4977-9a92-01d52a6691f6");
                }
                break;
            case AccessNetworkConstants.TRANSPORT_TYPE_WLAN:
                if (mSetupDataCallWlanFailureCounter.addOccurrence()) {
                    AnomalyReporter.reportAnomaly(
                            UUID.fromString("e2248d8b-d55f-42bd-871c-0cfd80c3ddd1"),
                            "IWLAN data service fails setup data call request frequently");
                    reportAnomaly("IWLAN data service fails setup data call request "
                                    + mSetupDataCallWlanFailureCounter.getFrequencyString(),
                            "e2248d8b-d55f-42bd-871c-0cfd80c3ddd1");
                }
                break;
            default:
@@ -2370,6 +2374,17 @@ public class DataNetworkController extends Handler {
        }
    }

    /**
     * Trigger the anomaly report with the specified UUID.
     *
     * @param anomalyMsg Description of the event
     * @param uuid UUID associated with that event
     */
    private void reportAnomaly(@NonNull String anomalyMsg, @NonNull String uuid) {
        logl(anomalyMsg);
        AnomalyReporter.reportAnomaly(UUID.fromString(uuid), anomalyMsg);
    }

    /**
     * Called when data network is connected.
     *