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

Commit 1ec82d8e authored by Hui Wang's avatar Hui Wang Committed by Android (Google) Code Review
Browse files

Revert "Change the resource cache key and limit the maximum size..."

Revert submission 24318542-PackageResourceCache

Reason for revert: presubmit failure b/295414863

Reverted changes: /q/submissionid:24318542-PackageResourceCache

Change-Id: I0199d9687373c5c0056a4af263017e84eb33e0eb
parent 2e457d31
Loading
Loading
Loading
Loading
+12 −32
Original line number Diff line number Diff line
@@ -85,11 +85,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@@ -1318,24 +1318,10 @@ public class SubscriptionManager {

    private final Context mContext;

    /**
     * In order to prevent the overflow of the heap size due to an indiscriminate increase in the
     * cache, the heap size of the resource cache is set sufficiently large.
     */
    private static final int MAX_RESOURCE_CACHE_ENTRY_COUNT = 10_000;

    /**
     * Cache of Resources that has been created in getResourcesForSubId. Key contains package name,
     * and Configuration of Resources. If more than the maximum number of resources are stored in
     * this cache, the least recently used Resources will be removed to maintain the maximum size.
     */
    private static final Map<Pair<String, Configuration>, Resources> sResourcesCache =
            Collections.synchronizedMap(new LinkedHashMap<>(16, 0.75f, true) {
                @Override
                protected boolean removeEldestEntry(Entry eldest) {
                    return size() > MAX_RESOURCE_CACHE_ENTRY_COUNT;
                }
            });
    // Cache of Resource that has been created in getResourcesForSubId. Key is a Pair containing
    // the Context and subId.
    private static final Map<Pair<Context, Integer>, Resources> sResourcesCache =
            new ConcurrentHashMap<>();

    /**
     * A listener class for monitoring changes to {@link SubscriptionInfo} records.
@@ -2821,20 +2807,14 @@ public class SubscriptionManager {
    @NonNull
    public static Resources getResourcesForSubId(Context context, int subId,
            boolean useRootLocale) {
        // Check if the Resources already exists in the cache based on the given context. Find a
        // Resource that match Configuration.
        Pair<String, Configuration> cacheKey = null;
        if (isValidSubscriptionId(subId)) {
            Configuration configurationKey =
                    new Configuration(context.getResources().getConfiguration());
            if (useRootLocale) {
                configurationKey.setLocale(Locale.ROOT);
            }
            cacheKey = Pair.create(context.getPackageName(), configurationKey);
            Resources cached = sResourcesCache.get(cacheKey);
            if (cached != null) {
        // Check if resources for this context and subId already exist in the resource cache.
        // Resources that use the root locale are not cached.
        Pair<Context, Integer> cacheKey = null;
        if (isValidSubscriptionId(subId) && !useRootLocale) {
            cacheKey = Pair.create(context, subId);
            if (sResourcesCache.containsKey(cacheKey)) {
                // Cache hit. Use cached Resources.
                return cached;
                return sResourcesCache.get(cacheKey);
            }
        }