Browse Source

Aggregate recurring audio glitch logs between buffer changes

stream-multiview
evgeny 1 week ago
parent
commit
114c0b3e2f
  1. 14
      tools/chatgui/src/audio_device.cpp
  2. 2
      tools/chatgui/src/audio_device.h

14
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),

2
tools/chatgui/src/audio_device.h

@ -54,6 +54,8 @@ private:
int m_reportedTiming = -1;
std::atomic<bool> m_suspended{false};
std::atomic<unsigned> 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;

Loading…
Cancel
Save