Merge "Use delta reads for per uid traffic stats" am: 39de2905a5 am: 03074c729f
am: cf8d605cfb
Change-Id: Ia2d3aad715dc1a2ff65ea9ec1a5badeda47c47a6
This commit is contained in:
@@ -64,6 +64,9 @@ public class NetworkStatsFactory {
|
|||||||
|
|
||||||
private boolean mUseBpfStats;
|
private boolean mUseBpfStats;
|
||||||
|
|
||||||
|
// A persistent Snapshot since device start for eBPF stats
|
||||||
|
private final NetworkStats mPersistSnapshot;
|
||||||
|
|
||||||
// TODO: only do adjustments in NetworkStatsService and remove this.
|
// TODO: only do adjustments in NetworkStatsService and remove this.
|
||||||
/**
|
/**
|
||||||
* (Stacked interface) -> (base interface) association for all connected ifaces since boot.
|
* (Stacked interface) -> (base interface) association for all connected ifaces since boot.
|
||||||
@@ -135,6 +138,7 @@ public class NetworkStatsFactory {
|
|||||||
mStatsXtIfaceFmt = new File(procRoot, "net/xt_qtaguid/iface_stat_fmt");
|
mStatsXtIfaceFmt = new File(procRoot, "net/xt_qtaguid/iface_stat_fmt");
|
||||||
mStatsXtUid = new File(procRoot, "net/xt_qtaguid/stats");
|
mStatsXtUid = new File(procRoot, "net/xt_qtaguid/stats");
|
||||||
mUseBpfStats = useBpfStats;
|
mUseBpfStats = useBpfStats;
|
||||||
|
mPersistSnapshot = new NetworkStats(SystemClock.elapsedRealtime(), -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public NetworkStats readBpfNetworkStatsDev() throws IOException {
|
public NetworkStats readBpfNetworkStatsDev() throws IOException {
|
||||||
@@ -268,6 +272,7 @@ public class NetworkStatsFactory {
|
|||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: delete the lastStats parameter
|
||||||
private NetworkStats readNetworkStatsDetailInternal(int limitUid, String[] limitIfaces,
|
private NetworkStats readNetworkStatsDetailInternal(int limitUid, String[] limitIfaces,
|
||||||
int limitTag, NetworkStats lastStats) throws IOException {
|
int limitTag, NetworkStats lastStats) throws IOException {
|
||||||
if (USE_NATIVE_PARSING) {
|
if (USE_NATIVE_PARSING) {
|
||||||
@@ -278,16 +283,28 @@ public class NetworkStatsFactory {
|
|||||||
} else {
|
} else {
|
||||||
stats = new NetworkStats(SystemClock.elapsedRealtime(), -1);
|
stats = new NetworkStats(SystemClock.elapsedRealtime(), -1);
|
||||||
}
|
}
|
||||||
if (nativeReadNetworkStatsDetail(stats, mStatsXtUid.getAbsolutePath(), limitUid,
|
if (mUseBpfStats) {
|
||||||
limitIfaces, limitTag, mUseBpfStats) != 0) {
|
if (nativeReadNetworkStatsDetail(stats, mStatsXtUid.getAbsolutePath(), UID_ALL,
|
||||||
throw new IOException("Failed to parse network stats");
|
null, TAG_ALL, mUseBpfStats) != 0) {
|
||||||
|
throw new IOException("Failed to parse network stats");
|
||||||
|
}
|
||||||
|
mPersistSnapshot.setElapsedRealtime(stats.getElapsedRealtime());
|
||||||
|
mPersistSnapshot.combineAllValues(stats);
|
||||||
|
NetworkStats result = mPersistSnapshot.clone();
|
||||||
|
result.filter(limitUid, limitIfaces, limitTag);
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
if (nativeReadNetworkStatsDetail(stats, mStatsXtUid.getAbsolutePath(), limitUid,
|
||||||
|
limitIfaces, limitTag, mUseBpfStats) != 0) {
|
||||||
|
throw new IOException("Failed to parse network stats");
|
||||||
|
}
|
||||||
|
if (SANITY_CHECK_NATIVE) {
|
||||||
|
final NetworkStats javaStats = javaReadNetworkStatsDetail(mStatsXtUid, limitUid,
|
||||||
|
limitIfaces, limitTag);
|
||||||
|
assertEquals(javaStats, stats);
|
||||||
|
}
|
||||||
|
return stats;
|
||||||
}
|
}
|
||||||
if (SANITY_CHECK_NATIVE) {
|
|
||||||
final NetworkStats javaStats = javaReadNetworkStatsDetail(mStatsXtUid, limitUid,
|
|
||||||
limitIfaces, limitTag);
|
|
||||||
assertEquals(javaStats, stats);
|
|
||||||
}
|
|
||||||
return stats;
|
|
||||||
} else {
|
} else {
|
||||||
return javaReadNetworkStatsDetail(mStatsXtUid, limitUid, limitIfaces, limitTag);
|
return javaReadNetworkStatsDetail(mStatsXtUid, limitUid, limitIfaces, limitTag);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user