mirror of https://github.com/encounter/SDL.git
Added SDL_LinuxSetThreadPriority() to directly set the priority of a Linux thread (tid)
This function tries using RealtimeKit connecting over DBUS as needed.
This commit is contained in:
parent
816a6e68e5
commit
432312561f
|
@ -76,6 +76,18 @@ extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *a
|
||||||
#endif /* __WIN32__ */
|
#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 */
|
/* Platform specific functions for iOS */
|
||||||
#if defined(__IPHONEOS__) && __IPHONEOS__
|
#if defined(__IPHONEOS__) && __IPHONEOS__
|
||||||
|
|
||||||
|
|
|
@ -670,3 +670,4 @@
|
||||||
#define SDL_log10 SDL_log10_REAL
|
#define SDL_log10 SDL_log10_REAL
|
||||||
#define SDL_log10f SDL_log10f_REAL
|
#define SDL_log10f SDL_log10f_REAL
|
||||||
#define SDL_GameControllerMappingForDeviceIndex SDL_GameControllerMappingForDeviceIndex_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(double,SDL_log10,(double a),(a),return)
|
||||||
SDL_DYNAPI_PROC(float,SDL_log10f,(float a),(a),return)
|
SDL_DYNAPI_PROC(float,SDL_log10f,(float a),(a),return)
|
||||||
SDL_DYNAPI_PROC(char*,SDL_GameControllerMappingForDeviceIndex,(int 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 */
|
#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
|
int
|
||||||
SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||||
{
|
{
|
||||||
|
@ -255,24 +280,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
|
||||||
} else {
|
} else {
|
||||||
value = 0;
|
value = 0;
|
||||||
}
|
}
|
||||||
if (setpriority(PRIO_PROCESS, thread, value) < 0) {
|
return SDL_LinuxSetThreadPriority(thread, value);
|
||||||
/* 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;
|
|
||||||
#else
|
#else
|
||||||
struct sched_param sched;
|
struct sched_param sched;
|
||||||
int policy;
|
int policy;
|
||||||
|
|
Loading…
Reference in New Issue