Merge "Fix concurrency issue in PropertyInvalidatedCache"

This commit is contained in:
Lee Shombert
2022-10-13 22:08:25 +00:00
committed by Android (Google) Code Review
3 changed files with 50 additions and 2 deletions

View File

@@ -1405,6 +1405,17 @@ public class PropertyInvalidatedCache<Query, Result> {
return isDisabled();
}
/**
* Return the number of entries in the cache. This is used for testing and has package-only
* visibility.
* @hide
*/
public int size() {
synchronized (mLock) {
return mCache.size();
}
}
/**
* Returns a list of caches alive at the current time.
*/
@@ -1612,8 +1623,12 @@ public class PropertyInvalidatedCache<Query, Result> {
* @hide
*/
public static void onTrimMemory() {
for (PropertyInvalidatedCache pic : getActiveCaches()) {
pic.clear();
ArrayList<PropertyInvalidatedCache> activeCaches;
synchronized (sGlobalLock) {
activeCaches = getActiveCaches();
}
for (int i = 0; i < activeCaches.size(); i++) {
activeCaches.get(i).clear();
}
}
}

View File

@@ -175,6 +175,23 @@
"file_patterns": [
"(/|^)KeyguardManager.java"
]
},
{
"name": "FrameworksCoreTests",
"options": [
{
"exclude-annotation": "androidx.test.filters.FlakyTest"
},
{
"exclude-annotation": "org.junit.Ignore"
},
{
"include-filter": "android.app.PropertyInvalidatedCacheTest"
}
],
"file_patterns": [
"(/|^)PropertyInvalidatedCache.java"
]
}
],
"presubmit-large": [

View File

@@ -368,4 +368,20 @@ public class PropertyInvalidatedCacheTests {
PropertyInvalidatedCache.MODULE_BLUETOOTH, "getState");
assertEquals(n1, "cache_key.bluetooth.get_state");
}
@Test
public void testOnTrimMemory() {
TestCache cache = new TestCache(MODULE, "trimMemoryTest");
// The cache is not active until it has been invalidated once.
cache.invalidateCache();
// Populate the cache with six entries.
for (int i = 0; i < 6; i++) {
cache.query(i);
}
// The maximum number of entries in TestCache is 4, so even though six entries were
// created, only four are retained.
assertEquals(4, cache.size());
PropertyInvalidatedCache.onTrimMemory();
assertEquals(0, cache.size());
}
}