public boolean getTotalBytes()

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