Merge changes Ia71865a9,I40b6de54 into nyc-dev

* changes:
  Log an event whenever we lose the default network.
  Record the transport types for connectivity events.
This commit is contained in:
Pierre Imai
2016-04-14 07:25:33 +00:00
committed by Android (Google) Code Review
2 changed files with 27 additions and 7 deletions

View File

@@ -25,18 +25,30 @@ import android.os.Parcelable;
public class ConnectivityServiceChangeEvent extends IpConnectivityEvent implements Parcelable {
public static final String TAG = "ConnectivityServiceChangeEvent";
private int mNetId;
// The ID of the network that has become the new default or NETID_UNSET if none.
private final int mNetId;
// The ID of the network that was the default before or NETID_UNSET if none.
private final int mPrevNetId;
// The list of transport types of the new default network, for example TRANSPORT_WIFI, as
// defined in NetworkCapabilities.java.
private final int[] mTransportTypes;
public ConnectivityServiceChangeEvent(int netId) {
public ConnectivityServiceChangeEvent(int netId, int prevNetId, int[] transportTypes) {
mNetId = netId;
mPrevNetId = prevNetId;
mTransportTypes = transportTypes;
}
public ConnectivityServiceChangeEvent(Parcel in) {
mNetId = in.readInt();
mPrevNetId = in.readInt();
mTransportTypes = in.createIntArray();
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mNetId);
out.writeInt(mPrevNetId);
out.writeIntArray(mTransportTypes);
}
public static final Parcelable.Creator<ConnectivityServiceChangeEvent> CREATOR
@@ -50,8 +62,8 @@ public class ConnectivityServiceChangeEvent extends IpConnectivityEvent implemen
}
};
public static void logEvent(int netId) {
public static void logEvent(int netId, int prevNetId, int[] transportTypes) {
IpConnectivityEvent.logEvent(IpConnectivityEvent.IPCE_CONSRV_DEFAULT_NET_CHANGE,
new ConnectivityServiceChangeEvent(netId));
new ConnectivityServiceChangeEvent(netId, prevNetId, transportTypes));
}
};

View File

@@ -2206,6 +2206,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
mLegacyTypeTracker.remove(nai, wasDefault);
rematchAllNetworksAndRequests(null, 0);
if (wasDefault && getDefaultNetwork() == null) {
// Log that we lost the default network and there is no replacement.
final int[] transportTypes = new int[0];
ConnectivityServiceChangeEvent.logEvent(NETID_UNSET, nai.network.netId,
transportTypes);
}
if (nai.created) {
// Tell netd to clean up the configuration for this network
// (routing rules, DNS, etc).
@@ -4427,9 +4433,9 @@ public class ConnectivityService extends IConnectivityManager.Stub
teardownUnneededNetwork(oldNetwork);
}
private void makeDefault(NetworkAgentInfo newNetwork) {
private void makeDefault(NetworkAgentInfo newNetwork, NetworkAgentInfo prevNetwork) {
int prevNetId = (prevNetwork == null) ? NETID_UNSET : prevNetwork.network.netId;
if (DBG) log("Switching to new default network: " + newNetwork);
ConnectivityServiceChangeEvent.logEvent(newNetwork.network.netId);
setupDataActivityTracking(newNetwork);
try {
mNetd.setDefaultNetId(newNetwork.network.netId);
@@ -4440,6 +4446,8 @@ public class ConnectivityService extends IConnectivityManager.Stub
handleApplyDefaultProxy(newNetwork.linkProperties.getHttpProxy());
updateTcpBufferSizes(newNetwork);
setDefaultDnsSystemProperties(newNetwork.linkProperties.getDnsServers());
ConnectivityServiceChangeEvent.logEvent(newNetwork.network.netId, prevNetId,
newNetwork.networkCapabilities.getTransportTypes());
}
// Handles a network appearing or improving its score.
@@ -4590,7 +4598,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
if (isNewDefault) {
// Notify system services that this network is up.
makeDefault(newNetwork);
makeDefault(newNetwork, oldDefaultNetwork);
synchronized (ConnectivityService.this) {
// have a new default network, release the transition wakelock in
// a second if it's held. The second pause is to allow apps