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

Commit 1c36e39e authored by Kai Shi's avatar Kai Shi Committed by Gerrit Code Review
Browse files

Merge "Report the bandwidth from adjacent signal level"

parents f37eca4a f1ca4729
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);