From 52192a3b26abe6ce2a3c334a2bd6db7be0b30ff3 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Mon, 25 Dec 2023 23:23:19 +0100 Subject: [PATCH] impr: Better FPS graph --- plugins/builtin/source/content/ui_items.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/plugins/builtin/source/content/ui_items.cpp b/plugins/builtin/source/content/ui_items.cpp index 8a746c410..09620a0f8 100644 --- a/plugins/builtin/source/content/ui_items.cpp +++ b/plugins/builtin/source/content/ui_items.cpp @@ -78,13 +78,16 @@ namespace hex::plugin::builtin { if (ImGui::IsItemHovered()) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2()); if (ImGui::BeginTooltip()) { + + static u32 frameCount = 0; + static double largestFrameTime = 0; if (ImPlot::BeginPlot("##frame_time_graph", scaled({ 200, 100 }), ImPlotFlags_CanvasOnly | ImPlotFlags_NoFrame | ImPlotFlags_NoInputs)) { ImPlot::SetupAxes("", "", ImPlotAxisFlags_NoLabel | ImPlotAxisFlags_NoTickLabels, ImPlotAxisFlags_NoLabel | ImPlotAxisFlags_LockMin | ImPlotAxisFlags_AutoFit); - ImPlot::SetupAxisLimits(ImAxis_Y1, 0, 0.01, ImPlotCond_Always); + ImPlot::SetupAxisLimits(ImAxis_Y1, 0, largestFrameTime * 1.25F, ImPlotCond_Always); ImPlot::SetupAxisFormat(ImAxis_Y1, [](double value, char* buff, int size, void*) -> int { return snprintf(buff, size, "%dms", int(value * 1000.0)); }, nullptr); - ImPlot::SetupAxisTicks(ImAxis_Y1, 0, 0.01, 3); + ImPlot::SetupAxisTicks(ImAxis_Y1, 0, largestFrameTime * 1.25F, 3); static std::vector values(100); @@ -92,6 +95,10 @@ namespace hex::plugin::builtin { if (values.size() > 100) values.erase(values.begin()); + if (frameCount % 100 == 0) + largestFrameTime = *std::ranges::max_element(values); + frameCount += 1; + ImPlot::PlotLine("FPS", values.data(), values.size()); ImPlot::EndPlot(); }