Merge changes I3ba50cbd,I970ee365 into sc-dev
* changes: [FUI29] Migrate ConnectivityService to use getAllNetworkStateSnapshots [FUI27] Fix internal naming of notifyNetworkStatus
This commit is contained in:
@@ -655,14 +655,14 @@ public class NetworkStatsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify {@code NetworkStatsService} about network status changed.
|
* Notify {@code NetworkStatsService} about network status changed.
|
||||||
*
|
*
|
||||||
* Notifies NetworkStatsService of network state changes for data usage accounting purposes.
|
* Notifies NetworkStatsService of network state changes for data usage accounting purposes.
|
||||||
*
|
*
|
||||||
* To avoid races that attribute data usage to wrong network, such as new network with
|
* To avoid races that attribute data usage to wrong network, such as new network with
|
||||||
* the same interface after SIM hot-swap, this function will not return until
|
* the same interface after SIM hot-swap, this function will not return until
|
||||||
* {@code NetworkStatsService} finishes its work of retrieving traffic statistics from
|
* {@code NetworkStatsService} finishes its work of retrieving traffic statistics from
|
||||||
* all data sources.
|
* all data sources.
|
||||||
*
|
*
|
||||||
* @param defaultNetworks the list of all networks that could be used by network traffic that
|
* @param defaultNetworks the list of all networks that could be used by network traffic that
|
||||||
* does not explicitly select a network.
|
* does not explicitly select a network.
|
||||||
@@ -689,8 +689,7 @@ public class NetworkStatsManager {
|
|||||||
Objects.requireNonNull(defaultNetworks);
|
Objects.requireNonNull(defaultNetworks);
|
||||||
Objects.requireNonNull(networkStateSnapshots);
|
Objects.requireNonNull(networkStateSnapshots);
|
||||||
Objects.requireNonNull(underlyingNetworkInfos);
|
Objects.requireNonNull(underlyingNetworkInfos);
|
||||||
// TODO: Change internal namings after the name is decided.
|
mService.notifyNetworkStatus(defaultNetworks.toArray(new Network[0]),
|
||||||
mService.forceUpdateIfaces(defaultNetworks.toArray(new Network[0]),
|
|
||||||
networkStateSnapshots.toArray(new NetworkStateSnapshot[0]), activeIface,
|
networkStateSnapshots.toArray(new NetworkStateSnapshot[0]), activeIface,
|
||||||
underlyingNetworkInfos.toArray(new UnderlyingNetworkInfo[0]));
|
underlyingNetworkInfos.toArray(new UnderlyingNetworkInfo[0]));
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ interface INetworkStatsService {
|
|||||||
/** Increment data layer count of operations performed for UID and tag. */
|
/** Increment data layer count of operations performed for UID and tag. */
|
||||||
void incrementOperationCount(int uid, int tag, int operationCount);
|
void incrementOperationCount(int uid, int tag, int operationCount);
|
||||||
|
|
||||||
/** Force update of ifaces. */
|
/** Notify {@code NetworkStatsService} about network status changed. */
|
||||||
void forceUpdateIfaces(
|
void notifyNetworkStatus(
|
||||||
in Network[] defaultNetworks,
|
in Network[] defaultNetworks,
|
||||||
in NetworkStateSnapshot[] snapshots,
|
in NetworkStateSnapshot[] snapshots,
|
||||||
in String activeIface,
|
in String activeIface,
|
||||||
|
|||||||
@@ -8584,11 +8584,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
|
|||||||
final UnderlyingNetworkInfo[] underlyingNetworkInfos = getAllVpnInfo();
|
final UnderlyingNetworkInfo[] underlyingNetworkInfos = getAllVpnInfo();
|
||||||
try {
|
try {
|
||||||
final ArrayList<NetworkStateSnapshot> snapshots = new ArrayList<>();
|
final ArrayList<NetworkStateSnapshot> snapshots = new ArrayList<>();
|
||||||
// TODO: Directly use NetworkStateSnapshot when feasible.
|
for (final NetworkStateSnapshot snapshot : getAllNetworkStateSnapshots()) {
|
||||||
for (final NetworkState state : getAllNetworkState()) {
|
|
||||||
final NetworkStateSnapshot snapshot = new NetworkStateSnapshot(state.network,
|
|
||||||
state.networkCapabilities, state.linkProperties, state.subscriberId,
|
|
||||||
state.legacyNetworkType);
|
|
||||||
snapshots.add(snapshot);
|
snapshots.add(snapshot);
|
||||||
}
|
}
|
||||||
mStatsManager.notifyNetworkStatus(getDefaultNetworks(),
|
mStatsManager.notifyNetworkStatus(getDefaultNetworks(),
|
||||||
|
|||||||
@@ -306,7 +306,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// verify service has empty history for wifi
|
// verify service has empty history for wifi
|
||||||
@@ -349,7 +349,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// verify service has empty history for wifi
|
// verify service has empty history for wifi
|
||||||
@@ -423,7 +423,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// modify some number on wifi, and trigger poll event
|
// modify some number on wifi, and trigger poll event
|
||||||
@@ -464,7 +464,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// create some traffic on first network
|
// create some traffic on first network
|
||||||
@@ -499,7 +499,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
.insertEntry(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)
|
.insertEntry(TEST_IFACE, UID_RED, SET_DEFAULT, 0xF00D, 512L, 4L, 512L, 4L, 0L)
|
||||||
.insertEntry(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));
|
.insertEntry(TEST_IFACE, UID_BLUE, SET_DEFAULT, TAG_NONE, 512L, 4L, 0L, 0L, 0L));
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
forcePollAndWaitForIdle();
|
forcePollAndWaitForIdle();
|
||||||
|
|
||||||
@@ -539,7 +539,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// create some traffic
|
// create some traffic
|
||||||
@@ -607,7 +607,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_UMTS);
|
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_UMTS);
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic.
|
// Create some traffic.
|
||||||
@@ -699,7 +699,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
new int[]{NetworkCapabilities.NET_CAPABILITY_OEM_PAID})};
|
new int[]{NetworkCapabilities.NET_CAPABILITY_OEM_PAID})};
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic.
|
// Create some traffic.
|
||||||
@@ -714,7 +714,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
new int[]{NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE})};
|
new int[]{NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE})};
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic.
|
// Create some traffic.
|
||||||
@@ -730,7 +730,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
NetworkCapabilities.NET_CAPABILITY_OEM_PAID})};
|
NetworkCapabilities.NET_CAPABILITY_OEM_PAID})};
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic.
|
// Create some traffic.
|
||||||
@@ -744,7 +744,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
states = new NetworkStateSnapshot[]{buildOemManagedMobileState(IMSI_1, false, new int[]{})};
|
states = new NetworkStateSnapshot[]{buildOemManagedMobileState(IMSI_1, false, new int[]{})};
|
||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic.
|
// Create some traffic.
|
||||||
@@ -797,7 +797,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// create some traffic for two apps
|
// create some traffic for two apps
|
||||||
@@ -856,7 +856,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
NetworkStats.Entry entry1 = new NetworkStats.Entry(
|
NetworkStats.Entry entry1 = new NetworkStats.Entry(
|
||||||
@@ -900,7 +900,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
NetworkStats.Entry uidStats = new NetworkStats.Entry(
|
NetworkStats.Entry uidStats = new NetworkStats.Entry(
|
||||||
@@ -931,7 +931,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
|
|
||||||
// mStatsFactory#readNetworkStatsDetail() has the following invocations:
|
// mStatsFactory#readNetworkStatsDetail() has the following invocations:
|
||||||
// 1) NetworkStatsService#systemReady from #setUp.
|
// 1) NetworkStatsService#systemReady from #setUp.
|
||||||
// 2) mService#forceUpdateIfaces in the test above.
|
// 2) mService#notifyNetworkStatus in the test above.
|
||||||
//
|
//
|
||||||
// Additionally, we should have one call from the above call to mService#getDetailedUidStats
|
// Additionally, we should have one call from the above call to mService#getDetailedUidStats
|
||||||
// with the augmented ifaceFilter.
|
// with the augmented ifaceFilter.
|
||||||
@@ -955,7 +955,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// create some initial traffic
|
// create some initial traffic
|
||||||
@@ -1013,7 +1013,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// create some initial traffic
|
// create some initial traffic
|
||||||
@@ -1053,7 +1053,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic
|
// Create some traffic
|
||||||
@@ -1092,7 +1092,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// create some tethering traffic
|
// create some tethering traffic
|
||||||
@@ -1149,7 +1149,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectNetworkStatsSummary(buildEmptyStats());
|
expectNetworkStatsSummary(buildEmptyStats());
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// verify service has empty history for wifi
|
// verify service has empty history for wifi
|
||||||
@@ -1255,7 +1255,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
mService.registerNetworkStatsProvider("TEST", provider);
|
mService.registerNetworkStatsProvider("TEST", provider);
|
||||||
assertNotNull(cb);
|
assertNotNull(cb);
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Verifies that one requestStatsUpdate will be called during iface update.
|
// Verifies that one requestStatsUpdate will be called during iface update.
|
||||||
@@ -1320,7 +1320,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
mService.registerNetworkStatsProvider("TEST", provider);
|
mService.registerNetworkStatsProvider("TEST", provider);
|
||||||
assertNotNull(cb);
|
assertNotNull(cb);
|
||||||
|
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Verifies that one requestStatsUpdate will be called during iface update.
|
// Verifies that one requestStatsUpdate will be called during iface update.
|
||||||
@@ -1378,7 +1378,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
expectDefaultSettings();
|
expectDefaultSettings();
|
||||||
NetworkStateSnapshot[] states =
|
NetworkStateSnapshot[] states =
|
||||||
new NetworkStateSnapshot[]{buildWifiState(true /* isMetered */, TEST_IFACE)};
|
new NetworkStateSnapshot[]{buildWifiState(true /* isMetered */, TEST_IFACE)};
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Register custom provider and retrieve callback.
|
// Register custom provider and retrieve callback.
|
||||||
@@ -1428,7 +1428,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
|
|
||||||
// 3G network comes online.
|
// 3G network comes online.
|
||||||
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_UMTS);
|
setMobileRatTypeAndWaitForIdle(TelephonyManager.NETWORK_TYPE_UMTS);
|
||||||
mService.forceUpdateIfaces(NETWORKS_MOBILE, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_MOBILE, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic.
|
// Create some traffic.
|
||||||
@@ -1450,7 +1450,8 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
setCombineSubtypeEnabled(true);
|
setCombineSubtypeEnabled(true);
|
||||||
|
|
||||||
// Call handleOnCollapsedRatTypeChanged manually to simulate the callback fired
|
// Call handleOnCollapsedRatTypeChanged manually to simulate the callback fired
|
||||||
// when stopping monitor, this is needed by NetworkStatsService to trigger updateIfaces.
|
// when stopping monitor, this is needed by NetworkStatsService to trigger
|
||||||
|
// handleNotifyNetworkStatus.
|
||||||
mService.handleOnCollapsedRatTypeChanged();
|
mService.handleOnCollapsedRatTypeChanged();
|
||||||
HandlerUtils.waitForIdle(mHandlerThread, WAIT_TIMEOUT);
|
HandlerUtils.waitForIdle(mHandlerThread, WAIT_TIMEOUT);
|
||||||
// Create some traffic.
|
// Create some traffic.
|
||||||
@@ -1499,7 +1500,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest {
|
|||||||
NetworkStateSnapshot[] states = new NetworkStateSnapshot[]{
|
NetworkStateSnapshot[] states = new NetworkStateSnapshot[]{
|
||||||
buildWifiState(true /*isMetered*/, TEST_IFACE2), buildMobile3gState(IMSI_1)};
|
buildWifiState(true /*isMetered*/, TEST_IFACE2), buildMobile3gState(IMSI_1)};
|
||||||
expectNetworkStatsUidDetail(buildEmptyStats());
|
expectNetworkStatsUidDetail(buildEmptyStats());
|
||||||
mService.forceUpdateIfaces(NETWORKS_WIFI, states, getActiveIface(states),
|
mService.notifyNetworkStatus(NETWORKS_WIFI, states, getActiveIface(states),
|
||||||
new UnderlyingNetworkInfo[0]);
|
new UnderlyingNetworkInfo[0]);
|
||||||
|
|
||||||
// Create some traffic on mobile network.
|
// Create some traffic on mobile network.
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
private static final int MSG_PERFORM_POLL = 1;
|
private static final int MSG_PERFORM_POLL = 1;
|
||||||
// Perform polling, persist network, and register the global alert again.
|
// Perform polling, persist network, and register the global alert again.
|
||||||
private static final int MSG_PERFORM_POLL_REGISTER_ALERT = 2;
|
private static final int MSG_PERFORM_POLL_REGISTER_ALERT = 2;
|
||||||
private static final int MSG_UPDATE_IFACES = 3;
|
private static final int MSG_NOTIFY_NETWORK_STATUS = 3;
|
||||||
// A message for broadcasting ACTION_NETWORK_STATS_UPDATED in handler thread to prevent
|
// A message for broadcasting ACTION_NETWORK_STATS_UPDATED in handler thread to prevent
|
||||||
// deadlock.
|
// deadlock.
|
||||||
private static final int MSG_BROADCAST_NETWORK_STATS_UPDATED = 4;
|
private static final int MSG_BROADCAST_NETWORK_STATS_UPDATED = 4;
|
||||||
@@ -379,11 +379,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
performPoll(FLAG_PERSIST_ALL);
|
performPoll(FLAG_PERSIST_ALL);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MSG_UPDATE_IFACES: {
|
case MSG_NOTIFY_NETWORK_STATUS: {
|
||||||
// If no cached states, ignore.
|
// If no cached states, ignore.
|
||||||
if (mLastNetworkStateSnapshots == null) break;
|
if (mLastNetworkStateSnapshots == null) break;
|
||||||
// TODO (b/181642673): Protect mDefaultNetworks from concurrent accessing.
|
// TODO (b/181642673): Protect mDefaultNetworks from concurrent accessing.
|
||||||
updateIfaces(mDefaultNetworks, mLastNetworkStateSnapshots, mActiveIface);
|
handleNotifyNetworkStatus(
|
||||||
|
mDefaultNetworks, mLastNetworkStateSnapshots, mActiveIface);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MSG_PERFORM_POLL_REGISTER_ALERT: {
|
case MSG_PERFORM_POLL_REGISTER_ALERT: {
|
||||||
@@ -474,7 +475,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
@NonNull Looper looper, @NonNull Executor executor,
|
@NonNull Looper looper, @NonNull Executor executor,
|
||||||
@NonNull NetworkStatsService service) {
|
@NonNull NetworkStatsService service) {
|
||||||
// TODO: Update RatType passively in NSS, instead of querying into the monitor
|
// TODO: Update RatType passively in NSS, instead of querying into the monitor
|
||||||
// when forceUpdateIface.
|
// when notifyNetworkStatus.
|
||||||
return new NetworkStatsSubscriptionsMonitor(context, looper, executor,
|
return new NetworkStatsSubscriptionsMonitor(context, looper, executor,
|
||||||
(subscriberId, type) -> service.handleOnCollapsedRatTypeChanged());
|
(subscriberId, type) -> service.handleOnCollapsedRatTypeChanged());
|
||||||
}
|
}
|
||||||
@@ -971,16 +972,19 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void forceUpdateIfaces(
|
/**
|
||||||
Network[] defaultNetworks,
|
* Notify {@code NetworkStatsService} about network status changed.
|
||||||
NetworkStateSnapshot[] networkStates,
|
*/
|
||||||
String activeIface,
|
public void notifyNetworkStatus(
|
||||||
UnderlyingNetworkInfo[] underlyingNetworkInfos) {
|
@NonNull Network[] defaultNetworks,
|
||||||
|
@NonNull NetworkStateSnapshot[] networkStates,
|
||||||
|
@Nullable String activeIface,
|
||||||
|
@NonNull UnderlyingNetworkInfo[] underlyingNetworkInfos) {
|
||||||
checkNetworkStackPermission(mContext);
|
checkNetworkStackPermission(mContext);
|
||||||
|
|
||||||
final long token = Binder.clearCallingIdentity();
|
final long token = Binder.clearCallingIdentity();
|
||||||
try {
|
try {
|
||||||
updateIfaces(defaultNetworks, networkStates, activeIface);
|
handleNotifyNetworkStatus(defaultNetworks, networkStates, activeIface);
|
||||||
} finally {
|
} finally {
|
||||||
Binder.restoreCallingIdentity(token);
|
Binder.restoreCallingIdentity(token);
|
||||||
}
|
}
|
||||||
@@ -1244,12 +1248,12 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
public void handleOnCollapsedRatTypeChanged() {
|
public void handleOnCollapsedRatTypeChanged() {
|
||||||
// Protect service from frequently updating. Remove pending messages if any.
|
// Protect service from frequently updating. Remove pending messages if any.
|
||||||
mHandler.removeMessages(MSG_UPDATE_IFACES);
|
mHandler.removeMessages(MSG_NOTIFY_NETWORK_STATUS);
|
||||||
mHandler.sendMessageDelayed(
|
mHandler.sendMessageDelayed(
|
||||||
mHandler.obtainMessage(MSG_UPDATE_IFACES), mSettings.getPollDelay());
|
mHandler.obtainMessage(MSG_NOTIFY_NETWORK_STATUS), mSettings.getPollDelay());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateIfaces(
|
private void handleNotifyNetworkStatus(
|
||||||
Network[] defaultNetworks,
|
Network[] defaultNetworks,
|
||||||
NetworkStateSnapshot[] snapshots,
|
NetworkStateSnapshot[] snapshots,
|
||||||
String activeIface) {
|
String activeIface) {
|
||||||
@@ -1257,7 +1261,7 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
mWakeLock.acquire();
|
mWakeLock.acquire();
|
||||||
try {
|
try {
|
||||||
mActiveIface = activeIface;
|
mActiveIface = activeIface;
|
||||||
updateIfacesLocked(defaultNetworks, snapshots);
|
handleNotifyNetworkStatusLocked(defaultNetworks, snapshots);
|
||||||
} finally {
|
} finally {
|
||||||
mWakeLock.release();
|
mWakeLock.release();
|
||||||
}
|
}
|
||||||
@@ -1270,10 +1274,10 @@ public class NetworkStatsService extends INetworkStatsService.Stub {
|
|||||||
* they are combined under a single {@link NetworkIdentitySet}.
|
* they are combined under a single {@link NetworkIdentitySet}.
|
||||||
*/
|
*/
|
||||||
@GuardedBy("mStatsLock")
|
@GuardedBy("mStatsLock")
|
||||||
private void updateIfacesLocked(@NonNull Network[] defaultNetworks,
|
private void handleNotifyNetworkStatusLocked(@NonNull Network[] defaultNetworks,
|
||||||
@NonNull NetworkStateSnapshot[] snapshots) {
|
@NonNull NetworkStateSnapshot[] snapshots) {
|
||||||
if (!mSystemReady) return;
|
if (!mSystemReady) return;
|
||||||
if (LOGV) Slog.v(TAG, "updateIfacesLocked()");
|
if (LOGV) Slog.v(TAG, "handleNotifyNetworkStatusLocked()");
|
||||||
|
|
||||||
// take one last stats snapshot before updating iface mapping. this
|
// take one last stats snapshot before updating iface mapping. this
|
||||||
// isn't perfect, since the kernel may already be counting traffic from
|
// isn't perfect, since the kernel may already be counting traffic from
|
||||||
|
|||||||
Reference in New Issue
Block a user