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

Commit da156f88 authored by Ling Ma's avatar Ling Ma Committed by Automerger Merge Worker
Browse files

Merge "Fix testNetworkCachingOverflow failure in CellularNetworkValidatorTest"...

Merge "Fix testNetworkCachingOverflow failure in CellularNetworkValidatorTest" into main am: 8b2c3142 am: 0f26e9b4

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



Change-Id: I1248492f24953a0a2953e8463c2ba305f75a7604
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents de68b6e4 0f26e9b4
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -47,10 +47,9 @@ import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
import com.android.internal.telephony.subscription.SubscriptionManagerService;

import java.util.Comparator;
import java.util.ArrayDeque;
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.concurrent.TimeUnit;

/**
@@ -94,9 +93,8 @@ public class CellularNetworkValidator {
    private class ValidatedNetworkCache {
        // A cache with fixed size. It remembers 10 most recently successfully validated networks.
        private static final int VALIDATED_NETWORK_CACHE_SIZE = 10;
        private final PriorityQueue<ValidatedNetwork> mValidatedNetworkPQ =
                new PriorityQueue<>((Comparator<ValidatedNetwork>) Comparator.comparingLong(
                        (ValidatedNetwork n) -> n.mValidationTimeStamp));

        private final ArrayDeque<ValidatedNetwork> mValidatedNetworkAQ = new ArrayDeque<>();
        private final Map<String, ValidatedNetwork> mValidatedNetworkMap = new HashMap<>();

        private static final class ValidatedNetwork {
@@ -131,7 +129,7 @@ public class CellularNetworkValidator {

            if (!validated) {
                // If validation failed, clear it from the cache.
                mValidatedNetworkPQ.remove(mValidatedNetworkMap.get(networkIdentity));
                mValidatedNetworkAQ.remove(mValidatedNetworkMap.get(networkIdentity));
                mValidatedNetworkMap.remove(networkIdentity);
                return;
            }
@@ -141,16 +139,16 @@ public class CellularNetworkValidator {
                // Already existed in cache, update.
                network.update(time);
                // Re-add to re-sort.
                mValidatedNetworkPQ.remove(network);
                mValidatedNetworkPQ.add(network);
                mValidatedNetworkAQ.remove(network);
                mValidatedNetworkAQ.add(network);
            } else {
                network = new ValidatedNetwork(networkIdentity, time);
                mValidatedNetworkMap.put(networkIdentity, network);
                mValidatedNetworkPQ.add(network);
                mValidatedNetworkAQ.add(network);
            }
            // If exceeded max size, remove the one with smallest validation timestamp.
            if (mValidatedNetworkPQ.size() > VALIDATED_NETWORK_CACHE_SIZE) {
                ValidatedNetwork networkToRemove = mValidatedNetworkPQ.poll();
            if (mValidatedNetworkAQ.size() > VALIDATED_NETWORK_CACHE_SIZE) {
                ValidatedNetwork networkToRemove = mValidatedNetworkAQ.poll();
                mValidatedNetworkMap.remove(networkToRemove.mValidationIdentity);
            }
        }