summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/audio_core/renderer/adsp/audio_renderer.cpp5
-rw-r--r--src/audio_core/renderer/system_manager.cpp9
-rw-r--r--src/audio_core/renderer/system_manager.h10
-rw-r--r--src/audio_core/sink/sink_stream.cpp4
4 files changed, 12 insertions, 16 deletions
diff --git a/src/audio_core/renderer/adsp/audio_renderer.cpp b/src/audio_core/renderer/adsp/audio_renderer.cpp
index 503f40349..1cbeed302 100644
--- a/src/audio_core/renderer/adsp/audio_renderer.cpp
+++ b/src/audio_core/renderer/adsp/audio_renderer.cpp
@@ -154,6 +154,11 @@ void AudioRenderer::ThreadFunc() {
154 return; 154 return;
155 155
156 case RenderMessage::AudioRenderer_Render: { 156 case RenderMessage::AudioRenderer_Render: {
157 if (system.IsShuttingDown()) [[unlikely]] {
158 std::this_thread::sleep_for(std::chrono::milliseconds(5));
159 mailbox->ADSPSendMessage(RenderMessage::AudioRenderer_RenderResponse);
160 continue;
161 }
157 std::array<bool, MaxRendererSessions> buffers_reset{}; 162 std::array<bool, MaxRendererSessions> buffers_reset{};
158 std::array<u64, MaxRendererSessions> render_times_taken{}; 163 std::array<u64, MaxRendererSessions> render_times_taken{};
159 const auto start_time{system.CoreTiming().GetClockTicks()}; 164 const auto start_time{system.CoreTiming().GetClockTicks()};
diff --git a/src/audio_core/renderer/system_manager.cpp b/src/audio_core/renderer/system_manager.cpp
index 07d8ed093..300ecdbf1 100644
--- a/src/audio_core/renderer/system_manager.cpp
+++ b/src/audio_core/renderer/system_manager.cpp
@@ -27,7 +27,7 @@ bool SystemManager::InitializeUnsafe() {
27 if (!active) { 27 if (!active) {
28 if (adsp.Start()) { 28 if (adsp.Start()) {
29 active = true; 29 active = true;
30 thread = std::jthread([this](std::stop_token stop_token) { ThreadFunc(); }); 30 thread = std::jthread([this](std::stop_token stop_token) { ThreadFunc(stop_token); });
31 } 31 }
32 } 32 }
33 33
@@ -39,8 +39,7 @@ void SystemManager::Stop() {
39 return; 39 return;
40 } 40 }
41 active = false; 41 active = false;
42 update.store(true); 42 thread.request_stop();
43 update.notify_all();
44 thread.join(); 43 thread.join();
45 adsp.Stop(); 44 adsp.Stop();
46} 45}
@@ -85,12 +84,12 @@ bool SystemManager::Remove(System& system_) {
85 return true; 84 return true;
86} 85}
87 86
88void SystemManager::ThreadFunc() { 87void SystemManager::ThreadFunc(std::stop_token stop_token) {
89 static constexpr char name[]{"AudioRenderSystemManager"}; 88 static constexpr char name[]{"AudioRenderSystemManager"};
90 MicroProfileOnThreadCreate(name); 89 MicroProfileOnThreadCreate(name);
91 Common::SetCurrentThreadName(name); 90 Common::SetCurrentThreadName(name);
92 Common::SetCurrentThreadPriority(Common::ThreadPriority::High); 91 Common::SetCurrentThreadPriority(Common::ThreadPriority::High);
93 while (active) { 92 while (active && !stop_token.stop_requested()) {
94 { 93 {
95 std::scoped_lock l{mutex1}; 94 std::scoped_lock l{mutex1};
96 95
diff --git a/src/audio_core/renderer/system_manager.h b/src/audio_core/renderer/system_manager.h
index 1f0bbd8b4..9681fd121 100644
--- a/src/audio_core/renderer/system_manager.h
+++ b/src/audio_core/renderer/system_manager.h
@@ -66,13 +66,7 @@ private:
66 /** 66 /**
67 * Main thread responsible for command generation. 67 * Main thread responsible for command generation.
68 */ 68 */
69 void ThreadFunc(); 69 void ThreadFunc(std::stop_token stop_token);
70
71 enum class StreamState {
72 Filling,
73 Steady,
74 Draining,
75 };
76 70
77 /// Core system 71 /// Core system
78 Core::System& core; 72 Core::System& core;
@@ -90,8 +84,6 @@ private:
90 ADSP::ADSP& adsp; 84 ADSP::ADSP& adsp;
91 /// AudioRenderer mailbox for communication 85 /// AudioRenderer mailbox for communication
92 ADSP::AudioRenderer_Mailbox* mailbox{}; 86 ADSP::AudioRenderer_Mailbox* mailbox{};
93 /// Atomic for main thread to wait on
94 std::atomic<bool> update{};
95}; 87};
96 88
97} // namespace AudioCore::AudioRenderer 89} // namespace AudioCore::AudioRenderer
diff --git a/src/audio_core/sink/sink_stream.cpp b/src/audio_core/sink/sink_stream.cpp
index 13ba26e74..9bbb54162 100644
--- a/src/audio_core/sink/sink_stream.cpp
+++ b/src/audio_core/sink/sink_stream.cpp
@@ -271,8 +271,8 @@ u64 SinkStream::GetExpectedPlayedSampleCount() {
271 271
272void SinkStream::WaitFreeSpace() { 272void SinkStream::WaitFreeSpace() {
273 std::unique_lock lk{release_mutex}; 273 std::unique_lock lk{release_mutex};
274 release_cv.wait( 274 release_cv.wait_for(lk, std::chrono::milliseconds(5),
275 lk, [this]() { return queued_buffers < max_queue_size || system.IsShuttingDown(); }); 275 [this]() { return queued_buffers < max_queue_size; });
276} 276}
277 277
278} // namespace AudioCore::Sink 278} // namespace AudioCore::Sink