ImGui: More detailed vertex cache statistics
This commit is contained in:
parent
f68c706b1e
commit
4985d9ca7e
|
@ -193,6 +193,7 @@ CxbxPatchedStream& CxbxVertexBufferConverter::GetPatchedStream(uint64_t dataKey,
|
||||||
|
|
||||||
auto it = m_PatchedStreams.find(key);
|
auto it = m_PatchedStreams.find(key);
|
||||||
if (it != m_PatchedStreams.end()) {
|
if (it != m_PatchedStreams.end()) {
|
||||||
|
m_TotalLookupSuccesses++;
|
||||||
m_PatchedStreamUsageList.splice(m_PatchedStreamUsageList.begin(), m_PatchedStreamUsageList, it->second);
|
m_PatchedStreamUsageList.splice(m_PatchedStreamUsageList.begin(), m_PatchedStreamUsageList, it->second);
|
||||||
return *it->second;
|
return *it->second;
|
||||||
}
|
}
|
||||||
|
@ -219,9 +220,16 @@ CxbxPatchedStream& CxbxVertexBufferConverter::GetPatchedStream(uint64_t dataKey,
|
||||||
|
|
||||||
void CxbxVertexBufferConverter::ShowImGuiStats()
|
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("Cache Size: %u", m_PatchedStreams.size());
|
||||||
ImGui::Text("Hits: %u", std::exchange(m_TotalCacheHits, 0));
|
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
|
void CxbxVertexBufferConverter::ConvertStream
|
||||||
|
@ -340,7 +348,11 @@ void CxbxVertexBufferConverter::ConvertStream
|
||||||
return;
|
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
|
// If execution reaches here, the cached vertex buffer was not valid and we must reconvert the data
|
||||||
// Free the existing buffers
|
// Free the existing buffers
|
||||||
|
|
|
@ -99,7 +99,9 @@ class CxbxVertexBufferConverter
|
||||||
|
|
||||||
// Stack tracking
|
// Stack tracking
|
||||||
ULONG m_TotalCacheHits = 0;
|
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_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
|
const UINT m_CacheElasticity = 200; // Cache is allowed to grow this much more than maximum before being purged to maximum
|
||||||
|
|
Loading…
Reference in New Issue