diff options
| author | 2022-06-17 22:05:25 +0000 | |
|---|---|---|
| committer | 2022-06-17 22:05:25 +0000 | |
| commit | a45f24d3794a78ece95a6e4e664f6794df991de1 (patch) | |
| tree | 9156a23af03ad8a04cc690c6040d01d66e3096e2 | |
| parent | 06086bee8e5d9d0172c0bef090b0c21f20abe253 (diff) | |
| parent | f3f7f92eaffc843d8a98e32fa225ac09e8fcceff (diff) | |
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: I912c22471ecbf1ea4fc39fbaa204bdbde8712af4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
3 files changed, 14 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/pm/AppsFilterImpl.java b/services/core/java/com/android/server/pm/AppsFilterImpl.java index 9fddc76b78c3..181c39ee50b5 100644 --- a/services/core/java/com/android/server/pm/AppsFilterImpl.java +++ b/services/core/java/com/android/server/pm/AppsFilterImpl.java @@ -418,7 +418,9 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable, } else if (changed) { invalidateCache("grantImplicitAccess: " + recipientUid + " -> " + visibleUid); } - onChanged(); + if (changed) { + onChanged(); + } return changed; } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 4f8c792d3b49..94e8ec5c434d 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2859,12 +2859,15 @@ public class PackageManagerService implements PackageSender, TestUtilityService mDexOptHelper.performPackageDexOptUpgradeIfNeeded(); } - private void notifyPackageUseInternal(String packageName, int reason) { long time = System.currentTimeMillis(); - commitPackageStateMutation(null, packageName, packageState -> { - packageState.setLastPackageUsageTime(reason, time); - }); + synchronized (mLock) { + final PackageSetting pkgSetting = mSettings.getPackageLPr(packageName); + if (pkgSetting == null) { + return; + } + pkgSetting.getPkgState().setLastPackageUsageTimeInMills(reason, time); + } } /*package*/ DexManager getDexManager() { diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java index 7bd720acc799..5251fe026a9b 100644 --- a/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java +++ b/services/core/java/com/android/server/pm/pkg/PackageStateUnserialized.java @@ -79,7 +79,10 @@ public class PackageStateUnserialized { return this; } 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; } |