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

Commit 37518604 authored by Pechetty Sravani's avatar Pechetty Sravani Committed by Android (Google) Code Review
Browse files

Revert "Speed up large settings requests."

Revert submission 25806516-anr

Reason for revert: Potential culprit for b/318921810  - verifying through ABTD before revert submission. This is part of the standard investigation process, and does not mean your CL will be reverted.

Reverted changes: /q/submissionid:25806516-anr

Change-Id: I08997b0dabf9b984774a4a43222e022c55ea8f5a
parent f8af62a4
Loading
Loading
Loading
Loading
+22 −29
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -3584,12 +3585,10 @@ public final class Settings {
                    || applicationInfo.isSignedWithPlatformKey();
        }
        private ArrayMap<String, String> getStringsForPrefixStripPrefix(
                ContentResolver cr, String prefix, String[] names) {
        public ArrayMap<String, String> getStringsForPrefix(ContentResolver cr, String prefix,
                List<String> names) {
            String namespace = prefix.substring(0, prefix.length() - 1);
            ArrayMap<String, String> keyValues = new ArrayMap<>();
            int substringLength = prefix.length();
            int currentGeneration = -1;
            boolean needsGenerationTracker = false;
@@ -3614,12 +3613,10 @@ public final class Settings {
                            if (DEBUG) {
                                Log.i(TAG, "Cache hit for prefix:" + prefix);
                            }
                            if (names.length > 0) {
                            if (!names.isEmpty()) {
                                for (String name : names) {
                                    if (mValues.containsKey(name)) {
                                        keyValues.put(
                                                name.substring(substringLength),
                                                mValues.get(name));
                                        keyValues.put(name, mValues.get(name));
                                    }
                                }
                            } else {
@@ -3628,9 +3625,7 @@ public final class Settings {
                                    // Explicitly exclude the prefix as it is only there to
                                    // signal that the prefix has been cached.
                                    if (key.startsWith(prefix) && !key.equals(prefix)) {
                                        keyValues.put(
                                                key.substring(substringLength),
                                                mValues.get(key));
                                        keyValues.put(key, mValues.get(key));
                                    }
                                }
                            }
@@ -3690,22 +3685,14 @@ public final class Settings {
                Map<String, String> flagsToValues =
                        (HashMap) b.getSerializable(Settings.NameValueTable.VALUE, java.util.HashMap.class);
                // Only the flags requested by the caller
                if (names.length > 0) {
                    for (String name : names) {
                        String value = flagsToValues.get(name);
                        if (value != null) {
                            keyValues.put(
                                    name.substring(substringLength),
                                    value);
                if (!names.isEmpty()) {
                    for (Map.Entry<String, String> flag : flagsToValues.entrySet()) {
                        if (names.contains(flag.getKey())) {
                            keyValues.put(flag.getKey(), flag.getValue());
                        }
                    }
                } else {
                    keyValues.ensureCapacity(keyValues.size() + flagsToValues.size());
                    for (Map.Entry<String, String> flag : flagsToValues.entrySet()) {
                        keyValues.put(
                                flag.getKey().substring(substringLength),
                                flag.getValue());
                    }
                    keyValues.putAll(flagsToValues);
                }
                synchronized (NameValueCache.this) {
@@ -19820,15 +19807,21 @@ public final class Settings {
        @RequiresPermission(Manifest.permission.READ_DEVICE_CONFIG)
        public static Map<String, String> getStrings(@NonNull ContentResolver resolver,
                @NonNull String namespace, @NonNull List<String> names) {
            String[] compositeNames = new String[names.size()];
            for (int i = 0, size = names.size(); i < size; ++i) {
                compositeNames[i] = createCompositeName(namespace, names.get(i));
            List<String> compositeNames = new ArrayList<>(names.size());
            for (String name : names) {
                compositeNames.add(createCompositeName(namespace, name));
            }
            String prefix = createPrefix(namespace);
            ArrayMap<String, String> keyValues = sNameValueCache.getStringsForPrefixStripPrefix(
            ArrayMap<String, String> rawKeyValues = sNameValueCache.getStringsForPrefix(
                    resolver, prefix, compositeNames);
            int size = rawKeyValues.size();
            int substringLength = prefix.length();
            ArrayMap<String, String> keyValues = new ArrayMap<>(size);
            for (int i = 0; i < size; ++i) {
                keyValues.put(rawKeyValues.keyAt(i).substring(substringLength),
                        rawKeyValues.valueAt(i));
            }
            return keyValues;
        }