in metrics/src/main/java/com/facebook/battery/metrics/network/MonotonicRadioMonitor.java [71:97]
private long adjustTotalsAndNextIdle(
long transferStartS, long transferEndS, long nextIdleAndTotals) {
long nextIdle = nextIdle(nextIdleAndTotals);
long oldTransferEnd = nextIdle - mWakeUpTimeS;
// If transfer end goes into new second we want at least one second for transfer
long transferDeltaAdjustment = transferEndS > oldTransferEnd ? 1L : 0L;
transferStartS = max(transferStartS, oldTransferEnd);
transferEndS = max(transferEndS, oldTransferEnd);
long oldTransferTotal = totalTxS(nextIdleAndTotals);
long oldTailTotal = totalTailS(nextIdleAndTotals);
long transferDelta = max(transferEndS - transferStartS, transferDeltaAdjustment);
long tailDelta;
if (transferStartS < nextIdle) {
tailDelta =
(transferEndS < nextIdle)
? mWakeUpTimeS - transferDelta - (nextIdle - transferEndS)
: mWakeUpTimeS - (nextIdle - transferStartS);
} else {
tailDelta = mWakeUpTimeS;
}
return makeIdleValue(
transferEndS + mWakeUpTimeS, oldTransferTotal + transferDelta, oldTailTotal + tailDelta);
}