diff options
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; } |