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:
@@ -135,29 +135,28 @@ public class SubscriptionManager {
|
||||
public static final String CACHE_KEY_DEFAULT_SUB_ID_PROPERTY =
|
||||
"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 =
|
||||
new PropertyInvalidatedCache<Void, Integer>(
|
||||
DEFAULT_SUB_ID_CACHE_SIZE,
|
||||
CACHE_KEY_DEFAULT_SUB_ID_PROPERTY) {
|
||||
@Override
|
||||
protected Integer recompute(Void query) {
|
||||
int subId = INVALID_SUBSCRIPTION_ID;
|
||||
MAX_CACHE_SIZE, CACHE_KEY_DEFAULT_SUB_ID_PROPERTY) {
|
||||
@Override
|
||||
protected Integer recompute(Void query) {
|
||||
return getDefaultSubscriptionIdInternal();
|
||||
}};
|
||||
|
||||
try {
|
||||
ISub iSub = TelephonyManager.getSubscriptionService();
|
||||
if (iSub != null) {
|
||||
subId = iSub.getDefaultSubId();
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
// ignore it
|
||||
}
|
||||
private static PropertyInvalidatedCache<Void, Integer> sDefaultDataSubIdCache =
|
||||
new PropertyInvalidatedCache<Void, Integer>(
|
||||
MAX_CACHE_SIZE, CACHE_KEY_DEFAULT_DATA_SUB_ID_PROPERTY) {
|
||||
@Override
|
||||
protected Integer recompute(Void query) {
|
||||
return getDefaultDataSubscriptionIdInternal();
|
||||
}};
|
||||
|
||||
if (VDBG) logd("getDefaultSubId=" + subId);
|
||||
return subId;
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Generates a content {@link Uri} used to receive updates on simInfo change
|
||||
* on the given subscriptionId
|
||||
@@ -1871,6 +1870,22 @@ public class SubscriptionManager {
|
||||
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.
|
||||
*
|
||||
@@ -2021,6 +2036,10 @@ public class SubscriptionManager {
|
||||
* @return the default data subscription Id.
|
||||
*/
|
||||
public static int getDefaultDataSubscriptionId() {
|
||||
return sDefaultDataSubIdCache.query(null);
|
||||
}
|
||||
|
||||
private static int getDefaultDataSubscriptionIdInternal() {
|
||||
int subId = INVALID_SUBSCRIPTION_ID;
|
||||
|
||||
try {
|
||||
@@ -3296,6 +3315,11 @@ public class SubscriptionManager {
|
||||
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.
|
||||
*
|
||||
@@ -3303,5 +3327,6 @@ public class SubscriptionManager {
|
||||
*/
|
||||
public static void clearCaches() {
|
||||
sDefaultSubIdCache.clear();
|
||||
sDefaultDataSubIdCache.clear();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user