Procházet zdrojové kódy

LibAudio: Set asynchronous audio enqueuer thread to maximum priority

Anything that handles audio in this way should run at maximum priority.
kleines Filmröllchen před 2 roky
rodič
revize
9b819a0dc9

+ 1 - 1
Userland/Applications/Piano/main.cpp

@@ -26,7 +26,7 @@
 
 ErrorOr<int> serenity_main(Main::Arguments arguments)
 {
-    TRY(Core::System::pledge("stdio thread rpath cpath wpath recvfd sendfd unix"));
+    TRY(Core::System::pledge("stdio thread rpath cpath wpath recvfd sendfd unix proc"));
 
     auto app = TRY(GUI::Application::try_create(arguments));
 

+ 4 - 1
Userland/Libraries/LibAudio/ConnectionToServer.cpp

@@ -14,6 +14,7 @@
 #include <LibAudio/UserSampleQueue.h>
 #include <LibCore/Event.h>
 #include <LibThreading/Mutex.h>
+#include <sched.h>
 #include <time.h>
 
 namespace Audio {
@@ -58,8 +59,10 @@ void ConnectionToServer::die()
 
 ErrorOr<void> ConnectionToServer::async_enqueue(FixedArray<Sample>&& samples)
 {
-    if (!m_background_audio_enqueuer->is_started())
+    if (!m_background_audio_enqueuer->is_started()) {
         m_background_audio_enqueuer->start();
+        TRY(m_background_audio_enqueuer->set_priority(THREAD_PRIORITY_MAX));
+    }
 
     update_good_sleep_time();
     m_user_queue->append(move(samples));

+ 2 - 2
Userland/Utilities/aplay.cpp

@@ -23,7 +23,7 @@ constexpr size_t LOAD_CHUNK_SIZE = 128 * KiB;
 
 ErrorOr<int> serenity_main(Main::Arguments arguments)
 {
-    TRY(Core::System::pledge("stdio rpath sendfd unix thread"));
+    TRY(Core::System::pledge("stdio rpath sendfd unix thread proc"));
 
     StringView path {};
     bool should_loop = false;
@@ -50,7 +50,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
     }
     auto loader = maybe_loader.release_value();
 
-    TRY(Core::System::pledge("stdio sendfd thread"));
+    TRY(Core::System::pledge("stdio sendfd thread proc"));
 
     outln("\033[34;1m Playing\033[0m: {}", path);
     outln("\033[34;1m  Format\033[0m: {} {} Hz, {}-bit, {}",