1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-02 10:24:12 +01:00

[hud] Add cache statistics to detailed memory item

This commit is contained in:
Philip Rebohle 2024-09-25 00:11:24 +02:00 committed by Philip Rebohle
parent 9cf72b5b19
commit 7ac9918b39
2 changed files with 29 additions and 2 deletions

View File

@ -652,7 +652,14 @@ namespace dxvk::hud {
void HudMemoryDetailsItem::update(dxvk::high_resolution_clock::time_point time) {
m_device->getMemoryAllocationStats(m_stats);
uint64_t ticks = std::chrono::duration_cast<std::chrono::microseconds>(time - m_lastUpdate).count();
if (ticks >= UpdateInterval) {
m_cacheStats = m_device->getMemoryAllocationStats(m_stats);
m_displayCacheStats |= m_cacheStats.requestCount != 0u;
m_lastUpdate = time;
}
}
@ -702,6 +709,9 @@ namespace dxvk::hud {
pos.y -= 30.0f + 4.0f;
}
if (m_displayCacheStats)
pos.y -= 20.0f;
// Actually render the thing
for (uint32_t i = 0; i < m_stats.memoryTypes.size(); i++) {
const auto& type = m_stats.memoryTypes.at(i);
@ -747,6 +757,18 @@ namespace dxvk::hud {
pos.y += 46.0f;
}
if (m_displayCacheStats) {
uint32_t hitCount = m_cacheStats.requestCount - m_cacheStats.missCount;
uint32_t hitRate = (100 * hitCount) / std::max(m_cacheStats.requestCount, 1u);
std::string cacheStr = str::format("Cache: ", m_cacheStats.size >> 10, " kB (", hitRate, "% hit)");
renderer.drawText(14.0f,
{ pos.x, pos.y },
{ 1.0f, 1.0f, 1.0f, 1.0f },
cacheStr);
}
return position;
}

View File

@ -394,7 +394,7 @@ namespace dxvk::hud {
* \brief HUD item to display detailed memory allocation info
*/
class HudMemoryDetailsItem : public HudItem {
constexpr static int64_t UpdateInterval = 500'000;
public:
HudMemoryDetailsItem(const Rc<DxvkDevice>& device);
@ -421,6 +421,11 @@ namespace dxvk::hud {
Rc<DxvkDevice> m_device;
DxvkMemoryAllocationStats m_stats;
DxvkSharedAllocationCacheStats m_cacheStats;
high_resolution_clock::time_point m_lastUpdate = { };
bool m_displayCacheStats = false;
Rc<DxvkShader> m_vs;
Rc<DxvkShader> m_fsBackground;