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

Commit 524ca379 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Improved logging of APN context" into qt-dev

parents e452a0e7 504350c5
Loading
Loading
Loading
Loading
+33 −45
Original line number Diff line number Diff line
@@ -153,10 +153,7 @@ public class ApnContext {
     * @param dc data connection
     */
    public synchronized void setDataConnection(DataConnection dc) {
        if (DBG) {
            log("setDataConnectionAc: old dc=" + mDataConnection + ",new dc=" + dc
                    + " this=" + this);
        }
        log("setDataConnectionAc: old=" + mDataConnection + ",new=" + dc + " this=" + this);
        mDataConnection = dc;
    }

@@ -193,7 +190,7 @@ public class ApnContext {
     * @return APN setting
     */
    public synchronized ApnSetting getApnSetting() {
        if (DBG) log("getApnSetting: apnSetting=" + mApnSetting);
        log("getApnSetting: apnSetting=" + mApnSetting);
        return mApnSetting;
    }

@@ -202,7 +199,7 @@ public class ApnContext {
     * @param apnSetting APN setting
     */
    public synchronized void setApnSetting(ApnSetting apnSetting) {
        if (DBG) log("setApnSetting: apnSetting=" + apnSetting);
        log("setApnSetting: apnSetting=" + apnSetting);
        mApnSetting = apnSetting;
    }

@@ -279,9 +276,7 @@ public class ApnContext {
     * @param s Current data call state
     */
    public synchronized void setState(DctConstants.State s) {
        if (DBG) {
        log("setState: " + s + ", previous state:" + mState);
        }

        if (mState != s) {
            mStateLocalLog.log("State changed from " + mState + " to " + s);
@@ -290,7 +285,8 @@ public class ApnContext {

        if (mState == DctConstants.State.FAILED) {
            if (mRetryManager.getWaitingApns() != null) {
                mRetryManager.getWaitingApns().clear(); // when teardown the connection and set to IDLE
                // when teardown the connection and set to IDLE
                mRetryManager.getWaitingApns().clear();
            }
        }
    }
@@ -318,9 +314,7 @@ public class ApnContext {
     * @param reason Reason for data call connection
     */
    public synchronized void setReason(String reason) {
        if (DBG) {
        log("set reason as " + reason + ",current state " + mState);
        }
        mReason = reason;
    }

@@ -373,9 +367,7 @@ public class ApnContext {
     * @param enabled True if data call is enabled
     */
    public void setEnabled(boolean enabled) {
        if (DBG) {
        log("set enabled as " + enabled + ", current state is " + mDataEnabled.get());
        }
        mDataEnabled.set(enabled);
    }

@@ -402,23 +394,22 @@ public class ApnContext {
        }
    }

    private final ArrayList<LocalLog> mLocalLogs = new ArrayList<>();
    private final LocalLog mLocalLog = new LocalLog(150);
    private final ArrayList<NetworkRequest> mNetworkRequests = new ArrayList<>();
    private final LocalLog mStateLocalLog = new LocalLog(50);

    public void requestLog(String str) {
        synchronized (mRefCountLock) {
            for (LocalLog l : mLocalLogs) {
                l.log(str);
            }
        synchronized (mLocalLog) {
            mLocalLog.log(str);
        }
    }

    public void requestNetwork(NetworkRequest networkRequest, @RequestNetworkType int type,
                               Message onCompleteMsg, LocalLog log) {
                               Message onCompleteMsg) {
        synchronized (mRefCountLock) {
            mLocalLogs.add(log);
            mNetworkRequests.add(networkRequest);
            logl("requestNetwork for " + networkRequest + ", type="
                    + DcTracker.requestTypeToString(type));
            mDcTracker.enableApn(ApnSetting.getApnTypesBitmaskFromString(mApnType), type,
                    onCompleteMsg);
            if (mDataConnection != null) {
@@ -429,17 +420,10 @@ public class ApnContext {
        }
    }

    public void releaseNetwork(NetworkRequest networkRequest, @ReleaseNetworkType int type,
                               LocalLog log) {
    public void releaseNetwork(NetworkRequest networkRequest, @ReleaseNetworkType int type) {
        synchronized (mRefCountLock) {
            if (mLocalLogs.contains(log) == false) {
                log.log("ApnContext.releaseNetwork can't find this log");
            } else {
                mLocalLogs.remove(log);
            }
            if (mNetworkRequests.contains(networkRequest) == false) {
                log.log("ApnContext.releaseNetwork can't find this request ("
                        + networkRequest + ")");
                logl("releaseNetwork can't find this request (" + networkRequest + ")");
            } else {
                mNetworkRequests.remove(networkRequest);
                if (mDataConnection != null) {
@@ -447,8 +431,8 @@ public class ApnContext {
                    // the data connection. For example, the score may change.
                    mDataConnection.reevaluateDataConnectionProperties();
                }
                log.log("ApnContext.releaseNetwork left with " + mNetworkRequests.size() +
                        " requests.");
                logl("releaseNetwork left with " + mNetworkRequests.size()
                        + " requests.");
                if (mNetworkRequests.size() == 0
                        || type == DcTracker.RELEASE_TYPE_DETACH
                        || type == DcTracker.RELEASE_TYPE_HANDOVER) {
@@ -482,8 +466,7 @@ public class ApnContext {
    private final SparseIntArray mRetriesLeftPerErrorCode = new SparseIntArray();

    public void resetErrorCodeRetries() {
        requestLog("ApnContext.resetErrorCodeRetries");
        if (DBG) log("ApnContext.resetErrorCodeRetries");
        logl("ApnContext.resetErrorCodeRetries");

        String[] config = mPhone.getContext().getResources().getStringArray(
                com.android.internal.R.array.config_cell_retries_per_error_code);
@@ -533,10 +516,8 @@ public class ApnContext {
                }
            }
        }
        String str = "ApnContext.restartOnError(" + errorCode + ") found " + retriesLeft +
                " and returned " + result;
        if (DBG) log(str);
        requestLog(str);
        logl("ApnContext.restartOnError(" + errorCode + ") found " + retriesLeft
                + " and returned " + result);
        return result;
    }

@@ -658,8 +639,15 @@ public class ApnContext {
    }

    private void log(String s) {
        if (DBG) {
            Rlog.d(LOG_TAG, "[ApnContext:" + mApnType + "] " + s);
        }
    }

    private void logl(String s) {
        log(s);
        mLocalLog.log(s);
    }

    public void dump(FileDescriptor fd, PrintWriter printWriter, String[] args) {
        final IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, "  ");
@@ -674,10 +662,10 @@ public class ApnContext {
                pw.decreaseIndent();
            }
            pw.increaseIndent();
            for (LocalLog l : mLocalLogs) {
                l.dump(fd, pw, args);
            pw.println("-----");
            }
            pw.println("Local log:");
            mLocalLog.dump(fd, pw, args);
            pw.println("-----");
            pw.decreaseIndent();
            pw.println("Historical APN state:");
            pw.increaseIndent();
+4 −6
Original line number Diff line number Diff line
@@ -606,12 +606,10 @@ public class DataConnection extends StateMachine {
     * @return Fail cause if failed to setup data connection. {@link DataFailCause#NONE} if success.
     */
    private @DataFailCause.FailCause int connect(ConnectionParams cp) {
        if (DBG) {
        log("connect: carrier='" + mApnSetting.getEntryName()
                + "' APN='" + mApnSetting.getApnName()
                + "' proxy='" + mApnSetting.getProxyAddressAsString()
                + "' port='" + mApnSetting.getProxyPort() + "'");
        }
        if (cp.mApnContext != null) cp.mApnContext.requestLog("DataConnection.connect");

        // Check if we should fake an error.
+4 −10
Original line number Diff line number Diff line
@@ -897,24 +897,19 @@ public class DcTracker extends Handler {
    }

    public void requestNetwork(NetworkRequest networkRequest, @RequestNetworkType int type,
                               Message onCompleteMsg, LocalLog log) {
                               Message onCompleteMsg) {
        final int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest);
        final ApnContext apnContext = mApnContextsByType.get(apnType);
        log.log("DcTracker.requestNetwork for " + networkRequest + " found " + apnContext
                + ", type=" + requestTypeToString(type));
        if (apnContext != null) {
            apnContext.requestNetwork(networkRequest, type, onCompleteMsg, log);
            apnContext.requestNetwork(networkRequest, type, onCompleteMsg);
        }
    }

    public void releaseNetwork(NetworkRequest networkRequest, @ReleaseNetworkType int type,
                               LocalLog log) {
    public void releaseNetwork(NetworkRequest networkRequest, @ReleaseNetworkType int type) {
        final int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest);
        final ApnContext apnContext = mApnContextsByType.get(apnType);
        log.log("DcTracker.releaseNetwork for " + networkRequest + " found " + apnContext
                + ", type=" + releaseTypeToString(type));
        if (apnContext != null) {
            apnContext.releaseNetwork(networkRequest, type, log);
            apnContext.releaseNetwork(networkRequest, type);
        }
    }

@@ -1710,7 +1705,6 @@ public class DcTracker extends Handler {
        str = "cleanUpConnectionInternal: X detach=" + detach + " reason="
                + apnContext.getReason();
        if (DBG) log(str + " apnContext=" + apnContext + " dc=" + apnContext.getDataConnection());
        apnContext.requestLog(str);
    }

    /**
+2 −3
Original line number Diff line number Diff line
@@ -204,7 +204,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                                        int transport, Message onCompleteMsg) {
        if (mPhone.getDcTracker(transport) != null) {
            mPhone.getDcTracker(transport).requestNetwork(networkRequest, requestType,
                    onCompleteMsg, mLocalLog);
                    onCompleteMsg);
        }
    }

@@ -212,8 +212,7 @@ public class TelephonyNetworkFactory extends NetworkFactory {
                                        @ReleaseNetworkType int releaseType,
                                        int transport) {
        if (mPhone.getDcTracker(transport) != null) {
            mPhone.getDcTracker(transport).releaseNetwork(networkRequest, releaseType,
                    mLocalLog);
            mPhone.getDcTracker(transport).releaseNetwork(networkRequest, releaseType);
        }
    }

+10 −16
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import android.net.NetworkConfig;
import android.net.NetworkRequest;
import android.telephony.data.ApnSetting;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.LocalLog;

import com.android.internal.R;
import com.android.internal.telephony.DctConstants;
@@ -117,9 +116,8 @@ public class ApnContextTest extends TelephonyTest {
    @Test
    @SmallTest
    public void testNetworkRequestNormal() throws Exception {
        LocalLog log = new LocalLog(3);
        NetworkRequest nr1 = new NetworkRequest.Builder().build();
        mApnContext.requestNetwork(nr1, DcTracker.REQUEST_TYPE_NORMAL, null, log);
        mApnContext.requestNetwork(nr1, DcTracker.REQUEST_TYPE_NORMAL, null);

        verify(mDcTracker, times(1)).enableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.REQUEST_TYPE_NORMAL), eq(null));
@@ -129,17 +127,16 @@ public class ApnContextTest extends TelephonyTest {
                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
                .build();
        LocalLog log2 = new LocalLog(3);

        mApnContext.requestNetwork(nr2, DcTracker.REQUEST_TYPE_NORMAL, null, log2);
        mApnContext.requestNetwork(nr2, DcTracker.REQUEST_TYPE_NORMAL, null);
        verify(mDcTracker, times(2)).enableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.REQUEST_TYPE_NORMAL), eq(null));

        mApnContext.releaseNetwork(nr1, DcTracker.RELEASE_TYPE_NORMAL, log);
        mApnContext.releaseNetwork(nr1, DcTracker.RELEASE_TYPE_NORMAL);
        verify(mDcTracker, never()).disableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.RELEASE_TYPE_NORMAL));

        mApnContext.releaseNetwork(nr2, DcTracker.RELEASE_TYPE_NORMAL, log2);
        mApnContext.releaseNetwork(nr2, DcTracker.RELEASE_TYPE_NORMAL);
        verify(mDcTracker, times(1)).disableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.RELEASE_TYPE_NORMAL));
    }
@@ -147,9 +144,8 @@ public class ApnContextTest extends TelephonyTest {
    @Test
    @SmallTest
    public void testNetworkRequestDetach() throws Exception {
        LocalLog log = new LocalLog(3);
        NetworkRequest nr1 = new NetworkRequest.Builder().build();
        mApnContext.requestNetwork(nr1, DcTracker.REQUEST_TYPE_NORMAL, null, log);
        mApnContext.requestNetwork(nr1, DcTracker.REQUEST_TYPE_NORMAL, null);
        verify(mDcTracker, times(1)).enableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.REQUEST_TYPE_NORMAL), eq(null));

@@ -158,17 +154,16 @@ public class ApnContextTest extends TelephonyTest {
                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
                .build();
        LocalLog log2 = new LocalLog(3);

        mApnContext.requestNetwork(nr2, DcTracker.REQUEST_TYPE_NORMAL, null, log2);
        mApnContext.requestNetwork(nr2, DcTracker.REQUEST_TYPE_NORMAL, null);
        verify(mDcTracker, times(2)).enableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.REQUEST_TYPE_NORMAL), eq(null));

        mApnContext.releaseNetwork(nr1, DcTracker.RELEASE_TYPE_DETACH, log);
        mApnContext.releaseNetwork(nr1, DcTracker.RELEASE_TYPE_DETACH);
        verify(mDcTracker, times(1)).disableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.RELEASE_TYPE_DETACH));

        mApnContext.releaseNetwork(nr2, DcTracker.RELEASE_TYPE_NORMAL, log2);
        mApnContext.releaseNetwork(nr2, DcTracker.RELEASE_TYPE_NORMAL);
        verify(mDcTracker, times(1)).disableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.RELEASE_TYPE_NORMAL));
    }
@@ -176,13 +171,12 @@ public class ApnContextTest extends TelephonyTest {
    @Test
    @SmallTest
    public void testNetworkRequestHandover() throws Exception {
        LocalLog log = new LocalLog(3);
        NetworkRequest nr1 = new NetworkRequest.Builder().build();
        mApnContext.requestNetwork(nr1, DcTracker.REQUEST_TYPE_HANDOVER, null, log);
        mApnContext.requestNetwork(nr1, DcTracker.REQUEST_TYPE_HANDOVER, null);
        verify(mDcTracker, times(1)).enableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.REQUEST_TYPE_HANDOVER), eq(null));

        mApnContext.releaseNetwork(nr1, DcTracker.RELEASE_TYPE_HANDOVER, log);
        mApnContext.releaseNetwork(nr1, DcTracker.RELEASE_TYPE_HANDOVER);
        verify(mDcTracker, times(1)).disableApn(eq(ApnSetting.TYPE_DEFAULT),
                eq(DcTracker.RELEASE_TYPE_HANDOVER));
    }
Loading