From fd721859fef2f0af8561f49b2799b76e4f2b398c Mon Sep 17 00:00:00 2001 From: lizzie Date: Sun, 2 Nov 2025 10:18:12 +0000 Subject: [PATCH] Revert "[Audio] Tighten sink queue back pressure (#2840)" This reverts commit 15becaa5a327e714f4650ef698b2a4ec25ba40d5. --- src/audio_core/sink/sink_stream.cpp | 20 ++++++++------------ src/audio_core/sink/sink_stream.h | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp index f94217ebeb..254dbe5bc9 100644 --- a/src/audio_core/sink/sink_stream.cpp +++ b/src/audio_core/sink/sink_stream.cpp @@ -186,9 +186,11 @@ void SinkStream::ProcessAudioOutAndRender(std::span output_buffer, std::siz frames_written = num_frames; continue; } - - --queued_buffers; - lk.unlock(); + // Successfully dequeued a new buffer. + { + std::unique_lock lk{release_mutex};\ + queued_buffers--; + } release_cv.notify_one(); } @@ -226,15 +228,9 @@ u64 SinkStream::GetExpectedPlayedSampleCount() { void SinkStream::WaitFreeSpace(std::stop_token stop_token) { std::unique_lock lk{release_mutex}; - - auto can_continue = [this]() { - return paused || queued_buffers < max_queue_size; - }; - - release_cv.wait_for(lk, std::chrono::milliseconds(10), can_continue); - - if (queued_buffers > max_queue_size + 10) { - release_cv.wait(lk, stop_token, can_continue); + release_cv.wait_for(lk, std::chrono::milliseconds(5), [this]() { return paused || queued_buffers < max_queue_size; }); + if (queued_buffers > max_queue_size + 3) { + release_cv.wait(lk, stop_token, [this] { return paused || queued_buffers < max_queue_size; }); } } diff --git a/src/audio_core/sink/sink_stream.h b/src/audio_core/sink/sink_stream.h index acb7537dda..fe885cdf05 100644 --- a/src/audio_core/sink/sink_stream.h +++ b/src/audio_core/sink/sink_stream.h @@ -240,7 +240,7 @@ private: /// Ring buffer of the samples waiting to be played or consumed Common::RingBuffer samples_buffer; /// Audio buffers queued and waiting to play - Common::SPSCQueue queue; + Common::SPSCQueue queue; /// The currently-playing audio buffer SinkBuffer playing_buffer{}; /// The last played (or received) frame of audio, used when the callback underruns