#include "./resourceusage.h" #if defined(PLATFORM_WINDOWS) #include #include #elif defined(PLATFORM_LINUX) || defined(PLATFORM_UNIX) #include #include #include #endif namespace LibRepoMgr { ResourceUsage::ResourceUsage() { #if defined(PLATFORM_WINDOWS) auto info = PROCESS_MEMORY_COUNTERS(); GetProcessMemoryInfo(GetCurrentProcess(), &info, sizeof(info)); physicalMemory = static_cast(info.WorkingSetSize); physicalMemoryPeak = static_cast(info.PeakWorkingSetSize); #elif defined(PLATFORM_LINUX) || defined(PLATFORM_UNIX) if (auto *const statm = std::fopen("/proc/self/statm", "r")) { auto pages = 0l, pagesInRealMemory = 0l, pagesShared = 0l; if (std::fscanf(statm, "%ld%ld%ld", &pages, &pagesInRealMemory, &pagesShared) == 3) { const auto pageSize = static_cast(sysconf(_SC_PAGESIZE)); virtualMemory = static_cast(pages) * pageSize; residentSetSize = static_cast(pagesInRealMemory) * pageSize; sharedResidentSetSize = static_cast(pagesShared) * pageSize; } std::fclose(statm); } struct rusage rusage; getrusage(RUSAGE_SELF, &rusage); peakResidentSetSize = static_cast(rusage.ru_maxrss) * 1024u; #endif } } // namespace LibRepoMgr #include "reflection/resourceusage.h"