Merge "[SettingsProvider] skip caching in system server" into udc-dev

This commit is contained in:
TreeHugger Robot
2023-05-03 16:42:11 +00:00
committed by Android (Google) Code Review

View File

@@ -3036,9 +3036,7 @@ public final class Settings {
public void destroy() { public void destroy() {
try { try {
// If this process is the system server process, mArray is the same object as if (!mArray.isClosed()) {
// the memory int array kept inside SettingsProvider, so skipping the close()
if (!Settings.isInSystemServer() && !mArray.isClosed()) {
mArray.close(); mArray.close();
} }
} catch (IOException e) { } catch (IOException e) {
@@ -3218,8 +3216,9 @@ public final class Settings {
@UnsupportedAppUsage @UnsupportedAppUsage
public String getStringForUser(ContentResolver cr, String name, final int userHandle) { public String getStringForUser(ContentResolver cr, String name, final int userHandle) {
final boolean isSelf = (userHandle == UserHandle.myUserId()); final boolean isSelf = (userHandle == UserHandle.myUserId());
final boolean useCache = isSelf && !isInSystemServer();
boolean needsGenerationTracker = false; boolean needsGenerationTracker = false;
if (isSelf) { if (useCache) {
synchronized (NameValueCache.this) { synchronized (NameValueCache.this) {
final GenerationTracker generationTracker = mGenerationTrackers.get(name); final GenerationTracker generationTracker = mGenerationTrackers.get(name);
if (generationTracker != null) { if (generationTracker != null) {
@@ -3251,8 +3250,10 @@ public final class Settings {
needsGenerationTracker = true; needsGenerationTracker = true;
} else { } else {
if (DEBUG || LOCAL_LOGV) { if (DEBUG || LOCAL_LOGV) {
Log.v(TAG, "get setting for user " + userHandle Log.v(TAG, "get setting " + name + " for user " + userHandle + " by user "
+ " by user " + UserHandle.myUserId() + " so skipping cache"); + UserHandle.myUserId()
+ (isInSystemServer() ? " in system_server" : "")
+ " so skipping cache");
} }
} }
@@ -3365,10 +3366,13 @@ public final class Settings {
} }
} }
} else { } else {
if (LOCAL_LOGV) Log.i(TAG, "call-query of user " + userHandle if (DEBUG || LOCAL_LOGV) {
Log.i(TAG, "call-query of user " + userHandle
+ " by " + UserHandle.myUserId() + " by " + UserHandle.myUserId()
+ (isInSystemServer() ? " in system_server" : "")
+ " so not updating cache"); + " so not updating cache");
} }
}
return value; return value;
} }
// If the response Bundle is null, we fall through // If the response Bundle is null, we fall through
@@ -3440,12 +3444,14 @@ public final class Settings {
public ArrayMap<String, String> getStringsForPrefix(ContentResolver cr, String prefix, public ArrayMap<String, String> getStringsForPrefix(ContentResolver cr, String prefix,
List<String> names) { List<String> names) {
final boolean useCache = !isInSystemServer();
String namespace = prefix.substring(0, prefix.length() - 1); String namespace = prefix.substring(0, prefix.length() - 1);
Config.enforceReadPermission(namespace); Config.enforceReadPermission(namespace);
ArrayMap<String, String> keyValues = new ArrayMap<>(); ArrayMap<String, String> keyValues = new ArrayMap<>();
int currentGeneration = -1; int currentGeneration = -1;
boolean needsGenerationTracker = false; boolean needsGenerationTracker = false;
if (useCache) {
synchronized (NameValueCache.this) { synchronized (NameValueCache.this) {
final GenerationTracker generationTracker = mGenerationTrackers.get(prefix); final GenerationTracker generationTracker = mGenerationTrackers.get(prefix);
if (generationTracker != null) { if (generationTracker != null) {
@@ -3491,6 +3497,12 @@ public final class Settings {
needsGenerationTracker = true; needsGenerationTracker = true;
} }
} }
} else {
if (DEBUG || LOCAL_LOGV) {
Log.v(TAG, "getting settings for prefix " + prefix + " in system_server"
+ " so skipping cache");
}
}
if (mCallListCommand == null) { if (mCallListCommand == null) {
// No list command specified, return empty map // No list command specified, return empty map