private long adjustTotalsAndNextIdle()

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);
  }