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

Commit 502821bc authored by Ling Ma's avatar Ling Ma
Browse files

Refine anomaly report

The report monitored delayed reponse in setup, handover, and deactivate
data call requests. The major scenarios have already been captured in
the data network's anomaly report level.

1. Added check for cancelHandover.
2. Refined check for overlap network type under same APN name

Fix: 333980607
Test: basic voice call + data browsing
Change-Id: I5a97d46b79e845f82c30fd15bc1df3a31fe75fa5
parent fd892335
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -201,6 +201,9 @@ public class DataNetwork extends StateMachine {
    /** Event for bandwidth estimation from the modem changed. */
    private static final int EVENT_BANDWIDTH_ESTIMATE_FROM_MODEM_CHANGED = 11;

    /** Event to report anomaly {@link #EVENT_NOTIFY_HANDOVER_CANCELLED_RESPONSE} not received. */
    private static final int EVENT_CANCEL_HANDOVER_NO_RESPONSE = 12;

    /** Event for display info changed. This is for getting 5G NSA or mmwave information. */
    private static final int EVENT_DISPLAY_INFO_CHANGED = 13;

@@ -1338,11 +1341,13 @@ public class DataNetwork extends StateMachine {
                    break;
                }
                case EVENT_NOTIFY_HANDOVER_CANCELLED_RESPONSE:
                    removeMessages(EVENT_CANCEL_HANDOVER_NO_RESPONSE);
                    log("Notified handover cancelled.");
                    break;
                case EVENT_BANDWIDTH_ESTIMATE_FROM_MODEM_CHANGED:
                case EVENT_TEAR_DOWN_NETWORK:
                case EVENT_STUCK_IN_TRANSIENT_STATE:
                case EVENT_CANCEL_HANDOVER_NO_RESPONSE:
                case EVENT_DISPLAY_INFO_CHANGED:
                case EVENT_WAITING_FOR_TEARING_DOWN_CONDITION_MET:
                case EVENT_CSS_INDICATOR_CHANGED:
@@ -1730,6 +1735,12 @@ public class DataNetwork extends StateMachine {
                    // Network validation request can be accepted if the data is in connected state
                    handleDataNetworkValidationRequest((Consumer<Integer>) msg.obj);
                    break;
                case EVENT_CANCEL_HANDOVER_NO_RESPONSE:
                    reportAnomaly("Cancel handover no response within "
                            + TimeUnit.MILLISECONDS.toSeconds(
                            mDataConfigManager.getNetworkHandoverTimeoutMs())
                            + " seconds.", "ad320988-0601-4955-836a-e6b67289c294");
                    break;
                default:
                    return NOT_HANDLED;
            }
@@ -1745,6 +1756,7 @@ public class DataNetwork extends StateMachine {
    private final class HandoverState extends State {
        @Override
        public void enter() {
            removeMessages(EVENT_CANCEL_HANDOVER_NO_RESPONSE);
            sendMessageDelayed(EVENT_STUCK_IN_TRANSIENT_STATE,
                    mDataConfigManager.getNetworkHandoverTimeoutMs());
            notifyPreciseDataConnectionState();
@@ -3582,6 +3594,8 @@ public class DataNetwork extends StateMachine {
            // id can be released if it is preserved for handover.
            mDataServiceManagers.get(mTransport).cancelHandover(mCid.get(mTransport),
                    obtainMessage(EVENT_NOTIFY_HANDOVER_CANCELLED_RESPONSE));
            sendMessageDelayed(EVENT_CANCEL_HANDOVER_NO_RESPONSE,
                    mDataConfigManager.getNetworkHandoverTimeoutMs());

            long retry = response != null ? response.getRetryDurationMillis()
                    : DataCallResponse.RETRY_DURATION_UNDEFINED;
@@ -3894,6 +3908,8 @@ public class DataNetwork extends StateMachine {
                return "EVENT_DETACH_ALL_NETWORK_REQUESTS";
            case EVENT_BANDWIDTH_ESTIMATE_FROM_MODEM_CHANGED:
                return "EVENT_BANDWIDTH_ESTIMATE_FROM_MODEM_CHANGED";
            case EVENT_CANCEL_HANDOVER_NO_RESPONSE:
                return "EVENT_CANCEL_HANDOVER_NO_RESPONSE";
            case EVENT_DISPLAY_INFO_CHANGED:
                return "EVENT_DISPLAY_INFO_CHANGED";
            case EVENT_HANDOVER_RESPONSE:
+0 −17
Original line number Diff line number Diff line
@@ -980,23 +980,6 @@ public class DataProfileManager extends Handler {
                                a.getLingeringNetworkTypeBitmask()),
                        "9af73e18-b523-4dc5-adab-4bb24355d838");
            }
            for (int j = i + 1; j < profiles.size(); j++) {
                ApnSetting b = profiles.get(j).getApnSetting();
                if (b == null || b.getEditedStatus() != Telephony.Carriers.UNEDITED) continue;
                String apnNameA = a.getApnName();
                String apnNameB = b.getApnName();
                if (TextUtils.equals(apnNameA, apnNameB)
                        // TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN means all network types
                        && (a.getNetworkTypeBitmask()
                        == (int) TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN
                        || b.getNetworkTypeBitmask()
                        == (int) TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN
                        || (a.getNetworkTypeBitmask() & b.getNetworkTypeBitmask()) != 0)) {
                    reportAnomaly("Found overlapped network type under the APN name "
                                    + a.getApnName(),
                            "9af73e18-b523-4dc5-adab-4bb24555d839");
                }
            }
        }
    }

+0 −19
Original line number Diff line number Diff line
@@ -82,8 +82,6 @@ public class DataServiceManager extends Handler {

    private static final int EVENT_BIND_DATA_SERVICE = 1;

    private static final int EVENT_WATCHDOG_TIMEOUT = 2;

    private static final long REQUEST_UNRESPONDED_TIMEOUT = 10 * MINUTE_IN_MILLIS; // 10 mins

    private static final long CHANGE_PERMISSION_TIMEOUT_MS = 15 * SECOND_IN_MILLIS; // 15 secs
@@ -212,7 +210,6 @@ public class DataServiceManager extends Handler {
            mDeathRecipient = new DataServiceManagerDeathRecipient();
            mBound = true;
            mLastBoundPackageName = getDataServicePackageName();
            removeMessages(EVENT_WATCHDOG_TIMEOUT);

            try {
                service.linkToDeath(mDeathRecipient, 0);
@@ -230,7 +227,6 @@ public class DataServiceManager extends Handler {
        @Override
        public void onServiceDisconnected(ComponentName name) {
            if (DBG) log("onServiceDisconnected");
            removeMessages(EVENT_WATCHDOG_TIMEOUT);
            mIDataService = null;
            mBound = false;
            mServiceBindingChangedRegistrants.notifyResult(false);
@@ -257,7 +253,6 @@ public class DataServiceManager extends Handler {
                log("onSetupDataCallComplete. resultCode = " + resultCode + ", response = "
                        + response);
            }
            removeMessages(EVENT_WATCHDOG_TIMEOUT, DataServiceCallbackWrapper.this);
            Message msg = mMessageMap.remove(asBinder());
            if (msg != null) {
                msg.getData().putParcelable(DATA_CALL_RESPONSE, response);
@@ -270,7 +265,6 @@ public class DataServiceManager extends Handler {
        @Override
        public void onDeactivateDataCallComplete(@DataServiceCallback.ResultCode int resultCode) {
            if (DBG) log("onDeactivateDataCallComplete. resultCode = " + resultCode);
            removeMessages(EVENT_WATCHDOG_TIMEOUT, DataServiceCallbackWrapper.this);
            Message msg = mMessageMap.remove(asBinder());
            sendCompleteMessage(msg, resultCode);
        }
@@ -334,7 +328,6 @@ public class DataServiceManager extends Handler {
        @Override
        public void onHandoverStarted(@DataServiceCallback.ResultCode int resultCode) {
            if (DBG) log("onHandoverStarted. resultCode = " + resultCode);
            removeMessages(EVENT_WATCHDOG_TIMEOUT, DataServiceCallbackWrapper.this);
            Message msg = mMessageMap.remove(asBinder());
            sendCompleteMessage(msg, resultCode);
        }
@@ -342,7 +335,6 @@ public class DataServiceManager extends Handler {
        @Override
        public void onHandoverCancelled(@DataServiceCallback.ResultCode int resultCode) {
            if (DBG) log("onHandoverCancelled. resultCode = " + resultCode);
            removeMessages(EVENT_WATCHDOG_TIMEOUT, DataServiceCallbackWrapper.this);
            Message msg = mMessageMap.remove(asBinder());
            sendCompleteMessage(msg, resultCode);
        }
@@ -421,9 +413,6 @@ public class DataServiceManager extends Handler {
            case EVENT_BIND_DATA_SERVICE:
                rebindDataService();
                break;
            case EVENT_WATCHDOG_TIMEOUT:
                handleRequestUnresponded((DataServiceCallbackWrapper) msg.obj);
                break;
            default:
                loge("Unhandled event " + msg.what);
        }
@@ -680,8 +669,6 @@ public class DataServiceManager extends Handler {
            mMessageMap.put(callback.asBinder(), onCompleteMessage);
        }
        try {
            sendMessageDelayed(obtainMessage(EVENT_WATCHDOG_TIMEOUT, callback),
                    REQUEST_UNRESPONDED_TIMEOUT);
            mIDataService.setupDataCall(mPhone.getPhoneId(), accessNetworkType, dataProfile,
                    isRoaming, allowRoaming, reason, linkProperties, pduSessionId, sliceInfo,
                    trafficDescriptor, matchAllRuleAllowed, callback);
@@ -720,8 +707,6 @@ public class DataServiceManager extends Handler {
            mMessageMap.put(callback.asBinder(), onCompleteMessage);
        }
        try {
            sendMessageDelayed(obtainMessage(EVENT_WATCHDOG_TIMEOUT, callback),
                    REQUEST_UNRESPONDED_TIMEOUT);
            mIDataService.deactivateDataCall(mPhone.getPhoneId(), cid, reason, callback);
        } catch (RemoteException e) {
            loge("Cannot invoke deactivateDataCall on data service.");
@@ -761,8 +746,6 @@ public class DataServiceManager extends Handler {
        }

        try {
            sendMessageDelayed(obtainMessage(EVENT_WATCHDOG_TIMEOUT, callback),
                    REQUEST_UNRESPONDED_TIMEOUT);
            mIDataService.startHandover(mPhone.getPhoneId(), cid, callback);
        } catch (RemoteException e) {
            loge("Cannot invoke startHandover on data service.");
@@ -796,8 +779,6 @@ public class DataServiceManager extends Handler {
        }

        try {
            sendMessageDelayed(obtainMessage(EVENT_WATCHDOG_TIMEOUT, callback),
                    REQUEST_UNRESPONDED_TIMEOUT);
            mIDataService.cancelHandover(mPhone.getPhoneId(), cid, callback);
        } catch (RemoteException e) {
            loge("Cannot invoke cancelHandover on data service.");