#include "Perfs.hpp" #if defined(__MINGW32__) || defined(_MSC_VER) #include #include #else #include "stdlib.h" #include "stdio.h" #include "string.h" #endif #if !(defined(__MINGW32__) || defined(_MSC_VER)) static int parseLine(char* line) { // This assumes that a digit will be found and the line ends in "kB". int i = strlen(line); const char* p = line; while (*p <'0' || *p > '9') p++; line[i-3] = '\0'; i = atoi(p); return i; } // Returned value in KB! static int getLinuxVirtualMemUsage() { FILE* file = fopen("/proc/self/status", "r"); int result = -1; char line[128]; while (fgets(line, 128, file) != NULL){ if (strncmp(line, "VmSize:", 7) == 0){ result = parseLine(line); break; } } fclose(file); return result; } // Returned value in KB! static int getLinuxPhysicalMemUsage() { FILE* file = fopen("/proc/self/status", "r"); int result = -1; char line[128]; while (fgets(line, 128, file) != NULL){ if (strncmp(line, "VmRSS:", 6) == 0){ result = parseLine(line); break; } } fclose(file); return result; } #endif // Returned value in KB! const size_t PerfsGetVirtMem(void) { size_t out; #if defined(__MINGW32__) || defined(_MSC_VER) PROCESS_MEMORY_COUNTERS_EX memCounter; GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&memCounter, sizeof(memCounter)); out = memCounter.PrivateUsage / 1000; #else out = getLinuxVirtualMemUsage(); #endif return out; } // Returned value in KB! const size_t PerfsGetPhysMem(void) { size_t out; #if defined(__MINGW32__) || defined(_MSC_VER) PROCESS_MEMORY_COUNTERS_EX memCounter; GetProcessMemoryInfo(GetCurrentProcess(), (PROCESS_MEMORY_COUNTERS*)&memCounter, sizeof(memCounter)); out = memCounter.WorkingSetSize / 1000; #else out = getLinuxPhysicalMemUsage(); #endif return out; }