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

Commit 7f7a9967 authored by Kai Shi's avatar Kai Shi Committed by Android (Google) Code Review
Browse files

Merge "Ignore stats during network transition" into sc-dev

parents a15d4fd4 34485660
Loading
Loading
Loading
Loading
+29 −9
Original line number Diff line number Diff line
@@ -89,14 +89,16 @@ public class LinkBandwidthEstimator extends Handler {
    static final int MSG_NR_STATE_CHANGED = 7;
    @VisibleForTesting
    static final int MSG_ACTIVE_PHONE_CHANGED = 8;
    @VisibleForTesting
    static final int MSG_DATA_REG_STATE_OR_RAT_CHANGED = 9;

    // TODO: move the following parameters to xml file
    private static final int TRAFFIC_STATS_POLL_INTERVAL_MS = 1_000;
    private static final int MODEM_POLL_MIN_INTERVAL_MS = 5_000;
    private static final int TRAFFIC_MODEM_POLL_BYTE_RATIO = 8;
    private static final int TRAFFIC_POLL_BYTE_THRESHOLD_MAX = 20_000;
    private static final int BYTE_DELTA_ACC_THRESHOLD_MAX_KB = 4_000;
    private static final int MODEM_POLL_TIME_DELTA_MAX_MS = 15_000;
    private static final int BYTE_DELTA_ACC_THRESHOLD_MAX_KB = 8_000;
    private static final int MODEM_POLL_TIME_DELTA_MAX_MS = 10_000;
    private static final int FILTER_UPDATE_MAX_INTERVAL_MS = 5_100;
    // BW samples with Tx or Rx time below the following value is ignored.
    private static final int TX_RX_TIME_MIN_MS = 200;
@@ -183,8 +185,9 @@ public class LinkBandwidthEstimator extends Handler {
    private String mBandwidthUpdatePlmn = UNKNOWN_PLMN;
    private BandwidthState mTxState = new BandwidthState(LINK_TX);
    private BandwidthState mRxState = new BandwidthState(LINK_RX);

    private RegistrantList mBandwidthChangedRegistrants = new RegistrantList();
    private long mLastPlmnOrRatChangeTimeMs;
    private long mLastDrsOrRatChangeTimeMs;

    private static void initAvgBwPerRatTable() {
        for (String config : AVG_BW_PER_RAT) {
@@ -266,11 +269,12 @@ public class LinkBandwidthEstimator extends Handler {
        mPlaceholderNetwork = new NetworkBandwidth(UNKNOWN_PLMN);
        initAvgBwPerRatTable();
        registerNrStateFrequencyChange();
        mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged(AccessNetworkConstants
                .TRANSPORT_TYPE_WWAN, this, MSG_DATA_REG_STATE_OR_RAT_CHANGED, null);
    }

    @Override
    public void handleMessage(Message msg) {
        AsyncResult ar;
        switch (msg.what) {
            case MSG_SCREEN_STATE_CHANGED:
                handleScreenStateChanged((boolean) msg.obj);
@@ -295,6 +299,9 @@ public class LinkBandwidthEstimator extends Handler {
            case MSG_ACTIVE_PHONE_CHANGED:
                handleActivePhoneChanged((int) msg.obj);
                break;
            case MSG_DATA_REG_STATE_OR_RAT_CHANGED:
                handleDrsOrRatChanged((AsyncResult) msg.obj);
                break;
            default:
                Rlog.e(TAG, "invalid message " + msg.what);
                break;
@@ -380,6 +387,12 @@ public class LinkBandwidthEstimator extends Handler {
        handleTrafficStatsPollConditionChanged();
    }

    private void handleDrsOrRatChanged(AsyncResult ar) {
        Pair<Integer, Integer> drsRatPair = (Pair<Integer, Integer>) ar.result;
        logd("DrsOrRatChanged dataRegState " + drsRatPair.first + " rilRat " + drsRatPair.second);
        mLastDrsOrRatChangeTimeMs = mTelephonyFacade.getElapsedSinceBootMillis();
    }

    private void handleTrafficStatsPollConditionChanged() {
        removeMessages(MSG_TRAFFIC_STATS_POLL);
        if (mScreenOn && mIsOnDefaultRoute && mIsOnActiveData) {
@@ -446,8 +459,7 @@ public class LinkBandwidthEstimator extends Handler {
        long timeSinceLastFilterUpdateMs = currTimeMs - mFilterUpdateTimeMs;
        // Update filter
        if (timeSinceLastFilterUpdateMs >= FILTER_UPDATE_MAX_INTERVAL_MS) {
            boolean updatedBandwidth = updateDataRatCellIdentityBandwidth();
            if (!updatedBandwidth) {
            if (!updateDataRatCellIdentityBandwidth()) {
                updateTxRxBandwidthFilterSendToDataConnection();
            }
        }
@@ -479,7 +491,7 @@ public class LinkBandwidthEstimator extends Handler {

    private void updateBandwidthTxRxSamples(ModemActivityInfo modemActivityInfo) {
        if (mLastModemActivityInfo == null || modemActivityInfo == null
                || mNetworkCapabilities == null) {
                || mNetworkCapabilities == null || hasRecentDataRegStatePlmnOrRatChange()) {
            return;
        }

@@ -524,6 +536,14 @@ public class LinkBandwidthEstimator extends Handler {
                .toString());
    }

    private boolean hasRecentDataRegStatePlmnOrRatChange() {
        if (mLastModemActivityInfo == null) {
            return false;
        }
        return (mLastDrsOrRatChangeTimeMs > mLastModemActivityInfo.getTimestampMillis()
            || mLastPlmnOrRatChangeTimeMs > mLastModemActivityInfo.getTimestampMillis());
    }

    private long getModemTxTimeMs(ModemActivityInfo modemActivity) {
        long txTimeMs = 0;
        for (int lvl = 0; lvl < ModemActivityInfo.getNumTxPowerLevels(); lvl++) {
@@ -795,8 +815,7 @@ public class LinkBandwidthEstimator extends Handler {
        mSignalStrengthDbm = signalStrength.getDbm();
        mSignalLevel = signalStrength.getLevel();
        updateByteCountThr();
        boolean updatedBandwidth = updateDataRatCellIdentityBandwidth();
        if (updatedBandwidth) {
        if (updateDataRatCellIdentityBandwidth()) {
            return;
        }

@@ -933,6 +952,7 @@ public class LinkBandwidthEstimator extends Handler {
        if (updatedPlmnOrRat) {
            resetBandwidthFilter();
            updateTxRxBandwidthFilterSendToDataConnection();
            mLastPlmnOrRatChangeTimeMs = mTelephonyFacade.getElapsedSinceBootMillis();
        }
        return updatedPlmnOrRat;
    }
+14 −10
Original line number Diff line number Diff line
@@ -585,7 +585,7 @@ public class LinkBandwidthEstimatorTest extends TelephonyTest {
    }

    @Test
    public void testUseHighTxRxByteEdgeThenUnknownNetwork() throws Exception {
    public void testEdgeThenLteShouldIgnoreTransitionStats() throws Exception {
        mLBE.obtainMessage(MSG_SCREEN_STATE_CHANGED, true).sendToTarget();
        processAllMessages();
        mNri = new NetworkRegistrationInfo.Builder()
@@ -594,7 +594,7 @@ public class LinkBandwidthEstimatorTest extends TelephonyTest {
        when(mServiceState.getNetworkRegistrationInfo(anyInt(), anyInt())).thenReturn(mNri);
        mLBE.obtainMessage(MSG_SIGNAL_STRENGTH_CHANGED, mSignalStrength).sendToTarget();
        processAllMessages();
        for (int i = 0; i < BW_STATS_COUNT_THRESHOLD + 5; i++) {
        for (int i = 0; i < BW_STATS_COUNT_THRESHOLD * 2; i++) {
            addTxBytes(12_000L);
            addRxBytes(24_000L);
            addElapsedTime(5_100);
@@ -608,24 +608,28 @@ public class LinkBandwidthEstimatorTest extends TelephonyTest {
        LinkBandwidthEstimator.NetworkBandwidth network = mLBE.lookupNetwork("310260", 366, "EDGE");

        assertEquals(0, network.getCount(LINK_TX, 1));
        assertEquals(BW_STATS_COUNT_THRESHOLD + 4, network.getCount(LINK_RX, 1));
        assertEquals(24_000L * 8 / 1024 * (BW_STATS_COUNT_THRESHOLD + 4),
        assertEquals(BW_STATS_COUNT_THRESHOLD * 2 - 1, network.getCount(LINK_RX, 1));
        assertEquals(24_000L * 8 / 1024 * (BW_STATS_COUNT_THRESHOLD * 2 - 1),
                network.getValue(LINK_RX, 1));

        mNri = new NetworkRegistrationInfo.Builder()
                .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_UNKNOWN)
                .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE)
                .build();
        when(mServiceState.getNetworkRegistrationInfo(anyInt(), anyInt())).thenReturn(mNri);
        mLBE.obtainMessage(MSG_SIGNAL_STRENGTH_CHANGED, mSignalStrength).sendToTarget();
        processAllMessages();
        for (int i = 0; i < 5; i++) {
        for (int i = BW_STATS_COUNT_THRESHOLD * 2; i < BW_STATS_COUNT_THRESHOLD * 4; i++) {
            addTxBytes(1_200_000L);
            addRxBytes(2_400_000L);
            addElapsedTime(5_100);
            moveTimeForward(5_100);
            processAllMessages();
            mLBE.obtainMessage(MSG_MODEM_ACTIVITY_RETURNED, new ModemActivityInfo(
                    i * 5_100L, 0, 0, TX_TIME_2_MS, i * RX_TIME_2_MS * 10)).sendToTarget();
            processAllMessages();
        }
        network = mLBE.lookupNetwork("310260", 366, "UNKNOWN");
        network = mLBE.lookupNetwork("310260", 366, "LTE");

        assertEquals(0, network.getCount(LINK_RX, 1));
        assertEquals(BW_STATS_COUNT_THRESHOLD * 2 - 2, network.getCount(LINK_RX, 1));
        assertEquals(0, network.getCount(LINK_TX, 1));
    }