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:
Junyu Lai
2021-05-19 12:36:03 +00:00
committed by Android (Google) Code Review
5 changed files with 57 additions and 57 deletions

View File

@@ -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) {

View File

@@ -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,

View File

@@ -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(),

View File

@@ -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.

View File

@@ -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