Merge "Avoid locking mChanges when not necessary"

This commit is contained in:
Tom Natan
2021-06-15 20:08:28 +00:00
committed by Gerrit Code Review

View File

@@ -235,14 +235,12 @@ final class CompatConfig {
* @param packageName app for which the overrides will be applied. * @param packageName app for which the overrides will be applied.
*/ */
void addOverrides(CompatibilityOverrideConfig overrides, String packageName) { void addOverrides(CompatibilityOverrideConfig overrides, String packageName) {
synchronized (mChanges) {
for (Long changeId : overrides.overrides.keySet()) { for (Long changeId : overrides.overrides.keySet()) {
addOverrideUnsafe(changeId, packageName, overrides.overrides.get(changeId)); addOverrideUnsafe(changeId, packageName, overrides.overrides.get(changeId));
} }
saveOverrides(); saveOverrides();
invalidateCache(); invalidateCache();
} }
}
private boolean addOverrideUnsafe(long changeId, String packageName, private boolean addOverrideUnsafe(long changeId, String packageName,
PackageOverride overrides) { PackageOverride overrides) {
@@ -335,23 +333,34 @@ final class CompatConfig {
/** /**
* Unsafe version of {@link #removeOverride(long, String)}. * Unsafe version of {@link #removeOverride(long, String)}.
* It does not invalidate the cache nor save the overrides. * It does not save the overrides.
*/ */
private boolean removeOverrideUnsafe(long changeId, String packageName) { private boolean removeOverrideUnsafe(long changeId, String packageName) {
Long versionCode = getVersionCodeOrNull(packageName); Long versionCode = getVersionCodeOrNull(packageName);
synchronized (mChanges) { synchronized (mChanges) {
CompatChange c = mChanges.get(changeId); CompatChange c = mChanges.get(changeId);
if (c != null) { if (c != null) {
return removeOverrideUnsafe(c, packageName, versionCode);
}
}
return false;
}
/**
* Similar to {@link #removeOverrideUnsafe(long, String)} except this method receives a {@link
* CompatChange} directly as well as the package's version code.
*/
private boolean removeOverrideUnsafe(CompatChange change, String packageName,
@Nullable Long versionCode) {
long changeId = change.getId();
OverrideAllowedState allowedState = OverrideAllowedState allowedState =
mOverrideValidator.getOverrideAllowedState(changeId, packageName); mOverrideValidator.getOverrideAllowedState(changeId, packageName);
if (c.hasPackageOverride(packageName)) { if (change.hasPackageOverride(packageName)) {
allowedState.enforce(changeId, packageName); allowedState.enforce(changeId, packageName);
c.removePackageOverride(packageName, allowedState, versionCode); change.removePackageOverride(packageName, allowedState, versionCode);
invalidateCache(); invalidateCache();
return true; return true;
} }
}
}
return false; return false;
} }
@@ -364,10 +373,11 @@ final class CompatConfig {
* @param packageName the package for which the overrides should be purged * @param packageName the package for which the overrides should be purged
*/ */
void removePackageOverrides(String packageName) { void removePackageOverrides(String packageName) {
Long versionCode = getVersionCodeOrNull(packageName);
synchronized (mChanges) { synchronized (mChanges) {
for (int i = 0; i < mChanges.size(); ++i) { for (int i = 0; i < mChanges.size(); ++i) {
CompatChange change = mChanges.valueAt(i); CompatChange change = mChanges.valueAt(i);
removeOverrideUnsafe(change.getId(), packageName); removeOverrideUnsafe(change, packageName, versionCode);
} }
saveOverrides(); saveOverrides();
invalidateCache(); invalidateCache();
@@ -386,14 +396,12 @@ final class CompatConfig {
*/ */
void removePackageOverrides(CompatibilityOverridesToRemoveConfig overridesToRemove, void removePackageOverrides(CompatibilityOverridesToRemoveConfig overridesToRemove,
String packageName) { String packageName) {
synchronized (mChanges) {
for (Long changeId : overridesToRemove.changeIds) { for (Long changeId : overridesToRemove.changeIds) {
removeOverrideUnsafe(changeId, packageName); removeOverrideUnsafe(changeId, packageName);
} }
saveOverrides(); saveOverrides();
invalidateCache(); invalidateCache();
} }
}
private long[] getAllowedChangesSinceTargetSdkForPackage(String packageName, private long[] getAllowedChangesSinceTargetSdkForPackage(String packageName,
int targetSdkVersion) { int targetSdkVersion) {