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

Commit 3da8ca16 authored by Lee Shombert's avatar Lee Shombert
Browse files

Reduce auto-cork delay to 50ms

Bug: 160971853

Reduce the auto-cork delay from 2s to 50ms.  Testing shows that this
introduces a very few new invalidate calls for the package_info cache
key, and greatly improves the hit ratio for the associated caches.

This change includes a fix to the cache-clear counter.  Some clears
were missing.

Test:
 * phone reboot
 * atest CtsContactsProviderTestCases
 * atest FrameworksServicesTests:UserSystemPackageInstallerTest
 * atest FrameworksServicesTests:PackageManagerSettingsTests
Verified that hit ratios improved over the baseline.  Verified that the
number of extra invalidates did not increase by more than 5.

Change-Id: I4b70b1da8c3927c74077e6da0e60dc56c2e007f1
parent 408f136b
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -413,7 +413,7 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
    public final void disableLocal() {
        synchronized (mLock) {
            mDisabled = true;
            mCache.clear();
            clear();
        }
    }

@@ -463,7 +463,7 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
                            cacheName(), mCache.size(),
                            mLastSeenNonce, currentNonce));
                    }
                    mCache.clear();
                    clear();
                    mLastSeenNonce = currentNonce;
                    cachedResult = null;
                }
@@ -728,9 +728,13 @@ public abstract class PropertyInvalidatedCache<Query, Result> {
     * It's better to use explicit cork and uncork pairs that tighly surround big batches of
     * invalidations, but it's not always practical to tell where these invalidation batches
     * might occur. AutoCorker's time-based corking is a decent alternative.
     *
     * The auto-cork delay is configurable but it should not be too long.  The purpose of
     * the delay is to minimize the number of times a server writes to the system property
     * when invalidating the cache.  One write every 50ms does not hurt system performance.
     */
    public static final class AutoCorker {
        public static final int DEFAULT_AUTO_CORK_DELAY_MS = 2000;
        public static final int DEFAULT_AUTO_CORK_DELAY_MS = 50;

        private final String mPropertyName;
        private final int mAutoCorkDelayMs;