Merge "Stop using PerUidCounter#transact" am: a7db5ddda5
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1821293 Change-Id: Icd1072ef5b8281fa54f71796e7eaa981b0fd943b
This commit is contained in:
@@ -1201,35 +1201,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
mUidToNetworkRequestCount.put(uid, newRequestCount);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to adjust the request counter for the per-app API flows. Directly adjusting the
|
||||
* counter is not ideal however in the per-app flows, the nris can't be removed until they
|
||||
* are used to create the new nris upon set. Therefore the request count limit can be
|
||||
* artificially hit. This method is used as a workaround for this particular case so that
|
||||
* the request counts are accounted for correctly.
|
||||
* @param uid the uid to adjust counts for
|
||||
* @param numOfNewRequests the new request count to account for
|
||||
* @param r the runnable to execute
|
||||
*/
|
||||
public void transact(final int uid, final int numOfNewRequests, @NonNull final Runnable r) {
|
||||
// This should only be used on the handler thread as per all current and foreseen
|
||||
// use-cases. ensureRunningOnConnectivityServiceThread() can't be used because there is
|
||||
// no ref to the outer ConnectivityService.
|
||||
synchronized (mUidToNetworkRequestCount) {
|
||||
final int reqCountOverage = getCallingUidRequestCountOverage(uid, numOfNewRequests);
|
||||
decrementCount(uid, reqCountOverage);
|
||||
r.run();
|
||||
incrementCountOrThrow(uid, reqCountOverage);
|
||||
}
|
||||
}
|
||||
|
||||
private int getCallingUidRequestCountOverage(final int uid, final int numOfNewRequests) {
|
||||
final int newUidRequestCount = mUidToNetworkRequestCount.get(uid, 0)
|
||||
+ numOfNewRequests;
|
||||
return newUidRequestCount >= MAX_NETWORK_REQUESTS_PER_SYSTEM_UID
|
||||
? newUidRequestCount - (MAX_NETWORK_REQUESTS_PER_SYSTEM_UID - 1) : 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4312,8 +4283,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
if (null != nri.getActiveRequest()) {
|
||||
if (!nri.getActiveRequest().isListen()) {
|
||||
removeSatisfiedNetworkRequestFromNetwork(nri);
|
||||
} else {
|
||||
nri.setSatisfier(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4378,7 +4347,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
} else {
|
||||
wasKept = true;
|
||||
}
|
||||
nri.setSatisfier(null, null);
|
||||
if (!wasBackgroundNetwork && nai.isBackgroundNetwork()) {
|
||||
// Went from foreground to background.
|
||||
updateCapabilitiesForNetwork(nai);
|
||||
@@ -10112,13 +10080,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
validateNetworkCapabilitiesOfProfileNetworkPreference(preference.capabilities);
|
||||
|
||||
mProfileNetworkPreferences = mProfileNetworkPreferences.plus(preference);
|
||||
mSystemNetworkRequestCounter.transact(
|
||||
mDeps.getCallingUid(), mProfileNetworkPreferences.preferences.size(),
|
||||
() -> {
|
||||
final ArraySet<NetworkRequestInfo> nris =
|
||||
createNrisFromProfileNetworkPreferences(mProfileNetworkPreferences);
|
||||
replaceDefaultNetworkRequestsForPreference(nris, PREFERENCE_ORDER_PROFILE);
|
||||
});
|
||||
removeDefaultNetworkRequestsForPreference(PREFERENCE_ORDER_PROFILE);
|
||||
addPerAppDefaultNetworkRequests(
|
||||
createNrisFromProfileNetworkPreferences(mProfileNetworkPreferences));
|
||||
// Finally, rematch.
|
||||
rematchAllNetworksAndRequests();
|
||||
|
||||
@@ -10163,14 +10127,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
|
||||
private void handleMobileDataPreferredUidsChanged() {
|
||||
mMobileDataPreferredUids = ConnectivitySettingsManager.getMobileDataPreferredUids(mContext);
|
||||
mSystemNetworkRequestCounter.transact(
|
||||
mDeps.getCallingUid(), 1 /* numOfNewRequests */,
|
||||
() -> {
|
||||
final ArraySet<NetworkRequestInfo> nris =
|
||||
createNrisFromMobileDataPreferredUids(mMobileDataPreferredUids);
|
||||
replaceDefaultNetworkRequestsForPreference(nris,
|
||||
PREFERENCE_ORDER_MOBILE_DATA_PREFERERRED);
|
||||
});
|
||||
removeDefaultNetworkRequestsForPreference(PREFERENCE_ORDER_MOBILE_DATA_PREFERERRED);
|
||||
addPerAppDefaultNetworkRequests(
|
||||
createNrisFromMobileDataPreferredUids(mMobileDataPreferredUids));
|
||||
// Finally, rematch.
|
||||
rematchAllNetworksAndRequests();
|
||||
}
|
||||
@@ -10259,16 +10218,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
}
|
||||
|
||||
mOemNetworkPreferencesLogs.log("UPDATE INITIATED: " + preference);
|
||||
final int uniquePreferenceCount = new ArraySet<>(
|
||||
preference.getNetworkPreferences().values()).size();
|
||||
mSystemNetworkRequestCounter.transact(
|
||||
mDeps.getCallingUid(), uniquePreferenceCount,
|
||||
() -> {
|
||||
final ArraySet<NetworkRequestInfo> nris =
|
||||
new OemNetworkRequestFactory()
|
||||
.createNrisFromOemNetworkPreferences(preference);
|
||||
replaceDefaultNetworkRequestsForPreference(nris, PREFERENCE_ORDER_OEM);
|
||||
});
|
||||
removeDefaultNetworkRequestsForPreference(PREFERENCE_ORDER_OEM);
|
||||
addPerAppDefaultNetworkRequests(new OemNetworkRequestFactory()
|
||||
.createNrisFromOemNetworkPreferences(preference));
|
||||
mOemNetworkPreferences = preference;
|
||||
|
||||
if (null != listener) {
|
||||
@@ -10280,14 +10232,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
}
|
||||
}
|
||||
|
||||
private void replaceDefaultNetworkRequestsForPreference(
|
||||
@NonNull final Set<NetworkRequestInfo> nris, final int preferenceOrder) {
|
||||
private void removeDefaultNetworkRequestsForPreference(final int preferenceOrder) {
|
||||
// Skip the requests which are set by other network preference. Because the uid range rules
|
||||
// should stay in netd.
|
||||
final Set<NetworkRequestInfo> requests = new ArraySet<>(mDefaultNetworkRequests);
|
||||
requests.removeIf(request -> request.mPreferenceOrder != preferenceOrder);
|
||||
handleRemoveNetworkRequests(requests);
|
||||
addPerAppDefaultNetworkRequests(nris);
|
||||
}
|
||||
|
||||
private void addPerAppDefaultNetworkRequests(@NonNull final Set<NetworkRequestInfo> nris) {
|
||||
@@ -10296,14 +10246,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
||||
final ArraySet<NetworkRequestInfo> perAppCallbackRequestsToUpdate =
|
||||
getPerAppCallbackRequestsToUpdate();
|
||||
final ArraySet<NetworkRequestInfo> nrisToRegister = new ArraySet<>(nris);
|
||||
mSystemNetworkRequestCounter.transact(
|
||||
mDeps.getCallingUid(), perAppCallbackRequestsToUpdate.size(),
|
||||
() -> {
|
||||
handleRemoveNetworkRequests(perAppCallbackRequestsToUpdate);
|
||||
nrisToRegister.addAll(
|
||||
createPerAppCallbackRequestsToRegister(perAppCallbackRequestsToUpdate));
|
||||
handleRemoveNetworkRequests(perAppCallbackRequestsToUpdate);
|
||||
handleRegisterNetworkRequests(nrisToRegister);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user