Skip to content

Commit 253aca9

Browse files
committed
xrCore: implement Linux xrMemory functions
1 parent 91064e0 commit 253aca9

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

src/xrCore/xrMemory.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
#include "stdafx.h"
22

3+
#if defined(WINDOWS)
34
#include <Psapi.h>
5+
#elif defined(LINUX)
6+
#include <sys/sysinfo.h>
7+
#include <sys/time.h>
8+
#include <sys/resource.h>
9+
#endif
410

511
xrMemory Memory;
612
// Also used in src\xrCore\xrDebug.cpp to prevent use of g_pStringContainer before it initialized
@@ -27,6 +33,7 @@ void xrMemory::_destroy()
2733

2834
XRCORE_API void vminfo(size_t* _free, size_t* reserved, size_t* committed)
2935
{
36+
#if defined(WINDOWS)
3037
MEMORY_BASIC_INFORMATION memory_info;
3138
memory_info.BaseAddress = 0;
3239
*_free = *reserved = *committed = 0;
@@ -40,6 +47,13 @@ XRCORE_API void vminfo(size_t* _free, size_t* reserved, size_t* committed)
4047
}
4148
memory_info.BaseAddress = (char*)memory_info.BaseAddress + memory_info.RegionSize;
4249
}
50+
#elif defined(LINUX)
51+
struct sysinfo si;
52+
sysinfo(&si);
53+
*_free = si.freeram * si.mem_unit;
54+
*reserved = si.bufferram * si.mem_unit;
55+
*committed = (si.totalram - si.freeram + si.totalswap - si.freeswap) * si.mem_unit;
56+
#endif
4357
}
4458

4559
XRCORE_API void log_vminfo()
@@ -51,19 +65,28 @@ XRCORE_API void log_vminfo()
5165

5266
size_t xrMemory::mem_usage()
5367
{
68+
#if defined(WINDOWS)
5469
PROCESS_MEMORY_COUNTERS pmc = {};
5570
if (HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, GetCurrentProcessId()))
5671
{
5772
GetProcessMemoryInfo(h, &pmc, sizeof(pmc));
5873
CloseHandle(h);
5974
}
6075
return pmc.PagefileUsage;
76+
#elif defined(LINUX)
77+
struct rusage ru;
78+
getrusage(RUSAGE_SELF, &ru);
79+
return (size_t)ru.ru_maxrss;
80+
#endif
6181
}
6282

6383
void xrMemory::mem_compact()
6484
{
85+
#if defined(WINDOWS)
6586
RegFlushKey(HKEY_CLASSES_ROOT);
6687
RegFlushKey(HKEY_CURRENT_USER);
88+
#endif
89+
6790
/*
6891
Следующие две команды в целом не нужны.
6992
Современные аллокаторы достаточно грамотно и когда нужно возвращают память операционной системе.
@@ -77,8 +100,11 @@ void xrMemory::mem_compact()
77100
g_pStringContainer->clean();
78101
if (g_pSharedMemoryContainer)
79102
g_pSharedMemoryContainer->clean();
80-
if (strstr(Core.Params, "-swap_on_compact"))
103+
104+
#if defined(WINDOWS)
105+
if (strstr(Core.Params, "-swap_on_compact"))
81106
SetProcessWorkingSetSize(GetCurrentProcess(), size_t(-1), size_t(-1));
107+
#endif
82108
}
83109

84110
// xr_strdup

0 commit comments

Comments
 (0)