mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-23 12:45:34 +00:00
Fix SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL also applying to HIGH priorities
As the name suggests, the hint should only apply to SDL_THREAD_PRIORITY_TIME_CRITICAL The resulting priorities for my current distro result in these values: | High | Time Critical Hint |--------------|----------------- 0 | P=10 N=-10 | P=5 N=-15 1 | P=10 N=-10 | P=-21 N=0
This commit is contained in:
parent
5b0d432942
commit
0500c04468
|
@ -801,7 +801,7 @@ extern "C" {
|
||||||
* Currently no other platform hint values are defined but may be in the future.
|
* Currently no other platform hint values are defined but may be in the future.
|
||||||
*
|
*
|
||||||
* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro
|
* \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro
|
||||||
* configured execution budget for rtkit. This budget is queriably through RLIMIT_RTTIME
|
* configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME
|
||||||
* after calling SDL_SetThreadPriority().
|
* after calling SDL_SetThreadPriority().
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY"
|
#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY"
|
||||||
|
|
|
@ -208,7 +208,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||||
int pri_policy;
|
int pri_policy;
|
||||||
pthread_t thread = pthread_self();
|
pthread_t thread = pthread_self();
|
||||||
const char *policyhint = SDL_GetHint(SDL_HINT_THREAD_PRIORITY_POLICY);
|
const char *policyhint = SDL_GetHint(SDL_HINT_THREAD_PRIORITY_POLICY);
|
||||||
const SDL_bool allow_realtime_hint = SDL_GetHintBoolean(SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL, SDL_FALSE);
|
const SDL_bool timecritical_realtime_hint = SDL_GetHintBoolean(SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL, SDL_FALSE);
|
||||||
|
|
||||||
if (pthread_getschedparam(thread, &policy, &sched) != 0) {
|
if (pthread_getschedparam(thread, &policy, &sched) != 0) {
|
||||||
return SDL_SetError("pthread_getschedparam() failed");
|
return SDL_SetError("pthread_getschedparam() failed");
|
||||||
|
@ -229,7 +229,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||||
pri_policy = SCHED_RR;
|
pri_policy = SCHED_RR;
|
||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
pri_policy = allow_realtime_hint ? SCHED_RR : SCHED_OTHER;
|
pri_policy = SCHED_OTHER;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
|
@ -237,6 +237,10 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (timecritical_realtime_hint && priority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
|
||||||
|
pri_policy = SCHED_RR;
|
||||||
|
}
|
||||||
|
|
||||||
if (policyhint) {
|
if (policyhint) {
|
||||||
if (SDL_strcmp(policyhint, "current") == 0) {
|
if (SDL_strcmp(policyhint, "current") == 0) {
|
||||||
/* Leave current thread scheduler policy unchanged */
|
/* Leave current thread scheduler policy unchanged */
|
||||||
|
|
Loading…
Reference in a new issue