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;
|