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

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

Merge "Report the bandwidth from adjacent signal level"

parents 950281a6 7f96ea26
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -693,6 +693,45 @@ public class LinkBandwidthEstimator extends Handler {
            return -1;
        }

        private int getAvgUsedBandwidthAdjacentThreeLevelKbps() {
            String dataRatName = getDataRatName(mDataRat);
            NetworkBandwidth network = lookupNetwork(mPlmn, dataRatName);

            int bandwidthAtLow = getAvgUsedBandwidthAtLevel(network, mSignalLevel - 1);
            int bandwidthAtHigh = getAvgUsedBandwidthAtLevel(network, mSignalLevel + 1);
            if (bandwidthAtLow > 0 && bandwidthAtHigh > 0) {
                return (bandwidthAtLow + bandwidthAtHigh) / 2;
            }

            int count = 0;
            long value = 0;
            for (int i = -1; i <= 1; i++) {
                int currLevel = mSignalLevel + i;
                if (currLevel < 0 || currLevel >= NUM_SIGNAL_LEVEL) {
                    continue;
                }
                count += network.getCount(mLink, currLevel);
                value += network.getValue(mLink, currLevel);
            }

            if (count >= BW_STATS_COUNT_THRESHOLD) {
                return (int) (value / count);
            }
            return -1;
        }

        private int getAvgUsedBandwidthAtLevel(NetworkBandwidth network,
                int signalLevel) {
            if (signalLevel < 0 || signalLevel >= NUM_SIGNAL_LEVEL) {
                return -1;
            }
            int count = network.getCount(mLink, signalLevel);
            if (count >= BW_STATS_COUNT_THRESHOLD) {
                return (int) (network.getValue(mLink, signalLevel) / count);
            }
            return -1;
        }

        private int getCurrentCount() {
            String dataRatName = getDataRatName(mDataRat);
            NetworkBandwidth network = lookupNetwork(mPlmn, dataRatName);
@@ -705,6 +744,10 @@ public class LinkBandwidthEstimator extends Handler {
            if (mAvgUsedKbps > 0) {
                return mAvgUsedKbps;
            }
            mAvgUsedKbps = getAvgUsedBandwidthAdjacentThreeLevelKbps();
            if (mAvgUsedKbps > 0) {
                return mAvgUsedKbps;
            }
            // Fall back to static value
            return mStaticBwKbps;
        }
+29 −3
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ public class LinkBandwidthEstimatorTest extends TelephonyTest {
        when(mTelephonyFacade.getMobileTxBytes()).thenReturn(0L);
        when(mTelephonyFacade.getMobileTxBytes()).thenReturn(0L);
        when(mPhone.getCurrentCellIdentity()).thenReturn(mCellIdentity);
        // Note that signal level is 0 before 1st MSG_SIGNAL_STRENGTH_CHANGED
        when(mPhone.getSubId()).thenReturn(1);
        when(mSignalStrength.getDbm()).thenReturn(-100);
        when(mSignalStrength.getLevel()).thenReturn(1);
@@ -330,17 +331,43 @@ public class LinkBandwidthEstimatorTest extends TelephonyTest {

        verifyUpdateBandwidth(-1, 19_597);

        addTxBytes(20_000L);
        addRxBytes(50_000L);
        when(mSignalStrength.getLevel()).thenReturn(1);
        when(mSignalStrength.getDbm()).thenReturn(-110);
        mLBE.obtainMessage(MSG_SIGNAL_STRENGTH_CHANGED, mSignalStrength).sendToTarget();
        addElapsedTime(6000);
        moveTimeForward(6000);
        processAllMessages();
        verifyUpdateBandwidth(-1, 19_535);

        when(mSignalStrength.getLevel()).thenReturn(2);
        when(mSignalStrength.getDbm()).thenReturn(-90);
        mLBE.obtainMessage(MSG_SIGNAL_STRENGTH_CHANGED, mSignalStrength).sendToTarget();
        addElapsedTime(6000);
        moveTimeForward(6000);
        processAllMessages();
        verifyUpdateBandwidth(-1, -1);

        for (int i = 0; i < BW_STATS_COUNT_THRESHOLD + 2; i++) {
            addTxBytes(10_000L);
            addRxBytes(1000_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)).sendToTarget();
            processAllMessages();
        }

        when(mSignalStrength.getLevel()).thenReturn(1);
        when(mSignalStrength.getDbm()).thenReturn(-110);
        mLBE.obtainMessage(MSG_SIGNAL_STRENGTH_CHANGED, mSignalStrength).sendToTarget();
        addElapsedTime(6000);
        moveTimeForward(6000);
        processAllMessages();
        verifyUpdateBandwidth(-1, 30_821);
    }


    @Test
    public void testAvgBwForAllPossibleRat() throws Exception {
        Pair<Integer, Integer> values = mLBE.getStaticAvgBw(TelephonyManager.NETWORK_TYPE_GPRS);
@@ -401,7 +428,6 @@ public class LinkBandwidthEstimatorTest extends TelephonyTest {
        addRxBytes(19_000L);
        when(mServiceState.getNrState()).thenReturn(NetworkRegistrationInfo.NR_STATE_CONNECTED);
        when(mServiceState.getNrFrequencyRange()).thenReturn(ServiceState.FREQUENCY_RANGE_MMWAVE);
        when(mSignalStrength.getLevel()).thenReturn(2);
        mLBE.obtainMessage(MSG_NR_FREQUENCY_CHANGED).sendToTarget();
        addElapsedTime(6000);
        moveTimeForward(6000);