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

Commit cf0428e4 authored by Kai Shi's avatar Kai Shi Committed by Automerger Merge Worker
Browse files

Merge "Report the bandwidth from adjacent signal level" am: 1c36e39e am: b9c98448

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1873974

Change-Id: I6be05a007c9b591ecabc9739604a8dea00c9c20a
parents e082b7ac b9c98448
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);