Merge changes I52f70756,Icc621f0a

* changes:
  [NS A08] Tiny refactoring
  [NS A07] Move the last side effects out of the decision loop.
This commit is contained in:
Chalard Jean
2019-11-21 08:32:35 +00:00
committed by Gerrit Code Review

View File

@@ -6336,10 +6336,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
final ArrayMap<NetworkRequestInfo, NetworkAgentInfo> reassignedRequests = new ArrayMap<>(); final ArrayMap<NetworkRequestInfo, NetworkAgentInfo> reassignedRequests = new ArrayMap<>();
// Find and migrate to this Network any NetworkRequests for
// which this network is now the best.
final ArrayList<NetworkAgentInfo> removedRequests = new ArrayList<>();
final ArrayList<NetworkRequestInfo> addedRequests = new ArrayList<>();
NetworkCapabilities nc = newNetwork.networkCapabilities; NetworkCapabilities nc = newNetwork.networkCapabilities;
if (VDBG) log(" network has: " + nc); if (VDBG) log(" network has: " + nc);
for (NetworkRequestInfo nri : mNetworkRequests.values()) { for (NetworkRequestInfo nri : mNetworkRequests.values()) {
@@ -6366,21 +6362,37 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
if (currentNetwork == null || currentNetwork.getCurrentScore() < score) { if (currentNetwork == null || currentNetwork.getCurrentScore() < score) {
reassignedRequests.put(nri, newNetwork); reassignedRequests.put(nri, newNetwork);
if (VDBG) log("rematch for " + newNetwork.name());
if (currentNetwork != null) {
if (VDBG || DDBG){
log(" accepting network in place of " + currentNetwork.name());
} }
currentNetwork.removeRequest(nri.request.requestId); } else if (newNetwork.isSatisfyingRequest(nri.request.requestId)) {
currentNetwork.lingerRequest(nri.request, now, mLingerDelayMs); reassignedRequests.put(nri, null);
removedRequests.add(currentNetwork); }
}
// Find and migrate to this Network any NetworkRequests for
// which this network is now the best.
final ArrayList<NetworkAgentInfo> removedRequests = new ArrayList<>();
final ArrayList<NetworkRequestInfo> addedRequests = new ArrayList<>();
for (final Map.Entry<NetworkRequestInfo, NetworkAgentInfo> entry :
reassignedRequests.entrySet()) {
final NetworkRequestInfo nri = entry.getKey();
final NetworkAgentInfo previousSatisfier = nri.mSatisfier;
final NetworkAgentInfo newSatisfier = entry.getValue();
if (newSatisfier != null) {
if (VDBG) log("rematch for " + newSatisfier.name());
if (previousSatisfier != null) {
if (VDBG || DDBG) {
log(" accepting network in place of " + previousSatisfier.name());
}
previousSatisfier.removeRequest(nri.request.requestId);
previousSatisfier.lingerRequest(nri.request, now, mLingerDelayMs);
removedRequests.add(previousSatisfier);
} else { } else {
if (VDBG || DDBG) log(" accepting network in place of null"); if (VDBG || DDBG) log(" accepting network in place of null");
} }
newNetwork.unlingerRequest(nri.request); newSatisfier.unlingerRequest(nri.request);
nri.mSatisfier = newNetwork; nri.mSatisfier = newSatisfier;
if (!newNetwork.addRequest(nri.request)) { if (!newSatisfier.addRequest(nri.request)) {
Slog.wtf(TAG, "BUG: " + newNetwork.name() + " already has " + nri.request); Slog.wtf(TAG, "BUG: " + newSatisfier.name() + " already has " + nri.request);
} }
addedRequests.add(nri); addedRequests.add(nri);
keep = true; keep = true;
@@ -6389,26 +6401,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
// TODO - this could get expensive if we have a lot of requests for this // TODO - this could get expensive if we have a lot of requests for this
// network. Think about if there is a way to reduce this. Push // network. Think about if there is a way to reduce this. Push
// netid->request mapping to each factory? // netid->request mapping to each factory?
sendUpdatedScoreToFactories(nri.request, newNetwork); sendUpdatedScoreToFactories(nri.request, newSatisfier);
if (isDefaultRequest(nri)) { if (isDefaultRequest(nri)) {
isNewDefault = true; isNewDefault = true;
oldDefaultNetwork = currentNetwork; oldDefaultNetwork = previousSatisfier;
if (currentNetwork != null) { if (previousSatisfier != null) {
mLingerMonitor.noteLingerDefaultNetwork(currentNetwork, newNetwork); mLingerMonitor.noteLingerDefaultNetwork(previousSatisfier, newSatisfier);
} }
} }
} } else {
} else if (newNetwork.isSatisfyingRequest(nri.request.requestId)) {
reassignedRequests.put(nri, null);
}
}
for (final Map.Entry<NetworkRequestInfo, NetworkAgentInfo> entry :
reassignedRequests.entrySet()) {
final NetworkRequestInfo nri = entry.getKey();
final NetworkAgentInfo previousSatisfier = nri.mSatisfier;
final NetworkAgentInfo newSatisfier = entry.getValue();
if (newSatisfier == null) {
// If "newNetwork" is listed as satisfying "nri" but no longer satisfies "nri", // If "newNetwork" is listed as satisfying "nri" but no longer satisfies "nri",
// mark it as no longer satisfying "nri". Because networks are processed by // mark it as no longer satisfying "nri". Because networks are processed by
// rematchAllNetworksAndRequests() in descending score order, "currentNetwork" will // rematchAllNetworksAndRequests() in descending score order, "currentNetwork" will