From 114c0b3e2f641a312b32eec537152ba819b7c210 Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 16 Oct 2026 17:33:32 +0200 Subject: [PATCH] Aggregate recurring audio glitch logs between buffer changes --- tools/chatgui/src/audio_device.cpp | 14 ++++++++------ tools/chatgui/src/audio_device.h | 2 ++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/tools/chatgui/src/audio_device.cpp b/tools/chatgui/src/audio_device.cpp index 97d91777..99f3a4b1 100644 --- a/tools/chatgui/src/audio_device.cpp +++ b/tools/chatgui/src/audio_device.cpp @@ -68,7 +68,7 @@ bool AudioDevice::init(ma_context* context, ma_device_config config, const char* return false; } m_device = device; - m_frames = 0; m_bufferGlitches = 0; m_resizePending = false; + m_frames = 0; m_bufferGlitches = 0; m_pendingGlitches = 0; m_glitchReportAt = -5000; m_resizePending = false; m_route = 0; m_reportedRoute = 0; m_timingMeasured = false; m_reportedTiming = -1; m_seenFrames = 0; @@ -198,14 +198,16 @@ bool AudioDevice::needsRecovery() { } bool stopped = ma_device_get_state(m_device) == ma_device_state_stopped; unsigned glitches = m_bufferGlitches.exchange(0, std::memory_order_relaxed); - if (glitches) { - auto result = m_suspended.load() || stopped ? AudioBufferTuning::Unchanged : m_bufferTuning.observe(now, glitches); - DEBUG_WARN(DEBUG_CATEGORY_CALL, "audio: %s backend glitches=%u period=%ums periods=%u action=%s requested_period=%ums", - m_role, glitches, m_bufferTuning.actualMs, m_bufferTuning.periods, + auto result = m_suspended.load() || stopped ? AudioBufferTuning::Unchanged : m_bufferTuning.observe(now, glitches); + m_pendingGlitches += glitches; + if (m_pendingGlitches && (result != AudioBufferTuning::Unchanged || now - m_glitchReportAt >= 5000)) { + DEBUG_WARN(DEBUG_CATEGORY_CALL, "audio: %s backend glitches=%llu period=%ums periods=%u action=%s requested_period=%ums", + m_role, (unsigned long long)m_pendingGlitches, m_bufferTuning.actualMs, m_bufferTuning.periods, result == AudioBufferTuning::Increase ? "increase-buffer" : result == AudioBufferTuning::Limit ? "buffer-limit" : "observe", m_bufferTuning.requestedMs); - if (result == AudioBufferTuning::Increase) { m_resizePending = true; return true; } + m_pendingGlitches = 0; m_glitchReportAt = now; } + if (result == AudioBufferTuning::Increase) { m_resizePending = true; return true; } if (!stopped && now - m_progressAt < 1000) return false; DEBUG_WARN(DEBUG_CATEGORY_CALL, "audio: %s recovery reason=%s idle=%lldms frames=%llu suspended=%d", m_role, stopped ? "stopped" : "no-progress", (long long)(now - m_progressAt), diff --git a/tools/chatgui/src/audio_device.h b/tools/chatgui/src/audio_device.h index 2f794f62..ee58dd51 100644 --- a/tools/chatgui/src/audio_device.h +++ b/tools/chatgui/src/audio_device.h @@ -54,6 +54,8 @@ private: int m_reportedTiming = -1; std::atomic m_suspended{false}; std::atomic m_bufferGlitches{0}; + uint64_t m_pendingGlitches = 0; + qint64 m_glitchReportAt = -5000; AudioBufferTuning m_bufferTuning; ma_device_id m_bufferDeviceId{}; ma_backend m_bufferBackend = ma_backend_null;