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
This commit is contained in:
Lee Shombert
2020-08-13 19:32:18 -07:00
parent 408f136b47
commit 3da8ca16f4

View File

@@ -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;