/* Copyright (C) 2024 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
   SPDX-License-Identifier: GPL-3.0-only
   Authors: Felix Weiglhofer [committer] */

#include "MemoryLogger.h"

#include "AlgoFairloggerCompat.h"
#include "System.h"

using namespace cbm::algo;

template<typename T>
T MemoryLogger::BytesToMB(T bytes) const
{
  return bytes / (1024 * 1024);
}

void MemoryLogger::Log()
{
  size_t currentRSS = GetCurrentRSS();
  size_t peakRSS    = GetPeakRSS();

  ptrdiff_t deltaRSS = currentRSS - mLastRSS;
  float deltaPercent = 100.0f * deltaRSS / currentRSS;

  L_(debug) << "Current memory usage: " << BytesToMB(currentRSS) << "MB (delta  " << BytesToMB(deltaRSS) << "MB / "
            << deltaPercent << "%)"
            << ", peak: " << BytesToMB(peakRSS) << "MB";

  mLastRSS = currentRSS;
}