From 33dd469d36c0655c76f0cc3bfec5741297768eb0 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Sat, 23 Jan 2021 14:24:01 +0100 Subject: [PATCH] Allow setting different priorities than 5 --- src/common/utils.cpp | 4 ++-- src/common/utils.h | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/common/utils.cpp b/src/common/utils.cpp index b131664a..9f767732 100644 --- a/src/common/utils.cpp +++ b/src/common/utils.cpp @@ -41,8 +41,8 @@ std::optional get_scheduling_priority() { } } -bool set_realtime_priority(bool sched_fifo) { - sched_param params{.sched_priority = 5}; +bool set_realtime_priority(bool sched_fifo, int priority) { + sched_param params{.sched_priority = (sched_fifo ? priority : 0)}; return sched_setscheduler(0, sched_fifo ? SCHED_FIFO : SCHED_OTHER, ¶ms) == 0; } diff --git a/src/common/utils.h b/src/common/utils.h index 1f89e23f..f88ade1d 100644 --- a/src/common/utils.h +++ b/src/common/utils.h @@ -44,14 +44,18 @@ boost::filesystem::path get_temporary_directory(); std::optional get_scheduling_priority(); /** - * Set the scheduling policy to `SCHED_FIFO` with priority 10 for this process. + * Set the scheduling policy to `SCHED_FIFO` with priority 5 for this process. * We explicitly don't do this for wineserver itself since from my testing that * can actually increase latencies. * * @param sched_fifo If true, set the current process/thread's scheudling policy * to `SCHED_FIFO`. Otherwise reset it back to `SCHWED_OTHER`. + * @param priority The scheduling priority to use. The exact value usually + * doesn't really matter unless there are a lot of other active `SCHED_FIFO` + * background tasks. We'll use 5 as a default, but we'll periodically copy the + * priority set by the host on the audio threads. * * @return Whether the operation was successful or not. This will fail if the * user does not have the privileges to set realtime priorities. */ -bool set_realtime_priority(bool sched_fifo); +bool set_realtime_priority(bool sched_fifo, int priority = 5);