From: Elias N. <eli...@us...> - 2002-11-22 11:35:06
|
Update of /cvsroot/java-game-lib/LWJGL/src/native/linux In directory sc8-pr-cvs1:/tmp/cvs-serv28021 Modified Files: org_lwjgl_Sys.cpp Log Message: Using linux soft realtime priority for Sys.REALTIME_PRIORITY Index: org_lwjgl_Sys.cpp CVS Browser: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/src/native/linux/org_lwjgl_Sys.cpp =================================================================== RCS file: /cvsroot/java-game-lib/LWJGL/src/native/linux/org_lwjgl_Sys.cpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- org_lwjgl_Sys.cpp 19 Nov 2002 08:50:57 -0000 1.1 +++ org_lwjgl_Sys.cpp 22 Nov 2002 11:35:03 -0000 1.2 @@ -39,6 +39,7 @@ * @version $Revision$ */ +#include <sched.h> #include <sys/time.h> #include <sys/resource.h> #include "org_lwjgl_Sys.h" @@ -130,12 +131,40 @@ (JNIEnv * env, jclass clazz, jint priority) { int linux_priority; + int max_pri, min_pri; + struct sched_param sched_pri; + + if (sched_getscheduler(0) != SCHED_OTHER) { + // Reset scheduler to normal + sched_pri.sched_priority = 0; + if (sched_setscheduler(0, SCHED_OTHER, &sched_pri) != 0) { +#ifdef _DEBUG + printf("Could not set realtime priority\n"); +#endif + return; + } + } + switch (priority) { case org_lwjgl_Sys_REALTIME_PRIORITY: - linux_priority = -20; - break; + min_pri = sched_get_priority_min(SCHED_FIFO); + max_pri = sched_get_priority_max(SCHED_FIFO); + if (min_pri == -1 || max_pri == -1) { +#ifdef _DEBUG + printf("Failed to set realtime priority\n"); +#endif + return; + } + sched_pri.sched_priority = (max_pri + min_pri)/2; + if (sched_setscheduler(0, SCHED_FIFO, &sched_pri) != 0) { +#ifdef _DEBUG + printf("Could not set realtime priority\n"); +#endif + return; + } + return; case org_lwjgl_Sys_HIGH_PRIORITY: - linux_priority = -10; + linux_priority = -20; break; case org_lwjgl_Sys_NORMAL_PRIORITY: linux_priority = 0; |