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:
@@ -1201,35 +1201,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
mUidToNetworkRequestCount.put(uid, newRequestCount);
|
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 (null != nri.getActiveRequest()) {
|
||||||
if (!nri.getActiveRequest().isListen()) {
|
if (!nri.getActiveRequest().isListen()) {
|
||||||
removeSatisfiedNetworkRequestFromNetwork(nri);
|
removeSatisfiedNetworkRequestFromNetwork(nri);
|
||||||
} else {
|
|
||||||
nri.setSatisfier(null, null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4378,7 +4347,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
} else {
|
} else {
|
||||||
wasKept = true;
|
wasKept = true;
|
||||||
}
|
}
|
||||||
nri.setSatisfier(null, null);
|
|
||||||
if (!wasBackgroundNetwork && nai.isBackgroundNetwork()) {
|
if (!wasBackgroundNetwork && nai.isBackgroundNetwork()) {
|
||||||
// Went from foreground to background.
|
// Went from foreground to background.
|
||||||
updateCapabilitiesForNetwork(nai);
|
updateCapabilitiesForNetwork(nai);
|
||||||
@@ -10112,13 +10080,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
validateNetworkCapabilitiesOfProfileNetworkPreference(preference.capabilities);
|
validateNetworkCapabilitiesOfProfileNetworkPreference(preference.capabilities);
|
||||||
|
|
||||||
mProfileNetworkPreferences = mProfileNetworkPreferences.plus(preference);
|
mProfileNetworkPreferences = mProfileNetworkPreferences.plus(preference);
|
||||||
mSystemNetworkRequestCounter.transact(
|
removeDefaultNetworkRequestsForPreference(PREFERENCE_ORDER_PROFILE);
|
||||||
mDeps.getCallingUid(), mProfileNetworkPreferences.preferences.size(),
|
addPerAppDefaultNetworkRequests(
|
||||||
() -> {
|
createNrisFromProfileNetworkPreferences(mProfileNetworkPreferences));
|
||||||
final ArraySet<NetworkRequestInfo> nris =
|
|
||||||
createNrisFromProfileNetworkPreferences(mProfileNetworkPreferences);
|
|
||||||
replaceDefaultNetworkRequestsForPreference(nris, PREFERENCE_ORDER_PROFILE);
|
|
||||||
});
|
|
||||||
// Finally, rematch.
|
// Finally, rematch.
|
||||||
rematchAllNetworksAndRequests();
|
rematchAllNetworksAndRequests();
|
||||||
|
|
||||||
@@ -10163,14 +10127,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
|
|
||||||
private void handleMobileDataPreferredUidsChanged() {
|
private void handleMobileDataPreferredUidsChanged() {
|
||||||
mMobileDataPreferredUids = ConnectivitySettingsManager.getMobileDataPreferredUids(mContext);
|
mMobileDataPreferredUids = ConnectivitySettingsManager.getMobileDataPreferredUids(mContext);
|
||||||
mSystemNetworkRequestCounter.transact(
|
removeDefaultNetworkRequestsForPreference(PREFERENCE_ORDER_MOBILE_DATA_PREFERERRED);
|
||||||
mDeps.getCallingUid(), 1 /* numOfNewRequests */,
|
addPerAppDefaultNetworkRequests(
|
||||||
() -> {
|
createNrisFromMobileDataPreferredUids(mMobileDataPreferredUids));
|
||||||
final ArraySet<NetworkRequestInfo> nris =
|
|
||||||
createNrisFromMobileDataPreferredUids(mMobileDataPreferredUids);
|
|
||||||
replaceDefaultNetworkRequestsForPreference(nris,
|
|
||||||
PREFERENCE_ORDER_MOBILE_DATA_PREFERERRED);
|
|
||||||
});
|
|
||||||
// Finally, rematch.
|
// Finally, rematch.
|
||||||
rematchAllNetworksAndRequests();
|
rematchAllNetworksAndRequests();
|
||||||
}
|
}
|
||||||
@@ -10259,16 +10218,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
mOemNetworkPreferencesLogs.log("UPDATE INITIATED: " + preference);
|
mOemNetworkPreferencesLogs.log("UPDATE INITIATED: " + preference);
|
||||||
final int uniquePreferenceCount = new ArraySet<>(
|
removeDefaultNetworkRequestsForPreference(PREFERENCE_ORDER_OEM);
|
||||||
preference.getNetworkPreferences().values()).size();
|
addPerAppDefaultNetworkRequests(new OemNetworkRequestFactory()
|
||||||
mSystemNetworkRequestCounter.transact(
|
.createNrisFromOemNetworkPreferences(preference));
|
||||||
mDeps.getCallingUid(), uniquePreferenceCount,
|
|
||||||
() -> {
|
|
||||||
final ArraySet<NetworkRequestInfo> nris =
|
|
||||||
new OemNetworkRequestFactory()
|
|
||||||
.createNrisFromOemNetworkPreferences(preference);
|
|
||||||
replaceDefaultNetworkRequestsForPreference(nris, PREFERENCE_ORDER_OEM);
|
|
||||||
});
|
|
||||||
mOemNetworkPreferences = preference;
|
mOemNetworkPreferences = preference;
|
||||||
|
|
||||||
if (null != listener) {
|
if (null != listener) {
|
||||||
@@ -10280,14 +10232,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void replaceDefaultNetworkRequestsForPreference(
|
private void removeDefaultNetworkRequestsForPreference(final int preferenceOrder) {
|
||||||
@NonNull final Set<NetworkRequestInfo> nris, final int preferenceOrder) {
|
|
||||||
// Skip the requests which are set by other network preference. Because the uid range rules
|
// Skip the requests which are set by other network preference. Because the uid range rules
|
||||||
// should stay in netd.
|
// should stay in netd.
|
||||||
final Set<NetworkRequestInfo> requests = new ArraySet<>(mDefaultNetworkRequests);
|
final Set<NetworkRequestInfo> requests = new ArraySet<>(mDefaultNetworkRequests);
|
||||||
requests.removeIf(request -> request.mPreferenceOrder != preferenceOrder);
|
requests.removeIf(request -> request.mPreferenceOrder != preferenceOrder);
|
||||||
handleRemoveNetworkRequests(requests);
|
handleRemoveNetworkRequests(requests);
|
||||||
addPerAppDefaultNetworkRequests(nris);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addPerAppDefaultNetworkRequests(@NonNull final Set<NetworkRequestInfo> nris) {
|
private void addPerAppDefaultNetworkRequests(@NonNull final Set<NetworkRequestInfo> nris) {
|
||||||
@@ -10296,14 +10246,10 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
final ArraySet<NetworkRequestInfo> perAppCallbackRequestsToUpdate =
|
final ArraySet<NetworkRequestInfo> perAppCallbackRequestsToUpdate =
|
||||||
getPerAppCallbackRequestsToUpdate();
|
getPerAppCallbackRequestsToUpdate();
|
||||||
final ArraySet<NetworkRequestInfo> nrisToRegister = new ArraySet<>(nris);
|
final ArraySet<NetworkRequestInfo> nrisToRegister = new ArraySet<>(nris);
|
||||||
mSystemNetworkRequestCounter.transact(
|
handleRemoveNetworkRequests(perAppCallbackRequestsToUpdate);
|
||||||
mDeps.getCallingUid(), perAppCallbackRequestsToUpdate.size(),
|
|
||||||
() -> {
|
|
||||||
nrisToRegister.addAll(
|
nrisToRegister.addAll(
|
||||||
createPerAppCallbackRequestsToRegister(perAppCallbackRequestsToUpdate));
|
createPerAppCallbackRequestsToRegister(perAppCallbackRequestsToUpdate));
|
||||||
handleRemoveNetworkRequests(perAppCallbackRequestsToUpdate);
|
|
||||||
handleRegisterNetworkRequests(nrisToRegister);
|
handleRegisterNetworkRequests(nrisToRegister);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user