Merge "Selectively add stats based on iface active state."
This commit is contained in:
@@ -1033,6 +1033,38 @@ public class NetworkManagementService extends INetworkManagementService.Stub
|
|||||||
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
|
final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 6);
|
||||||
final NetworkStats.Entry entry = new NetworkStats.Entry();
|
final NetworkStats.Entry entry = new NetworkStats.Entry();
|
||||||
|
|
||||||
|
final HashSet<String> knownIfaces = Sets.newHashSet();
|
||||||
|
final HashSet<String> activeIfaces = Sets.newHashSet();
|
||||||
|
|
||||||
|
// collect any historical stats and active state
|
||||||
|
// TODO: migrate to reading from single file
|
||||||
|
if (mBandwidthControlEnabled) {
|
||||||
|
for (String iface : fileListWithoutNull(mStatsXtIface)) {
|
||||||
|
final File ifacePath = new File(mStatsXtIface, iface);
|
||||||
|
|
||||||
|
final long active = readSingleLongFromFile(new File(ifacePath, "active"));
|
||||||
|
if (active == 1) {
|
||||||
|
knownIfaces.add(iface);
|
||||||
|
activeIfaces.add(iface);
|
||||||
|
} else if (active == 0) {
|
||||||
|
knownIfaces.add(iface);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry.iface = iface;
|
||||||
|
entry.uid = UID_ALL;
|
||||||
|
entry.set = SET_DEFAULT;
|
||||||
|
entry.tag = TAG_NONE;
|
||||||
|
entry.rxBytes = readSingleLongFromFile(new File(ifacePath, "rx_bytes"));
|
||||||
|
entry.rxPackets = readSingleLongFromFile(new File(ifacePath, "rx_packets"));
|
||||||
|
entry.txBytes = readSingleLongFromFile(new File(ifacePath, "tx_bytes"));
|
||||||
|
entry.txPackets = readSingleLongFromFile(new File(ifacePath, "tx_packets"));
|
||||||
|
|
||||||
|
stats.addValues(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final ArrayList<String> values = Lists.newArrayList();
|
final ArrayList<String> values = Lists.newArrayList();
|
||||||
|
|
||||||
BufferedReader reader = null;
|
BufferedReader reader = null;
|
||||||
@@ -1058,7 +1090,13 @@ public class NetworkManagementService extends INetworkManagementService.Stub
|
|||||||
entry.txBytes = Long.parseLong(values.get(9));
|
entry.txBytes = Long.parseLong(values.get(9));
|
||||||
entry.txPackets = Long.parseLong(values.get(10));
|
entry.txPackets = Long.parseLong(values.get(10));
|
||||||
|
|
||||||
stats.addValues(entry);
|
if (activeIfaces.contains(entry.iface)) {
|
||||||
|
// combine stats when iface is active
|
||||||
|
stats.combineValues(entry);
|
||||||
|
} else if (!knownIfaces.contains(entry.iface)) {
|
||||||
|
// add stats when iface is unknown
|
||||||
|
stats.addValues(entry);
|
||||||
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
Slog.w(TAG, "problem parsing stats row '" + line + "': " + e);
|
Slog.w(TAG, "problem parsing stats row '" + line + "': " + e);
|
||||||
}
|
}
|
||||||
@@ -1073,24 +1111,6 @@ public class NetworkManagementService extends INetworkManagementService.Stub
|
|||||||
IoUtils.closeQuietly(reader);
|
IoUtils.closeQuietly(reader);
|
||||||
}
|
}
|
||||||
|
|
||||||
// splice in historical stats not reflected in mStatsIface
|
|
||||||
if (mBandwidthControlEnabled) {
|
|
||||||
for (String iface : fileListWithoutNull(mStatsXtIface)) {
|
|
||||||
final File ifacePath = new File(mStatsXtIface, iface);
|
|
||||||
|
|
||||||
entry.iface = iface;
|
|
||||||
entry.uid = UID_ALL;
|
|
||||||
entry.set = SET_DEFAULT;
|
|
||||||
entry.tag = TAG_NONE;
|
|
||||||
entry.rxBytes = readSingleLongFromFile(new File(ifacePath, "rx_bytes"));
|
|
||||||
entry.rxPackets = readSingleLongFromFile(new File(ifacePath, "rx_packets"));
|
|
||||||
entry.txBytes = readSingleLongFromFile(new File(ifacePath, "tx_bytes"));
|
|
||||||
entry.txPackets = readSingleLongFromFile(new File(ifacePath, "tx_packets"));
|
|
||||||
|
|
||||||
stats.combineValues(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
|
|||||||
|
|
||||||
public void testNetworkStatsSummaryDown() throws Exception {
|
public void testNetworkStatsSummaryDown() throws Exception {
|
||||||
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
||||||
|
stageLong(1L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/active"));
|
||||||
stageLong(1024L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_bytes"));
|
stageLong(1024L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_bytes"));
|
||||||
stageLong(128L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_packets"));
|
stageLong(128L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_packets"));
|
||||||
stageLong(2048L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_bytes"));
|
stageLong(2048L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_bytes"));
|
||||||
@@ -119,6 +120,7 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
|
|||||||
|
|
||||||
public void testNetworkStatsCombined() throws Exception {
|
public void testNetworkStatsCombined() throws Exception {
|
||||||
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
||||||
|
stageLong(1L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/active"));
|
||||||
stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
|
stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
|
||||||
stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
|
stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
|
||||||
stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
|
stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
|
||||||
@@ -129,6 +131,18 @@ public class NetworkManagementServiceTest extends AndroidTestCase {
|
|||||||
2205L + 20L, 489339L + 30L, 2237L + 40L);
|
2205L + 20L, 489339L + 30L, 2237L + 40L);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testNetworkStatsCombinedInactive() throws Exception {
|
||||||
|
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
||||||
|
stageLong(0L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/active"));
|
||||||
|
stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
|
||||||
|
stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
|
||||||
|
stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
|
||||||
|
stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
|
||||||
|
|
||||||
|
final NetworkStats stats = mService.getNetworkStatsSummary();
|
||||||
|
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_DEFAULT, TAG_NONE, 10L, 20L, 30L, 40L);
|
||||||
|
}
|
||||||
|
|
||||||
public void testKernelTags() throws Exception {
|
public void testKernelTags() throws Exception {
|
||||||
assertEquals("0", tagToKernel(0x0));
|
assertEquals("0", tagToKernel(0x0));
|
||||||
assertEquals("214748364800", tagToKernel(0x32));
|
assertEquals("214748364800", tagToKernel(0x32));
|
||||||
|
|||||||
Reference in New Issue
Block a user