mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Thread: Update macOS thread priority calculation
The Apple threading documentation [^1] says the following: > The second argument to pthread_setschedparam is the desired policy, which can currently be one of SCHED_FIFO (first in, first out), SCHED_RR (round-robin), or SCHED_OTHER. The SCHED_OTHER policy is generally used for extra policies that are specific to a given operating system, and should thus be avoided when writing portable code. This appears to differ from the policy semantics on Linux and BSD, where FIFO and RR are both explicitly real-time policies. Therefore, on Linux/BSD we only enable the RR policy if the requested priority is 8 or higher. Meanwhile, on macOS, we map all thread priorities (0 - 10) onto the RR policy with an appropriate priority. [^1]: https://developer.apple.com/library/archive/documentation/Darwin/Conceptual/KernelProgramming/scheduler/scheduler.html
This commit is contained in:
parent
a5b76d3989
commit
48c6087faf
2 changed files with 8 additions and 4 deletions
|
|
@ -960,7 +960,12 @@ void JUCE_CALLTYPE Thread::setCurrentThreadName (const String& name)
|
|||
bool Thread::setThreadPriority (void* handle, int priority)
|
||||
{
|
||||
constexpr auto maxInputPriority = 10;
|
||||
constexpr auto lowestRealtimePriority = 8;
|
||||
|
||||
#if JUCE_LINUX || JUCE_BSD
|
||||
constexpr auto lowestRrPriority = 8;
|
||||
#else
|
||||
constexpr auto lowestRrPriority = 0;
|
||||
#endif
|
||||
|
||||
struct sched_param param;
|
||||
int policy;
|
||||
|
|
@ -971,7 +976,7 @@ bool Thread::setThreadPriority (void* handle, int priority)
|
|||
if (pthread_getschedparam ((pthread_t) handle, &policy, ¶m) != 0)
|
||||
return false;
|
||||
|
||||
policy = priority < lowestRealtimePriority ? SCHED_OTHER : SCHED_RR;
|
||||
policy = priority < lowestRrPriority ? SCHED_OTHER : SCHED_RR;
|
||||
|
||||
const auto minPriority = sched_get_priority_min (policy);
|
||||
const auto maxPriority = sched_get_priority_max (policy);
|
||||
|
|
@ -981,7 +986,7 @@ bool Thread::setThreadPriority (void* handle, int priority)
|
|||
if (policy == SCHED_OTHER)
|
||||
return 0;
|
||||
|
||||
return jmap (priority, lowestRealtimePriority, maxInputPriority, minPriority, maxPriority);
|
||||
return jmap (priority, lowestRrPriority, maxInputPriority, minPriority, maxPriority);
|
||||
}();
|
||||
|
||||
return pthread_setschedparam ((pthread_t) handle, policy, ¶m) == 0;
|
||||
|
|
|
|||
|
|
@ -118,7 +118,6 @@ public:
|
|||
if (nativeContext != nullptr)
|
||||
{
|
||||
renderThread = std::make_unique<ThreadPool> (1);
|
||||
renderThread->setThreadPriorities (9);
|
||||
resume();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue