b646ece14b
### Problem description This PR addresses issue #2013 that described a cluttered Event Manager. This is a DX issue and should not impact the users whatsoever. ### Implementation description The changes revolve around three main points: 1. the Event Manager (`event_manager.hpp`) was split into four categories: GUI, Interaction, Lifecycle, and Provider, and two types: Events, and Requests. This results in the following files: - `events_gui.hpp` - `events_interaction.hpp` - `events_lifecycle.hpp` - `events_provider.hpp` - `requests_gui.hpp` - `requests_interaction.hpp` - `requests_lifecycle.hpp` - `requests_provider.hpp` 2. Every event and request now has its own piece of documentation, with a `@brief`, accompanied by a longer comment if needed, and gets its `@param`s described. 3. The old `event_manager.hpp` import was removed and replaced by the correct imports wherever needed, as to reduce spread of those files only to where they are truly useful. ### Additional things The commits have been split into (chrono-)logical steps: - `feat`: split the Event Manager, and replace the imports - `refactor`, `chore`: make various small changes to match the required structure - `docs`: add documentation for events and requests Hopefully, this will help to review the PR. *Note: Beware of very long rebuild times in between the commits, use them sparingly! The Actions will ensure this PR builds anyways* Closes #2013 --------- Signed-off-by: BioTheWolff <47079795+BioTheWolff@users.noreply.github.com> Co-authored-by: Nik <werwolv98@gmail.com>
96 lines
3.3 KiB
C++
96 lines
3.3 KiB
C++
#include <hex/api/content_registry.hpp>
|
|
|
|
#include <hex/helpers/utils.hpp>
|
|
|
|
#include <windows.h>
|
|
#include <psapi.h>
|
|
|
|
#include <imgui.h>
|
|
#include <fonts/vscode_icons.hpp>
|
|
#include <hex/ui/imgui_imhex_extensions.h>
|
|
|
|
|
|
namespace hex::plugin::windows {
|
|
|
|
void addFooterItems() {
|
|
|
|
static bool showResourceUsage = true;
|
|
ContentRegistry::Settings::onChange("hex.builtin.setting.interface", "hex.builtin.setting.interface.show_resource_usage", [](const ContentRegistry::Settings::SettingsValue &value) {
|
|
showResourceUsage = value.get<bool>(false);
|
|
});
|
|
|
|
ContentRegistry::Interface::addFooterItem([] {
|
|
if (!showResourceUsage)
|
|
return;
|
|
|
|
static float cpuUsage = 0.0F;
|
|
|
|
if (ImGuiExt::HasSecondPassed()) {
|
|
static ULARGE_INTEGER lastCPU, lastSysCPU, lastUserCPU;
|
|
static u32 numProcessors;
|
|
static HANDLE self = GetCurrentProcess();
|
|
|
|
ULARGE_INTEGER now, sys, user;
|
|
{
|
|
FILETIME ftime, fsys, fuser;
|
|
|
|
GetSystemTimeAsFileTime(&ftime);
|
|
memcpy(&now, &ftime, sizeof(FILETIME));
|
|
|
|
GetProcessTimes(self, &ftime, &ftime, &fsys, &fuser);
|
|
memcpy(&sys, &fsys, sizeof(FILETIME));
|
|
memcpy(&user, &fuser, sizeof(FILETIME));
|
|
}
|
|
|
|
if (lastCPU.QuadPart == 0) {
|
|
SYSTEM_INFO sysInfo;
|
|
FILETIME ftime, fsys, fuser;
|
|
|
|
GetSystemInfo(&sysInfo);
|
|
numProcessors = sysInfo.dwNumberOfProcessors;
|
|
|
|
GetSystemTimeAsFileTime(&ftime);
|
|
memcpy(&lastCPU, &ftime, sizeof(FILETIME));
|
|
|
|
self = GetCurrentProcess();
|
|
GetProcessTimes(self, &ftime, &ftime, &fsys, &fuser);
|
|
memcpy(&lastSysCPU, &fsys, sizeof(FILETIME));
|
|
memcpy(&lastUserCPU, &fuser, sizeof(FILETIME));
|
|
} else {
|
|
cpuUsage = (sys.QuadPart - lastSysCPU.QuadPart) +
|
|
(user.QuadPart - lastUserCPU.QuadPart);
|
|
cpuUsage /= (now.QuadPart - lastCPU.QuadPart);
|
|
cpuUsage /= numProcessors;
|
|
lastCPU = now;
|
|
lastUserCPU = user;
|
|
lastSysCPU = sys;
|
|
}
|
|
|
|
cpuUsage *= 100;
|
|
}
|
|
|
|
ImGuiExt::TextFormatted(ICON_VS_DASHBOARD " {0:2}.{1:02}%", u32(cpuUsage), u32(cpuUsage * 100) % 100);
|
|
});
|
|
|
|
ContentRegistry::Interface::addFooterItem([] {
|
|
if (!showResourceUsage)
|
|
return;
|
|
|
|
static MEMORYSTATUSEX memInfo;
|
|
static PROCESS_MEMORY_COUNTERS_EX pmc;
|
|
|
|
if (ImGuiExt::HasSecondPassed()) {
|
|
memInfo.dwLength = sizeof(MEMORYSTATUSEX);
|
|
GlobalMemoryStatusEx(&memInfo);
|
|
GetProcessMemoryInfo(GetCurrentProcess(), reinterpret_cast<PROCESS_MEMORY_COUNTERS *>(&pmc), sizeof(pmc));
|
|
}
|
|
|
|
auto totalMem = memInfo.ullTotalPhys;
|
|
auto usedMem = pmc.WorkingSetSize;
|
|
|
|
ImGuiExt::TextFormatted(ICON_VS_CHIP " {0} / {1}", hex::toByteString(usedMem), hex::toByteString(totalMem));
|
|
});
|
|
}
|
|
|
|
}
|