Cache getDefaultDataSubscriptionId Binder calls

Use PropertyInvalidatedCache to avoid redundant
calls to SubscriptionController.getDefaultDataSubscriptionId
Bug: 151953109
Test: Verified cache operated correctly when phone process is killed.
Test: atest SubscriptionControllerTest
Test: atest android.telephony.cts.SubscriptionManagerTest

Merged-In: Ifbd380a9281d7bc9c3a9b35c5e93207acabf8d15
Change-Id: Ifbd380a9281d7bc9c3a9b35c5e93207acabf8d15
This commit is contained in:
Collin Fijalkovich
2020-03-25 14:30:21 -07:00
parent 2133dc6e73
commit ce43a5985e

View File

@@ -135,29 +135,28 @@ public class SubscriptionManager {
public static final String CACHE_KEY_DEFAULT_SUB_ID_PROPERTY = public static final String CACHE_KEY_DEFAULT_SUB_ID_PROPERTY =
"cache_key.telephony.get_default_sub_id"; "cache_key.telephony.get_default_sub_id";
private static final int DEFAULT_SUB_ID_CACHE_SIZE = 1; /** @hide */
public static final String CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY =
"cache_key.telephony.get_default_data_sub_id";
private static final int MAX_CACHE_SIZE = 4;
private static PropertyInvalidatedCache<Void, Integer> sDefaultSubIdCache = private static PropertyInvalidatedCache<Void, Integer> sDefaultSubIdCache =
new PropertyInvalidatedCache<Void, Integer>( new PropertyInvalidatedCache<Void, Integer>(
DEFAULT_SUB_ID_CACHE_SIZE, MAX_CACHE_SIZE, CACHE_KEY_DEFAULT_SUB_ID_PROPERTY) {
CACHE_KEY_DEFAULT_SUB_ID_PROPERTY) {
@Override @Override
protected Integer recompute(Void query) { protected Integer recompute(Void query) {
int subId = INVALID_SUBSCRIPTION_ID; return getDefaultSubscriptionIdInternal();
}};
try { private static PropertyInvalidatedCache<Void, Integer> sDefaultDataSubIdCache =
ISub iSub = TelephonyManager.getSubscriptionService(); new PropertyInvalidatedCache<Void, Integer>(
if (iSub != null) { MAX_CACHE_SIZE, CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY) {
subId = iSub.getDefaultSubId(); @Override
} protected Integer recompute(Void query) {
} catch (RemoteException ex) { return getDefaultDataSubscriptionIdInternal();
// ignore it }};
}
if (VDBG) logd("getDefaultSubId=" + subId);
return subId;
}
};
/** /**
* Generates a content {@link Uri} used to receive updates on simInfo change * Generates a content {@link Uri} used to receive updates on simInfo change
* on the given subscriptionId * on the given subscriptionId
@@ -1871,6 +1870,22 @@ public class SubscriptionManager {
return sDefaultSubIdCache.query(null); return sDefaultSubIdCache.query(null);
} }
private static int getDefaultSubscriptionIdInternal() {
int subId = INVALID_SUBSCRIPTION_ID;
try {
ISub iSub = TelephonyManager.getSubscriptionService();
if (iSub != null) {
subId = iSub.getDefaultSubId();
}
} catch (RemoteException ex) {
// ignore it
}
if (VDBG) logd("getDefaultSubId=" + subId);
return subId;
}
/** /**
* Returns the system's default voice subscription id. * Returns the system's default voice subscription id.
* *
@@ -2021,6 +2036,10 @@ public class SubscriptionManager {
* @return the default data subscription Id. * @return the default data subscription Id.
*/ */
public static int getDefaultDataSubscriptionId() { public static int getDefaultDataSubscriptionId() {
return sDefaultDataSubIdCache.query(null);
}
private static int getDefaultDataSubscriptionIdInternal() {
int subId = INVALID_SUBSCRIPTION_ID; int subId = INVALID_SUBSCRIPTION_ID;
try { try {
@@ -3296,6 +3315,11 @@ public class SubscriptionManager {
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_SUB_ID_PROPERTY); PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_SUB_ID_PROPERTY);
} }
/** @hide */
public static void invalidateDefaultDataSubIdCaches() {
PropertyInvalidatedCache.invalidateCache(CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY);
}
/** /**
* Clears all process-local binder caches. * Clears all process-local binder caches.
* *
@@ -3303,5 +3327,6 @@ public class SubscriptionManager {
*/ */
public static void clearCaches() { public static void clearCaches() {
sDefaultSubIdCache.clear(); sDefaultSubIdCache.clear();
sDefaultDataSubIdCache.clear();
} }
} }