diff --git a/src/dxvk/dxvk_cs.cpp b/src/dxvk/dxvk_cs.cpp index 7f1678c0..af76e138 100644 --- a/src/dxvk/dxvk_cs.cpp +++ b/src/dxvk/dxvk_cs.cpp @@ -136,9 +136,15 @@ namespace dxvk { if (seq == SynchronizeAll) seq = m_chunksDispatched.load(); + auto t0 = dxvk::high_resolution_clock::now(); m_condOnSync.wait(lock, [this, seq] { return m_chunksExecuted.load() >= seq; }); + auto t1 = dxvk::high_resolution_clock::now(); + auto ticks = std::chrono::duration_cast(t1 - t0); + + m_device->addStatCtr(DxvkStatCounter::CsSyncCount, 1); + m_device->addStatCtr(DxvkStatCounter::CsSyncTicks, ticks.count()); } } @@ -171,8 +177,10 @@ namespace dxvk { } } - if (chunk) + if (chunk) { + m_context->addStatCtr(DxvkStatCounter::CsChunkCount, 1); chunk->executeAll(m_context.ptr()); + } } } catch (const DxvkError& e) { Logger::err("Exception on CS thread!"); diff --git a/src/dxvk/dxvk_stats.h b/src/dxvk/dxvk_stats.h index 77aa6b8f..0f28b50d 100644 --- a/src/dxvk/dxvk_stats.h +++ b/src/dxvk/dxvk_stats.h @@ -20,6 +20,9 @@ namespace dxvk { QueueSubmitCount, ///< Number of command buffer submissions QueuePresentCount, ///< Number of present calls / frames GpuIdleTicks, ///< GPU idle time in microseconds + CsSyncCount, ///< CS thread synchronizations + CsSyncTicks, ///< Time spent waiting on CS + CsChunkCount, ///< Submitted CS chunks NumCounters, ///< Number of counters available };