From 8c446aa6cef835d80912d5b7b6b7c6d27836bc86 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Fri, 22 Nov 2002 11:35:03 +0000 Subject: [PATCH] Using linux soft realtime priority for Sys.REALTIME_PRIORITY --- src/native/linux/org_lwjgl_Sys.cpp | 35 +++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/src/native/linux/org_lwjgl_Sys.cpp b/src/native/linux/org_lwjgl_Sys.cpp index 7e79aab6..81d1d66e 100644 --- a/src/native/linux/org_lwjgl_Sys.cpp +++ b/src/native/linux/org_lwjgl_Sys.cpp @@ -39,6 +39,7 @@ * @version $Revision$ */ +#include #include #include #include "org_lwjgl_Sys.h" @@ -130,12 +131,40 @@ JNIEXPORT void JNICALL Java_org_lwjgl_Sys_setProcessPriority (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;