in metrics/src/main/java/com/facebook/battery/metrics/disk/DiskMetricsCollector.java [40:99]
public synchronized boolean getSnapshot(DiskMetrics snapshot) {
checkNotNull(snapshot, "Null value passed to getSnapshot!");
if (!mIsEnabled) {
return false;
}
try {
ProcFileReader ioReader = mProcIoFileReader.get();
if (ioReader == null) {
ioReader = new ProcFileReader(getIoFilePath());
mProcIoFileReader.set(ioReader);
}
ioReader.reset();
if (!ioReader.isValid()) {
return false;
}
snapshot.rcharBytes = readField(ioReader);
snapshot.wcharBytes = readField(ioReader);
snapshot.syscrCount = readField(ioReader);
snapshot.syscwCount = readField(ioReader);
snapshot.readBytes = readField(ioReader);
snapshot.writeBytes = readField(ioReader);
snapshot.cancelledWriteBytes = readField(ioReader);
ProcFileReader statReader = mProcStatFileReader.get();
if (statReader == null) {
statReader = new ProcFileReader(getStatFilePath());
mProcStatFileReader.set(statReader);
}
statReader.reset();
if (!statReader.isValid()) {
return false;
}
int index = 0;
while (index < PROC_STAT_MAJOR_FAULTS_FIELD) {
statReader.skipSpaces();
index++;
}
snapshot.majorFaults = statReader.readNumber();
while (index < PROC_STAT_BLKIO_TICKS_FIELD) {
statReader.skipSpaces();
index++;
}
snapshot.blkIoTicks = statReader.readNumber();
} catch (ProcFileReader.ParseException pe) {
SystemMetricsLogger.wtf(TAG, "Unable to parse disk field", pe);
return false;
}
return true;
}