7#pragma comment(lib, "pdh.lib")
8#pragma comment(lib, "psapi.lib")
18bool SystemMetrics::s_initialized =
false;
22static PDH_HQUERY s_cpuQuery =
nullptr;
23static PDH_HCOUNTER s_cpuCounter =
nullptr;
26 if (s_initialized)
return;
28 PdhOpenQuery(
nullptr, 0, &s_cpuQuery);
29 PdhAddEnglishCounterA(s_cpuQuery,
30 "\\Processor(_Total)\\% Processor Time",
32 PdhCollectQueryData(s_cpuQuery);
38 if (!s_initialized)
return;
41 PdhCloseQuery(s_cpuQuery);
43 s_cpuCounter =
nullptr;
46 s_initialized =
false;
50 SystemMetricsData data;
51 if (!s_initialized)
return data;
54 PdhCollectQueryData(s_cpuQuery);
55 PDH_FMT_COUNTERVALUE counterVal;
56 PdhGetFormattedCounterValue(s_cpuCounter, PDH_FMT_DOUBLE,
57 nullptr, &counterVal);
58 data.CpuUsagePercent =
static_cast<float>(counterVal.doubleValue);
61 PROCESS_MEMORY_COUNTERS_EX pmc;
62 if (GetProcessMemoryInfo(GetCurrentProcess(),
63 reinterpret_cast<PROCESS_MEMORY_COUNTERS*
>(&pmc),
66 static_cast<float>(pmc.WorkingSetSize) / (1024.0f * 1024.0f);
72#elif defined(PLATFORM_LINUX)
79 s_initialized =
false;
83 SystemMetricsData data;
84 if (!s_initialized)
return data;
87 FILE* f = fopen(
"/proc/self/status",
"r");
90 while (fgets(line,
sizeof(line), f)) {
91 if (strncmp(line,
"VmRSS:", 6) == 0) {
93 sscanf(line + 6,
"%ld", &kb);
94 data.RamUsageMB =
static_cast<float>(kb) / 1024.0f;
107 s_initialized =
true;
111 s_initialized =
false;
static SystemMetricsData Query()
Reads the current CPU/RAM/GPU usage from the OS.
Root namespace for everything the engine exposes.