[NS B10] Cleanup : remove mRematchedNetworks

This is better computed by the code that applies the change
than by the code that computes the reassignment

Test: FrameworksNetTests
Change-Id: I13e2764fd9b29145499085c3bb56de88a97d6c3c
This commit is contained in:
Chalard Jean
2019-12-11 14:12:30 +09:00
parent 96a4f4b8de
commit b10ab41350

View File

@@ -6512,23 +6512,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
// An accumulator class to gather the list of changes that result from a rematch. // An accumulator class to gather the list of changes that result from a rematch.
// TODO : enrich to represent an entire set of changes to apply.
private static class NetworkReassignment { private static class NetworkReassignment {
static class NetworkBgStatePair {
@NonNull final NetworkAgentInfo mNetwork;
final boolean mOldBackground;
NetworkBgStatePair(@NonNull final NetworkAgentInfo network,
final boolean oldBackground) {
mNetwork = network;
mOldBackground = oldBackground;
}
public String toString() {
return "[" + NetworkAgentInfo.toShortString(mNetwork)
+ " oldBg=" + mOldBackground + "]";
}
}
static class RequestReassignment { static class RequestReassignment {
@NonNull public final NetworkRequestInfo mRequest; @NonNull public final NetworkRequestInfo mRequest;
@Nullable public final NetworkAgentInfo mOldNetwork; @Nullable public final NetworkAgentInfo mOldNetwork;
@@ -6548,13 +6532,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
} }
@NonNull private final Set<NetworkBgStatePair> mRematchedNetworks = new ArraySet<>();
@NonNull private final ArrayList<RequestReassignment> mReassignments = new ArrayList<>(); @NonNull private final ArrayList<RequestReassignment> mReassignments = new ArrayList<>();
@NonNull Iterable<NetworkBgStatePair> getRematchedNetworks() {
return mRematchedNetworks;
}
@NonNull Iterable<RequestReassignment> getRequestReassignments() { @NonNull Iterable<RequestReassignment> getRequestReassignments() {
return mReassignments; return mReassignments;
} }
@@ -6575,10 +6554,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
mReassignments.add(reassignment); mReassignments.add(reassignment);
} }
void addRematchedNetwork(@NonNull final NetworkBgStatePair network) {
mRematchedNetworks.add(network);
}
// Will return null if this reassignment does not change the network assigned to // Will return null if this reassignment does not change the network assigned to
// the passed request. // the passed request.
@Nullable @Nullable
@@ -6592,9 +6567,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
public String toString() { public String toString() {
final StringJoiner sj = new StringJoiner(", " /* delimiter */, final StringJoiner sj = new StringJoiner(", " /* delimiter */,
"NetReassign [" /* prefix */, "]" /* suffix */); "NetReassign [" /* prefix */, "]" /* suffix */);
if (mRematchedNetworks.isEmpty() && mReassignments.isEmpty()) { if (mReassignments.isEmpty()) return sj.add("no changes").toString();
return sj.add("no changes").toString();
}
for (final RequestReassignment rr : getRequestReassignments()) { for (final RequestReassignment rr : getRequestReassignments()) {
sj.add(rr.toString()); sj.add(rr.toString());
} }
@@ -6604,15 +6577,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
public String debugString() { public String debugString() {
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append("NetworkReassignment :"); sb.append("NetworkReassignment :");
if (mRematchedNetworks.isEmpty() && mReassignments.isEmpty()) { if (mReassignments.isEmpty()) return sb.append(" no changes").toString();
return sb.append(" no changes").toString();
}
final StringJoiner sj = new StringJoiner(", " /* delimiter */,
"\n Rematched networks : " /* prefix */, "" /* suffix */);
for (final NetworkBgStatePair rr : mRematchedNetworks) {
sj.add(rr.mNetwork.toShortString());
}
sb.append(sj.toString());
for (final RequestReassignment rr : getRequestReassignments()) { for (final RequestReassignment rr : getRequestReassignments()) {
sb.append("\n ").append(rr); sb.append("\n ").append(rr);
} }
@@ -6660,8 +6625,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
for (final NetworkAgentInfo nai : mNetworkAgentInfos.values()) { for (final NetworkAgentInfo nai : mNetworkAgentInfos.values()) {
if (!nai.everConnected) continue; if (!nai.everConnected) continue;
nais.add(nai); nais.add(nai);
changes.addRematchedNetwork(new NetworkReassignment.NetworkBgStatePair(nai,
nai.isBackgroundNetwork()));
} }
for (final NetworkRequestInfo nri : mNetworkRequests.values()) { for (final NetworkRequestInfo nri : mNetworkRequests.values()) {
@@ -6694,6 +6657,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
private void applyNetworkReassignment(@NonNull final NetworkReassignment changes, private void applyNetworkReassignment(@NonNull final NetworkReassignment changes,
final long now) { final long now) {
final Collection<NetworkAgentInfo> nais = mNetworkAgentInfos.values();
// Since most of the time there are only 0 or 1 background networks, it would probably
// be more efficient to just use an ArrayList here. TODO : measure performance
final ArraySet<NetworkAgentInfo> oldBgNetworks = new ArraySet<>();
for (final NetworkAgentInfo nai : nais) {
if (nai.isBackgroundNetwork()) oldBgNetworks.add(nai);
}
// First, update the lists of satisfied requests in the network agents. This is necessary // First, update the lists of satisfied requests in the network agents. This is necessary
// because some code later depends on this state to be correct, most prominently computing // because some code later depends on this state to be correct, most prominently computing
// the linger status. // the linger status.
@@ -6742,8 +6714,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
} }
final Collection<NetworkAgentInfo> nais = mNetworkAgentInfos.values();
// Update the linger state before processing listen callbacks, because the background // Update the linger state before processing listen callbacks, because the background
// computation depends on whether the network is lingering. Don't send the LOSING callbacks // computation depends on whether the network is lingering. Don't send the LOSING callbacks
// just yet though, because they have to be sent after the listens are processed to keep // just yet though, because they have to be sent after the listens are processed to keep
@@ -6760,15 +6730,17 @@ public class ConnectivityService extends IConnectivityManager.Stub
} }
} }
for (final NetworkReassignment.NetworkBgStatePair event : changes.getRematchedNetworks()) { for (final NetworkAgentInfo nai : nais) {
if (!nai.everConnected) continue;
final boolean oldBackground = oldBgNetworks.contains(nai);
// Process listen requests and update capabilities if the background state has // Process listen requests and update capabilities if the background state has
// changed for this network. For consistency with previous behavior, send onLost // changed for this network. For consistency with previous behavior, send onLost
// callbacks before onAvailable. // callbacks before onAvailable.
processNewlyLostListenRequests(event.mNetwork); processNewlyLostListenRequests(nai);
if (event.mOldBackground != event.mNetwork.isBackgroundNetwork()) { if (oldBackground != nai.isBackgroundNetwork()) {
applyBackgroundChangeForRematch(event.mNetwork); applyBackgroundChangeForRematch(nai);
} }
processNewlySatisfiedListenRequests(event.mNetwork); processNewlySatisfiedListenRequests(nai);
} }
for (final NetworkAgentInfo nai : lingeredNetworks) { for (final NetworkAgentInfo nai : lingeredNetworks) {
@@ -6859,7 +6831,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
// they may get old info. Reverse this after the old startUsing api is removed. // they may get old info. Reverse this after the old startUsing api is removed.
// This is on top of the multiple intent sequencing referenced in the todo above. // This is on top of the multiple intent sequencing referenced in the todo above.
for (NetworkAgentInfo nai : nais) { for (NetworkAgentInfo nai : nais) {
addNetworkToLegacyTypeTracker(nai); if (nai.everConnected) {
addNetworkToLegacyTypeTracker(nai);
}
} }
} }