in metrics/src/main/java/com/facebook/battery/metrics/network/QTagUidNetworkBytesCollector.java [55:115]
public boolean getTotalBytes(long[] bytes) {
try {
if (mProcFileReader == null) {
mProcFileReader = new ProcFileReader(getPath());
}
mProcFileReader.reset();
if (!mProcFileReader.isValid() || !mProcFileReader.hasNext()) {
return false;
}
Arrays.fill(bytes, 0);
// Skip headers.
mProcFileReader.skipLine();
while (mProcFileReader.hasNext()) {
mProcFileReader.skipSpaces(); // Skip over idx
mProcFileReader.readWord(mBuffer); // iface
mProcFileReader.skipSpaces(); // Skip over acct_tag_hex
mProcFileReader.skipSpaces();
long uid = mProcFileReader.readNumber(); // uid_tag_int
mProcFileReader.skipSpaces();
boolean isWifi = WIFI_IFACE.compareTo(mBuffer) == 0;
boolean isMobile =
!isWifi
&& DUMMY_IFACE.compareTo(mBuffer) != 0
&& LOOPBACK_IFACE.compareTo(mBuffer) != 0;
if (uid != UID || !(isWifi || isMobile)) { // can read other uids for old android versions
mProcFileReader.skipLine();
continue;
}
long cntSet = mProcFileReader.readNumber();
mProcFileReader.skipSpaces();
int field = 0;
field |= (isWifi ? WIFI : MOBILE);
field |= (cntSet == 0 ? BG : FG);
bytes[field | RX] += mProcFileReader.readNumber(); // rx_bytes
mProcFileReader.skipSpaces();
mProcFileReader.skipSpaces(); // Skip over rx_packets
bytes[field | TX] += mProcFileReader.readNumber(); // tx_bytes
mProcFileReader.skipLine();
}
} catch (ProcFileReader.ParseException pe) {
SystemMetricsLogger.wtf(TAG, "Unable to parse file", pe);
return false;
}
return true;
}