Merge "Stop using PerUidCounter#transact" am: a7db5ddda5 am: fe5e2742b6

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1821293

Change-Id: I854dedc194d11b7042f9e13da7e0a3151b25bdcf
This commit is contained in:
Paul Hu
2021-10-04 14:11:12 +00:00
committed by Automerger Merge Worker

View File

@@ -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);
});
}
/**