Merge "Fix high traffic PMS lockless methods" into tm-dev am: f3f7f92eaf

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/18913289

Change-Id: I001831ffee3751206a82259b2b57962efaa8204b
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Winson Chiu
2022-06-17 22:17:40 +00:00
committed by Automerger Merge Worker
3 changed files with 14 additions and 6 deletions

View File

@@ -418,7 +418,9 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
} else if (changed) { } else if (changed) {
invalidateCache("grantImplicitAccess: " + recipientUid + " -> " + visibleUid); invalidateCache("grantImplicitAccess: " + recipientUid + " -> " + visibleUid);
} }
onChanged(); if (changed) {
onChanged();
}
return changed; return changed;
} }

View File

@@ -2859,12 +2859,15 @@ public class PackageManagerService implements PackageSender, TestUtilityService
mDexOptHelper.performPackageDexOptUpgradeIfNeeded(); mDexOptHelper.performPackageDexOptUpgradeIfNeeded();
} }
private void notifyPackageUseInternal(String packageName, int reason) { private void notifyPackageUseInternal(String packageName, int reason) {
long time = System.currentTimeMillis(); long time = System.currentTimeMillis();
commitPackageStateMutation(null, packageName, packageState -> { synchronized (mLock) {
packageState.setLastPackageUsageTime(reason, time); final PackageSetting pkgSetting = mSettings.getPackageLPr(packageName);
}); if (pkgSetting == null) {
return;
}
pkgSetting.getPkgState().setLastPackageUsageTimeInMills(reason, time);
}
} }
/*package*/ DexManager getDexManager() { /*package*/ DexManager getDexManager() {

View File

@@ -79,7 +79,10 @@ public class PackageStateUnserialized {
return this; return this;
} }
getLastPackageUsageTimeInMills()[reason] = time; getLastPackageUsageTimeInMills()[reason] = time;
mPackageSetting.onChanged(); // TODO(b/236180425): This method does not notify snapshot changes because it's called too
// frequently, causing too many re-takes. This should be moved to a separate data structure
// or merged with the general UsageStats to avoid tracking heavily mutated data in the
// package data snapshot.
return this; return this;
} }