diff --git a/DDrawCompat/Config/Config.cpp b/DDrawCompat/Config/Config.cpp index 08fe19b..8af367b 100644 --- a/DDrawCompat/Config/Config.cpp +++ b/DDrawCompat/Config/Config.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -76,6 +77,7 @@ namespace Config Settings::SpriteTexCoord spriteTexCoord; Settings::StatsColumns statsColumns; Settings::StatsHotKey statsHotKey; + Settings::StatsRows statsRows; Settings::SupportedResolutions supportedResolutions; Settings::SupportedDepthFormats supportedDepthFormats; Settings::SupportedTextureFormats supportedTextureFormats; diff --git a/DDrawCompat/Config/Settings/StatsRows.h b/DDrawCompat/Config/Settings/StatsRows.h new file mode 100644 index 0000000..ba521df --- /dev/null +++ b/DDrawCompat/Config/Settings/StatsRows.h @@ -0,0 +1,55 @@ +#pragma once + +#include + +namespace Config +{ + namespace Settings + { + class StatsRows : public EnumListSetting + { + public: + enum Values { + LABEL, + PRESENTCOUNT, + PRESENTRATE, + PRESENTTIME, + FLIPCOUNT, + FLIPRATE, + FLIPTIME, + BLITCOUNT, + BLITRATE, + BLITTIME, + LOCKCOUNT, + LOCKRATE, + LOCKTIME, + DDIUSAGE, + GDIOBJECTS + }; + + StatsRows() + : EnumListSetting("StatsRows", "label, presentrate, fliprate, blitcount, lockcount, ddiusage", + { + "label", + "presentcount", + "presentrate", + "presenttime", + "flipcount", + "fliprate", + "fliptime", + "blitcount", + "blitrate", + "blittime", + "lockcount", + "lockrate", + "locktime", + "ddiusage", + "gdiobjects" + }) + { + } + }; + } + + extern Settings::StatsRows statsRows; +} diff --git a/DDrawCompat/DDrawCompat.vcxproj b/DDrawCompat/DDrawCompat.vcxproj index a964bc4..94c353f 100644 --- a/DDrawCompat/DDrawCompat.vcxproj +++ b/DDrawCompat/DDrawCompat.vcxproj @@ -195,6 +195,7 @@ + diff --git a/DDrawCompat/DDrawCompat.vcxproj.filters b/DDrawCompat/DDrawCompat.vcxproj.filters index 0963d13..d96c10f 100644 --- a/DDrawCompat/DDrawCompat.vcxproj.filters +++ b/DDrawCompat/DDrawCompat.vcxproj.filters @@ -675,6 +675,9 @@ Header Files\Config + + Header Files\Config\Settings + diff --git a/DDrawCompat/Overlay/StatsControl.cpp b/DDrawCompat/Overlay/StatsControl.cpp index 250f858..c8628ee 100644 --- a/DDrawCompat/Overlay/StatsControl.cpp +++ b/DDrawCompat/Overlay/StatsControl.cpp @@ -4,7 +4,7 @@ namespace { - const int NAME_LABEL_WIDTH = 70; + const int NAME_LABEL_WIDTH = 80; const int VALUE_LABEL_WIDTH = 40; } diff --git a/DDrawCompat/Overlay/StatsWindow.cpp b/DDrawCompat/Overlay/StatsWindow.cpp index ea515d7..e128a82 100644 --- a/DDrawCompat/Overlay/StatsWindow.cpp +++ b/DDrawCompat/Overlay/StatsWindow.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -61,29 +62,49 @@ namespace StatsQueue& m_statsQueue; }; + + const int ROW_HEIGHT = 15; } namespace Overlay { StatsWindow::StatsWindow() - : Window(nullptr, { 0, 0, StatsControl::getWidth(), 105 + BORDER}, 0, Config::statsHotKey.get()) + : Window(nullptr, + { 0, 0, StatsControl::getWidth(), static_cast(Config::statsRows.get().size()) * ROW_HEIGHT + BORDER }, + 0, Config::statsHotKey.get()) { - addControl("", [](StatsQueue::TickCount) { return std::array{ "cur", "avg", "min", "max" }; }, - WS_VISIBLE | WS_DISABLED).update(0); - addControl("Present rate", UpdateStats(m_present.m_rate)); - addControl("Flip rate", UpdateStats(m_flip.m_rate)); - addControl("Blit count", UpdateStats(m_blit.m_count)); - addControl("Lock count", UpdateStats(m_lock.m_count)); - addControl("DDI usage", UpdateStats(m_ddiUsage)); - addControl("GDI objects", UpdateStats(m_gdiObjects)); + m_statsRows.push_back({ "", [](auto) { return std::array{ "cur", "avg", "min", "max" }; }, + WS_VISIBLE | WS_DISABLED }); + m_statsRows.push_back({ "Present count", UpdateStats(m_present.m_count) }); + m_statsRows.push_back({ "Present rate", UpdateStats(m_present.m_rate) }); + m_statsRows.push_back({ "Present time", UpdateStats(m_present.m_time) }); + m_statsRows.push_back({ "Flip count", UpdateStats(m_flip.m_count) }); + m_statsRows.push_back({ "Flip rate", UpdateStats(m_flip.m_rate) }); + m_statsRows.push_back({ "Flip time", UpdateStats(m_flip.m_time) }); + m_statsRows.push_back({ "Blit count", UpdateStats(m_blit.m_count) }); + m_statsRows.push_back({ "Blit rate", UpdateStats(m_blit.m_rate) }); + m_statsRows.push_back({ "Blit time", UpdateStats(m_blit.m_time) }); + m_statsRows.push_back({ "Lock count", UpdateStats(m_lock.m_count) }); + m_statsRows.push_back({ "Lock rate", UpdateStats(m_lock.m_rate) }); + m_statsRows.push_back({ "Lock time", UpdateStats(m_lock.m_time) }); + m_statsRows.push_back({ "DDI usage", UpdateStats(m_ddiUsage) }); + m_statsRows.push_back({ "GDI objects", UpdateStats(m_gdiObjects) }); + + for (auto statsRowIndex : Config::statsRows.get()) + { + auto& statsRow = m_statsRows[statsRowIndex]; + auto& statsControl = addControl(statsRow.name, statsRow.updateFunc, statsRow.style); + if (statsRow.style & WS_DISABLED) + { + statsControl.update(0); + } + } } StatsControl& StatsWindow::addControl(const std::string& name, StatsControl::UpdateFunc updateFunc, DWORD style) { const int index = m_statsControls.size(); - const int rowHeight = 15; - - RECT rect = { 0, index * rowHeight + BORDER / 2, m_rect.right, (index + 1) * rowHeight + BORDER / 2 }; + RECT rect = { 0, index * ROW_HEIGHT + BORDER / 2, m_rect.right, (index + 1) * ROW_HEIGHT + BORDER / 2 }; return m_statsControls.emplace_back(*this, rect, name, updateFunc, style); } diff --git a/DDrawCompat/Overlay/StatsWindow.h b/DDrawCompat/Overlay/StatsWindow.h index fc60be6..9ba8d51 100644 --- a/DDrawCompat/Overlay/StatsWindow.h +++ b/DDrawCompat/Overlay/StatsWindow.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -27,12 +28,20 @@ namespace Overlay StatsQueue m_gdiObjects; private: + struct StatsRow + { + const char* name; + StatsControl::UpdateFunc updateFunc; + DWORD style; + }; + StatsControl& addControl(const std::string& name, StatsControl::UpdateFunc updateFunc, DWORD style = WS_VISIBLE); virtual RECT calculateRect(const RECT& monitorRect) const override; virtual HWND getTopmost() const override; std::list m_statsControls; + std::vector m_statsRows; uint64_t m_tickCount; }; }