Relay Wine STDIO with SCHED_OTHER

I haven't seen this cause issues myself, but it would not surprise me if
a plugin that produces a constant stream of FIXMEs would steal resources
from audio processing if the threads that are relaying those messages
are set to SCHED_FIFO.
This commit is contained in:
Robbert van der Helm
2021-01-24 17:02:56 +01:00
parent 19fd99b58e
commit ffe46e225c
3 changed files with 16 additions and 1 deletions
+6
View File
@@ -91,8 +91,14 @@ class PluginBridge {
sockets.base_dir.string()}))),
has_realtime_priority(has_realtime_priority_promise.get_future()),
wine_io_handler([&]() {
// We no longer run this thread with realtime scheduling because
// plugins that produce a lot of FIXMEs could in theory cause
// dropouts that way, but we still need to run this from a thread
// to check whether we support it
has_realtime_priority_promise.set_value(
set_realtime_priority(true));
set_realtime_priority(false);
io_context.run();
}) {}
+7 -1
View File
@@ -104,7 +104,13 @@ GroupBridge::GroupBridge(boost::filesystem::path group_socket_path)
async_log_pipe_lines(stdout_redirect.pipe, stdout_buffer, "[STDOUT] ");
async_log_pipe_lines(stderr_redirect.pipe, stderr_buffer, "[STDERR] ");
stdio_handler = Win32Thread([&]() { stdio_context.run(); });
stdio_handler = Win32Thread([&]() {
// In case a plugin generates a lot of FIXMEs relaying this IO with
// realtime scheduling could in theory cause latency issues
set_realtime_priority(false);
stdio_context.run();
});
}
GroupBridge::~GroupBridge() {