diff options
author | Joshua Ashton <joshua@froggi.es> | 2019-12-18 07:09:15 +0300 |
---|---|---|
committer | Joshua Ashton <joshua@froggi.es> | 2019-12-18 07:34:09 +0300 |
commit | a810f12a2fec675914e29c52f8fe062dd4735af9 (patch) | |
tree | 1533993e92d93fd0cfcfe80063c5afd654029ada | |
parent | 784abe5cf4b7e95e9a992cf44400bd66e3f37fcd (diff) |
[hud] Add sysmem hud itemDisplays info about system memory allocationdxvk-hud-sysmem
-rw-r--r-- | meson.build | 1 | ||||
-rw-r--r-- | src/dxvk/hud/dxvk_hud.cpp | 1 | ||||
-rw-r--r-- | src/dxvk/hud/dxvk_hud_item.cpp | 56 | ||||
-rw-r--r-- | src/dxvk/hud/dxvk_hud_item.h | 25 | ||||
-rw-r--r-- | src/dxvk/meson.build | 2 |
5 files changed, 84 insertions, 1 deletions
diff --git a/meson.build b/meson.build index b282060f..0c0b6a41 100644 --- a/meson.build +++ b/meson.build @@ -67,6 +67,7 @@ else lib_d3d9 = dxvk_compiler.find_library('d3d9') lib_d3d11 = dxvk_compiler.find_library('d3d11') lib_dxgi = dxvk_compiler.find_library('dxgi') + lib_psapi = dxvk_compiler.find_library('psapi') lib_d3dcompiler_43 = dxvk_compiler.find_library('d3dcompiler_43', dirs : dxvk_library_path) if dxvk_compiler.get_id() == 'msvc' diff --git a/src/dxvk/hud/dxvk_hud.cpp b/src/dxvk/hud/dxvk_hud.cpp index 6f9c2e64..9133bcb8 100644 --- a/src/dxvk/hud/dxvk_hud.cpp +++ b/src/dxvk/hud/dxvk_hud.cpp @@ -40,6 +40,7 @@ namespace dxvk::hud { addItem<HudMemoryStatsItem>("memory", device); addItem<HudGpuLoadItem>("gpuload", device); addItem<HudCompilerActivityItem>("compiler", device); + addItem<HudSysmemItem>("sysmem", device); } diff --git a/src/dxvk/hud/dxvk_hud_item.cpp b/src/dxvk/hud/dxvk_hud_item.cpp index 9d3f0d6a..9b96df43 100644 --- a/src/dxvk/hud/dxvk_hud_item.cpp +++ b/src/dxvk/hud/dxvk_hud_item.cpp @@ -3,6 +3,9 @@ #include <iomanip> #include <version.h> +#include <windows.h> +#include <psapi.h> + namespace dxvk::hud { HudItem::~HudItem() { @@ -584,4 +587,57 @@ namespace dxvk::hud { return position; } + + HudSysmemItem::HudSysmemItem(const Rc<DxvkDevice>& device) { + + } + + + HudSysmemItem::~HudSysmemItem() { + + } + + + void HudSysmemItem::update(dxvk::high_resolution_clock::time_point time) { + PROCESS_MEMORY_COUNTERS_EX stats = { }; + stats.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX); + + ::GetProcessMemoryInfo(GetCurrentProcess(), + reinterpret_cast<PROCESS_MEMORY_COUNTERS*>(&stats), + sizeof(stats)); + + m_workingSet = stats.WorkingSetSize; + m_privateUsage = stats.PagefileUsage; + } + + + HudPos HudSysmemItem::render( + HudRenderer& renderer, + HudPos position) { + position.y += 16.0f; + renderer.drawText(16.0f, + { position.x, position.y }, + { 1.0f, 0.5f, 0.25f, 1.0f }, + "Working set:"); + + renderer.drawText(16.0f, + { position.x + 180.0f, position.y }, + { 1.0f, 1.0f, 1.0f, 1.0f }, + str::format(m_workingSet / (1 << 20), " MB")); + + position.y += 20.0f; + renderer.drawText(16.0f, + { position.x, position.y }, + { 1.0f, 0.5f, 0.25f, 1.0f }, + "Private usage:"); + + renderer.drawText(16.0f, + { position.x + 180.0f, position.y }, + { 1.0f, 1.0f, 1.0f, 1.0f }, + str::format(m_privateUsage / (1 << 20), " MB")); + + position.y += 8.0f; + return position; + } + } diff --git a/src/dxvk/hud/dxvk_hud_item.h b/src/dxvk/hud/dxvk_hud_item.h index 9844a0fe..7cef24d9 100644 --- a/src/dxvk/hud/dxvk_hud_item.h +++ b/src/dxvk/hud/dxvk_hud_item.h @@ -393,4 +393,29 @@ namespace dxvk::hud { }; + + /** + * \brief HUD item to display system memory usage + */ + class HudSysmemItem : public HudItem { + + public: + + HudSysmemItem(const Rc<DxvkDevice>& device); + + ~HudSysmemItem(); + + void update(dxvk::high_resolution_clock::time_point time); + + HudPos render( + HudRenderer& renderer, + HudPos position); + + private: + + uint32_t m_workingSet = 0; + uint32_t m_privateUsage = 0; + + }; + }
\ No newline at end of file diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index 1dc113c3..1c2e859a 100644 --- a/src/dxvk/meson.build +++ b/src/dxvk/meson.build @@ -111,7 +111,7 @@ thread_dep = dependency('threads') dxvk_lib = static_library('dxvk', dxvk_src, glsl_generator.process(dxvk_shaders), dxvk_version, link_with : [ util_lib, spirv_lib ], - dependencies : [ thread_dep, vkcommon_dep ] + dxvk_extradep, + dependencies : [ lib_psapi, thread_dep, vkcommon_dep ] + dxvk_extradep, include_directories : [ dxvk_include_path ], override_options : ['cpp_std='+dxvk_cpp_std]) |