Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 573ce49d authored by lpeter's avatar lpeter
Browse files

Implement metrics to log when to call PropertyInvalidatedCache invalidation

Flag: EXEMPT bugfix

Bug: 339674378
Test: Manual test
Change-Id: I20d56d8f0035fc46395d9aa317b15039e733d147
parent 6c79fb17
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -176,8 +176,9 @@ public final class AppsFilterImpl extends AppsFilterLocked implements Watchable,
    private void onChanged() {
        // App visibility may have changed, which means that earlier fetches from these caches may
        // be invalid.
        PackageManager.invalidatePackageInfoCache();
        ApplicationPackageManager.invalidateGetPackagesForUidCache();
        final int invalidationReason = PackageMetrics.INVALIDATION_REASON_APP_FILTER_CHANGE;
        PackageManagerService.invalidatePackageInfoCache(invalidationReason);
        PackageManagerService.invalidateGetPackagesForUidCache(invalidationReason);
        ApplicationPackageManager.invalidateQueryIntentActivitiesCache();
        dispatchChange(this);
    }
+2 −2
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ import android.annotation.Nullable;
import android.annotation.SpecialUsers.CanBeALL;
import android.annotation.UserIdInt;
import android.app.ApplicationExitInfo;
import android.app.ApplicationPackageManager;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.Flags;
@@ -265,7 +264,8 @@ final class DeletePackageHelper {
                    mPm.updateInstantAppInstallerLocked(packageName);
                }
            }
            ApplicationPackageManager.invalidateGetPackagesForUidCache();
            PackageManagerService.invalidateGetPackagesForUidCache(
                    PackageMetrics.INVALIDATION_REASON_DELETE_PACKAGE);
        }

        if (res) {
+2 −2
Original line number Diff line number Diff line
@@ -104,7 +104,6 @@ import android.annotation.UserIdInt;
import android.apex.ApexInfo;
import android.app.AppOpsManager;
import android.app.ApplicationExitInfo;
import android.app.ApplicationPackageManager;
import android.app.BroadcastOptions;
import android.app.admin.DevicePolicyManagerInternal;
import android.app.backup.IBackupManager;
@@ -2536,7 +2535,8 @@ final class InstallPackageHelper {
            }
            installRequest.onCommitFinished();
        }
        ApplicationPackageManager.invalidateGetPackagesForUidCache();
        PackageManagerService.invalidateGetPackagesForUidCache(
                PackageMetrics.INVALIDATION_REASON_INSTALL_PACKAGE);
    }

    @GuardedBy("mPm.mLock")
+2 −1
Original line number Diff line number Diff line
@@ -626,7 +626,8 @@ class InstallingSession {
        } catch (PackageManagerException e) {
            request.setError("APEX installation failed", e);
        }
        PackageManagerService.invalidatePackageInfoCache();
        PackageManagerService.invalidatePackageInfoCache(
                PackageMetrics.INVALIDATION_REASON_INSTALL_APEX_PACKAGE);
        ApplicationPackageManager.invalidateQueryIntentActivitiesCache();
        mPm.notifyInstallObserver(request);
    }
+27 −8
Original line number Diff line number Diff line
@@ -768,7 +768,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            // disable all package caches that shouldn't apply within system server
            PackageManager.disableApplicationInfoCache();
            PackageManager.disablePackageInfoCache();
            ApplicationPackageManager.invalidateGetPackagesForUidCache();
            invalidateGetPackagesForUidCache(
                    PackageMetrics.INVALIDATION_REASON_DISABLE_PACKAGE_CACHES);
            ApplicationPackageManager.disableGetPackagesForUidCache();
            ApplicationPackageManager.invalidateHasSystemFeatureCache();
            PackageManager.corkPackageInfoCache();
@@ -1050,9 +1051,21 @@ public class PackageManagerService implements PackageSender, TestUtilityService
     * Invalidate the package info cache, which includes updating the cached computer.
     * @hide
     */
    public static void invalidatePackageInfoCache() {
    public static void invalidatePackageInfoCache(int invalidationReason) {
        PackageManager.invalidatePackageInfoCache();
        onChanged();
        PackageMetrics.reportCacheInvalidationEvent(
                PackageMetrics.CACHE_TYPE_APPLICATION_AND_PACKAGE_INFO, invalidationReason);
    }

    /**
     * Invalidate the get packages for UID cache, which includes updating the cached computer.
     * @hide
     */
    public static void invalidateGetPackagesForUidCache(int invalidationReason) {
        ApplicationPackageManager.invalidateGetPackagesForUidCache();
        PackageMetrics.reportCacheInvalidationEvent(
                PackageMetrics.CACHE_TYPE_GET_PACKAGES_FOR_UID, invalidationReason);
    }

    private final Watcher mWatcher = new Watcher() {
@@ -1581,7 +1594,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        // We normally invalidate when we write settings, but in cases where we delay and
        // coalesce settings writes, this strategy would have us invalidate the cache too late.
        // Invalidating on schedule addresses this problem.
        invalidatePackageInfoCache();
        invalidatePackageInfoCache(
                PackageMetrics.INVALIDATION_REASON_SCHEDULE_WRITE_SETTINGS);
        ApplicationPackageManager.invalidateQueryIntentActivitiesCache();
        if (!mHandler.hasMessages(WRITE_SETTINGS)) {
            mHandler.sendEmptyMessageDelayed(WRITE_SETTINGS, WRITE_SETTINGS_DELAY);
@@ -1589,7 +1603,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
    }

    void scheduleWritePackageListLocked(int userId) {
        invalidatePackageInfoCache();
        invalidatePackageInfoCache(
                PackageMetrics.INVALIDATION_REASON_SCHEDULE_WRITE_PACKAGE_LIST);
        ApplicationPackageManager.invalidateQueryIntentActivitiesCache();
        if (!mHandler.hasMessages(WRITE_PACKAGE_LIST)) {
            Message msg = mHandler.obtainMessage(WRITE_PACKAGE_LIST);
@@ -1604,7 +1619,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
    }

    void scheduleWritePackageRestrictions(@CanBeALL @UserIdInt int userId) {
        invalidatePackageInfoCache();
        invalidatePackageInfoCache(
                PackageMetrics.INVALIDATION_REASON_SCHEDULE_WRITE_PACKAGE_RESTRICTIONS);
        if (userId == USER_ALL) {
            synchronized (mDirtyUsers) {
                for (int aUserId : mUserManager.getUserIds()) {
@@ -1985,7 +2001,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mPackageMonitorCallbackHelper = testParams.packageMonitorCallbackHelper;

        registerObservers(false);
        invalidatePackageInfoCache();
        invalidatePackageInfoCache(
                PackageMetrics.INVALIDATION_REASON_PACKAGE_MANAGER_SERVICE_INIT);
    }

    public PackageManagerService(PackageManagerServiceInjector injector, boolean factoryTest,
@@ -7551,7 +7568,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            }
        }

        invalidatePackageInfoCache();
        invalidatePackageInfoCache(
                PackageMetrics.INVALIDATION_REASON_ENABLE_OVERLAY_PACKAGES);
    }

    private boolean canSetOverlayPaths(OverlayPaths origPaths, OverlayPaths newPaths) {
@@ -7738,7 +7756,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        }

        if (accessGranted) {
            ApplicationPackageManager.invalidateGetPackagesForUidCache();
            invalidateGetPackagesForUidCache(
                    PackageMetrics.INVALIDATION_REASON_GRANT_IMPLICIT_ACCESS);
        }
    }

Loading