Added SDL_LinuxSetThreadPriority() to directly set the priority of a Linux thread (tid)
This function tries using RealtimeKit connecting over DBUS as needed.
parent
816a6e68e5
commit
432312561f
|
@ -76,6 +76,18 @@ extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *a
|
|||
#endif /* __WIN32__ */
|
||||
|
||||
|
||||
/* Platform specific functions for Linux */
|
||||
#ifdef __LINUX__
|
||||
|
||||
/**
|
||||
\brief Sets the UNIX nice value for a thread, using setpriority() if possible, and RealtimeKit if available.
|
||||
|
||||
\return 0 on success, or -1 on error.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority);
|
||||
|
||||
#endif /* __LINUX__ */
|
||||
|
||||
/* Platform specific functions for iOS */
|
||||
#if defined(__IPHONEOS__) && __IPHONEOS__
|
||||
|
||||
|
|
|
@ -670,3 +670,4 @@
|
|||
#define SDL_log10 SDL_log10_REAL
|
||||
#define SDL_log10f SDL_log10f_REAL
|
||||
#define SDL_GameControllerMappingForDeviceIndex SDL_GameControllerMappingForDeviceIndex_REAL
|
||||
#define SDL_LinuxSetThreadPriority SDL_LinuxSetThreadPriority_REAL
|
||||
|
|
|
@ -708,3 +708,6 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_IsAndroidTV,(void),(),return)
|
|||
SDL_DYNAPI_PROC(double,SDL_log10,(double a),(a),return)
|
||||
SDL_DYNAPI_PROC(float,SDL_log10f,(float a),(a),return)
|
||||
SDL_DYNAPI_PROC(char*,SDL_GameControllerMappingForDeviceIndex,(int a),(a),return)
|
||||
#ifdef __LINUX__
|
||||
SDL_DYNAPI_PROC(int,SDL_LinuxSetThreadPriority,(Sint64 a, int b),(a,b),return)
|
||||
#endif
|
||||
|
|
|
@ -238,6 +238,31 @@ rtkit_setpriority(pid_t thread, int nice_level)
|
|||
|
||||
#endif /* !SDL_USE_LIBDBUS */
|
||||
|
||||
#if __LINUX__
|
||||
int
|
||||
SDL_LinuxSetThreadPriority(Sint64 threadID, int priority)
|
||||
{
|
||||
if (setpriority(PRIO_PROCESS, (id_t)threadID, priority) < 0) {
|
||||
/* Note that this fails if you're trying to set high priority
|
||||
and you don't have root permission. BUT DON'T RUN AS ROOT!
|
||||
|
||||
You can grant the ability to increase thread priority by
|
||||
running the following command on your application binary:
|
||||
sudo setcap 'cap_sys_nice=eip' <application>
|
||||
|
||||
Let's try setting priority with RealtimeKit...
|
||||
|
||||
README and sample code at:
|
||||
http://git.0pointer.net/rtkit.git
|
||||
*/
|
||||
if (rtkit_setpriority((pid_t)threadID, priority) == SDL_FALSE) {
|
||||
return SDL_SetError("setpriority() failed");
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif /* __LINUX__ */
|
||||
|
||||
int
|
||||
SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||
{
|
||||
|
@ -255,24 +280,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
|||
} else {
|
||||
value = 0;
|
||||
}
|
||||
if (setpriority(PRIO_PROCESS, thread, value) < 0) {
|
||||
/* Note that this fails if you're trying to set high priority
|
||||
and you don't have root permission. BUT DON'T RUN AS ROOT!
|
||||
|
||||
You can grant the ability to increase thread priority by
|
||||
running the following command on your application binary:
|
||||
sudo setcap 'cap_sys_nice=eip' <application>
|
||||
|
||||
Let's try setting priority with RealtimeKit...
|
||||
|
||||
README and sample code at:
|
||||
http://git.0pointer.net/rtkit.git
|
||||
*/
|
||||
if (rtkit_setpriority(thread, value) == SDL_FALSE) {
|
||||
return SDL_SetError("setpriority() failed");
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
return SDL_LinuxSetThreadPriority(thread, value);
|
||||
#else
|
||||
struct sched_param sched;
|
||||
int policy;
|
||||
|
|
Loading…
Reference in New Issue