mirror of
https://github.com/Ryujinx/SDL.git
synced 2024-12-25 08:15:42 +00:00
More Linux fixes.
This commit is contained in:
parent
c7d1dab1fe
commit
0713c5790d
|
@ -223,53 +223,53 @@ SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedP
|
||||||
#if SDL_THREADS_DISABLED
|
#if SDL_THREADS_DISABLED
|
||||||
return SDL_Unsupported();
|
return SDL_Unsupported();
|
||||||
#else
|
#else
|
||||||
if (schedPolicy != SCHED_RR && schedPolicy != SCHED_FIFO && setpriority(PRIO_PROCESS, (id_t)threadID, priority) == 0) {
|
int osPriority;
|
||||||
return 0;
|
|
||||||
|
if (schedPolicy == SCHED_RR || schedPolicy == SCHED_FIFO) {
|
||||||
|
if (sdlPriority == SDL_THREAD_PRIORITY_LOW) {
|
||||||
|
osPriority = 1;
|
||||||
|
} else if (sdlPriority == SDL_THREAD_PRIORITY_HIGH) {
|
||||||
|
osPriority = rtkit_max_realtime_priority * 3 / 4;
|
||||||
|
} else if (sdlPriority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
|
||||||
|
osPriority = rtkit_max_realtime_priority;
|
||||||
|
} else {
|
||||||
|
osPriority = rtkit_max_realtime_priority / 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (sdlPriority == SDL_THREAD_PRIORITY_LOW) {
|
||||||
|
osPriority = 19;
|
||||||
|
} else if (sdlPriority == SDL_THREAD_PRIORITY_HIGH) {
|
||||||
|
osPriority = -10;
|
||||||
|
} else if (sdlPriority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
|
||||||
|
osPriority = -20;
|
||||||
|
} else {
|
||||||
|
osPriority = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setpriority(PRIO_PROCESS, (id_t)threadID, osPriority) == 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SDL_USE_LIBDBUS
|
#if SDL_USE_LIBDBUS
|
||||||
/* Note that this fails you most likely:
|
/* Note that this fails you most likely:
|
||||||
* Have your process's scheduler incorrectly configured.
|
* Have your process's scheduler incorrectly configured.
|
||||||
See the requirements at:
|
See the requirements at:
|
||||||
http://git.0pointer.net/rtkit.git/tree/README#n16
|
http://git.0pointer.net/rtkit.git/tree/README#n16
|
||||||
* Encountered dbus/polkit security restrictions. Note
|
* Encountered dbus/polkit security restrictions. Note
|
||||||
that the RealtimeKit1 dbus endpoint is inaccessible
|
that the RealtimeKit1 dbus endpoint is inaccessible
|
||||||
over ssh connections for most common distro configs.
|
over ssh connections for most common distro configs.
|
||||||
You might want to check your local config for details:
|
You might want to check your local config for details:
|
||||||
/usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy
|
/usr/share/polkit-1/actions/org.freedesktop.RealtimeKit1.policy
|
||||||
|
|
||||||
README and sample code at: http://git.0pointer.net/rtkit.git
|
README and sample code at: http://git.0pointer.net/rtkit.git
|
||||||
*/
|
*/
|
||||||
if (schedPolicy == SCHED_RR || schedPolicy == SCHED_FIFO) {
|
if (schedPolicy == SCHED_RR || schedPolicy == SCHED_FIFO) {
|
||||||
int rtPriority;
|
if (rtkit_setpriority_realtime((pid_t)threadID, osPriority)) {
|
||||||
|
|
||||||
if (sdlPriority == SDL_THREAD_PRIORITY_LOW) {
|
|
||||||
rtPriority = 1;
|
|
||||||
} else if (sdlPriority == SDL_THREAD_PRIORITY_HIGH) {
|
|
||||||
rtPriority = rtkit_max_realtime_priority * 3 / 4;
|
|
||||||
} else if (sdlPriority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
|
|
||||||
rtPriority = rtkit_max_realtime_priority;
|
|
||||||
} else {
|
|
||||||
rtPriority = rtkit_max_realtime_priority / 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rtkit_setpriority_realtime((pid_t)threadID, rtPriority)) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
int niceLevel;
|
if (rtkit_setpriority_nice((pid_t)threadID, osPriority)) {
|
||||||
|
|
||||||
if (sdlPriority == SDL_THREAD_PRIORITY_LOW) {
|
|
||||||
niceLevel = 19;
|
|
||||||
} else if (sdlPriority == SDL_THREAD_PRIORITY_HIGH) {
|
|
||||||
niceLevel = -10;
|
|
||||||
} else if (sdlPriority == SDL_THREAD_PRIORITY_TIME_CRITICAL) {
|
|
||||||
niceLevel = -20;
|
|
||||||
} else {
|
|
||||||
niceLevel = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rtkit_setpriority_nice((pid_t)threadID, niceLevel)) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -247,8 +247,10 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __LINUX__
|
#if __LINUX__
|
||||||
pid_t linuxTid = syscall(SYS_gettid);
|
{
|
||||||
return SDL_LinuxSetThreadPriorityAndPolicy(linuxTid, priority, policy);
|
pid_t linuxTid = syscall(SYS_gettid);
|
||||||
|
return SDL_LinuxSetThreadPriorityAndPolicy(linuxTid, priority, policy);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
if (priority == SDL_THREAD_PRIORITY_LOW) {
|
if (priority == SDL_THREAD_PRIORITY_LOW) {
|
||||||
sched.sched_priority = sched_get_priority_min(policy);
|
sched.sched_priority = sched_get_priority_min(policy);
|
||||||
|
|
Loading…
Reference in a new issue