ImGui: More detailed vertex cache statistics

This commit is contained in:
Silent 2021-03-16 23:12:37 +01:00 committed by RadWolfie
parent f68c706b1e
commit 4985d9ca7e
2 changed files with 17 additions and 3 deletions

View File

@ -193,6 +193,7 @@ CxbxPatchedStream& CxbxVertexBufferConverter::GetPatchedStream(uint64_t dataKey,
auto it = m_PatchedStreams.find(key);
if (it != m_PatchedStreams.end()) {
m_TotalLookupSuccesses++;
m_PatchedStreamUsageList.splice(m_PatchedStreamUsageList.begin(), m_PatchedStreamUsageList, it->second);
return *it->second;
}
@ -219,9 +220,16 @@ CxbxPatchedStream& CxbxVertexBufferConverter::GetPatchedStream(uint64_t dataKey,
void CxbxVertexBufferConverter::ShowImGuiStats()
{
const ULONG falsePositives = std::exchange(m_TotalLookupSuccesses, 0) - m_TotalCacheHits;
const ULONG totalMisses = m_VertexStreamHashMisses + m_DataNotInCacheMisses;
ImGui::Text("Cache Size: %u", m_PatchedStreams.size());
ImGui::Text("Hits: %u", std::exchange(m_TotalCacheHits, 0));
ImGui::Text("Misses: %u", std::exchange(m_TotalCacheMisses, 0));
ImGui::Text("Total misses: %u", totalMisses);
ImGui::Separator();
ImGui::TextUnformatted("Cache miss details:");
ImGui::TextWrapped("Vertex stream hash miss: %u", std::exchange(m_VertexStreamHashMisses, 0));
ImGui::TextWrapped("Data not in cache: %u", std::exchange(m_DataNotInCacheMisses, 0));
}
void CxbxVertexBufferConverter::ConvertStream
@ -340,7 +348,11 @@ void CxbxVertexBufferConverter::ConvertStream
return;
}
m_TotalCacheMisses++;
// Gather stats
if (patchedStream.uiVertexStreamInformationHash != pVertexShaderSteamInfoHash)
m_VertexStreamHashMisses++;
else
m_DataNotInCacheMisses++;
// If execution reaches here, the cached vertex buffer was not valid and we must reconvert the data
// Free the existing buffers

View File

@ -99,7 +99,9 @@ class CxbxVertexBufferConverter
// Stack tracking
ULONG m_TotalCacheHits = 0;
ULONG m_TotalCacheMisses = 0;
ULONG m_TotalLookupSuccesses = 0;
ULONG m_VertexStreamHashMisses = 0;
ULONG m_DataNotInCacheMisses = 0;
const UINT m_MaxCacheSize = 10000; // Maximum number of entries in the cache
const UINT m_CacheElasticity = 200; // Cache is allowed to grow this much more than maximum before being purged to maximum