From 9a36d8600c0b263b4b3861b64051a4f62b4251d2 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Sun, 17 May 2020 14:45:12 -0400 Subject: [PATCH 1/2] main: Log host system memory parameters Logs both physical memory and swapfile sizes, this is useful for support. --- src/common/CMakeLists.txt | 2 ++ src/common/memory_detect.cpp | 57 ++++++++++++++++++++++++++++++++++++ src/common/memory_detect.h | 22 ++++++++++++++ src/yuzu/main.cpp | 5 ++++ 4 files changed, 86 insertions(+) create mode 100644 src/common/memory_detect.cpp create mode 100644 src/common/memory_detect.h diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index e6769a5f39..264dff5463 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -123,6 +123,8 @@ add_library(common STATIC lz4_compression.cpp lz4_compression.h math_util.h + memory_detect.cpp + memory_detect.h memory_hook.cpp memory_hook.h microprofile.cpp diff --git a/src/common/memory_detect.cpp b/src/common/memory_detect.cpp new file mode 100644 index 0000000000..b59a45d558 --- /dev/null +++ b/src/common/memory_detect.cpp @@ -0,0 +1,57 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#ifdef _WIN32 +// clang-format off +#include +#include +// clang-format on +#else +#include +#ifdef __APPLE__ +#include +#else +#include +#endif +#endif + +#include "common/memory_detect.h" + +namespace Common { + +// Detects the RAM and Swapfile sizes +static MemoryInfo Detect() { + MemoryInfo mem_info{}; + +#ifdef _WIN32 + MEMORYSTATUSEX memorystatus; + memorystatus.dwLength = sizeof(memorystatus); + GlobalMemoryStatusEx(&memorystatus); + mem_info.TotalPhysicalMemory = memorystatus.ullTotalPhys; + mem_info.TotalSwapMemory = memorystatus.ullTotalPageFile - mem_info.TotalPhysicalMemory; +#elif defined(__APPLE__) + u64 ramsize; + struct xsw_usage vmusage; + // hw and vm are defined in sysctl.h + // https://github.com/apple/darwin-xnu/blob/master/bsd/sys/sysctl.h#L471 + sysctlbyname(hw.memsize, &ramsize, sizeof(ramsize), NULL, 0); + sysctlbyname(vm.swapusage, &vmusage, sizeof(vmusage), NULL, 0); + mem_info.TotalPhysicalMemory = ramsize; + mem_info.TotalSwapMemory = vmusage.xsu_total; +#else + struct sysinfo meminfo; + sysinfo(&meminfo); + mem_info.TotalPhysicalMemory = meminfo.totalram; + mem_info.TotalSwapMemory = meminfo.totalswap; +#endif + + return mem_info; +} + +const MemoryInfo& GetMemInfo() { + static MemoryInfo mem_info = Detect(); + return mem_info; +} + +} // namespace Common \ No newline at end of file diff --git a/src/common/memory_detect.h b/src/common/memory_detect.h new file mode 100644 index 0000000000..a73c0f3f4c --- /dev/null +++ b/src/common/memory_detect.h @@ -0,0 +1,22 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "common/common_types.h" + +namespace Common { + +struct MemoryInfo { + u64 TotalPhysicalMemory{}; + u64 TotalSwapMemory{}; +}; + +/** + * Gets the memory info of the host system + * @return Reference to a MemoryInfo struct with the physical and swap memory sizes in bytes + */ +const MemoryInfo& GetMemInfo(); + +} // namespace Common \ No newline at end of file diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 0b291c7d0c..f690a1508c 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -65,6 +65,7 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual #include "common/logging/backend.h" #include "common/logging/filter.h" #include "common/logging/log.h" +#include "common/memory_detect.h" #include "common/microprofile.h" #include "common/scm_rev.h" #include "common/scope_exit.h" @@ -219,6 +220,10 @@ GMainWindow::GMainWindow() LOG_INFO(Frontend, "Host CPU: {}", Common::GetCPUCaps().cpu_string); #endif LOG_INFO(Frontend, "Host OS: {}", QSysInfo::prettyProductName().toStdString()); + LOG_INFO(Frontend, "Host RAM: {:.2f} GB", + Common::GetMemInfo().TotalPhysicalMemory / 1024.0f / 1024 / 1024); + LOG_INFO(Frontend, "Host Swapfile: {:.2f} GB", + Common::GetMemInfo().TotalSwapMemory / 1024.0f / 1024 / 1024); UpdateWindowTitle(); show(); From b2af3049185567dfb48aab18957221198c8eab09 Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Wed, 27 May 2020 11:21:59 -0400 Subject: [PATCH 2/2] Fix macOS code and change "Swapfile" to "Swap" --- src/common/memory_detect.cpp | 7 +++++-- src/yuzu/main.cpp | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/common/memory_detect.cpp b/src/common/memory_detect.cpp index b59a45d558..3fdc309a21 100644 --- a/src/common/memory_detect.cpp +++ b/src/common/memory_detect.cpp @@ -33,10 +33,13 @@ static MemoryInfo Detect() { #elif defined(__APPLE__) u64 ramsize; struct xsw_usage vmusage; + std::size_t sizeof_ramsize = sizeof(ramsize); + std::size_t sizeof_vmusage = sizeof(vmusage); // hw and vm are defined in sysctl.h // https://github.com/apple/darwin-xnu/blob/master/bsd/sys/sysctl.h#L471 - sysctlbyname(hw.memsize, &ramsize, sizeof(ramsize), NULL, 0); - sysctlbyname(vm.swapusage, &vmusage, sizeof(vmusage), NULL, 0); + // sysctlbyname(const char *, void *, size_t *, void *, size_t); + sysctlbyname("hw.memsize", &ramsize, &sizeof_ramsize, NULL, 0); + sysctlbyname("vm.swapusage", &vmusage, &sizeof_vmusage, NULL, 0); mem_info.TotalPhysicalMemory = ramsize; mem_info.TotalSwapMemory = vmusage.xsu_total; #else diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index f690a1508c..270cccc772 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -222,7 +222,7 @@ GMainWindow::GMainWindow() LOG_INFO(Frontend, "Host OS: {}", QSysInfo::prettyProductName().toStdString()); LOG_INFO(Frontend, "Host RAM: {:.2f} GB", Common::GetMemInfo().TotalPhysicalMemory / 1024.0f / 1024 / 1024); - LOG_INFO(Frontend, "Host Swapfile: {:.2f} GB", + LOG_INFO(Frontend, "Host Swap: {:.2f} GB", Common::GetMemInfo().TotalSwapMemory / 1024.0f / 1024 / 1024); UpdateWindowTitle();