if(sys_debugsleep.integer)
{
t = Sys_DirtyTime() - t;
- printf("%d %d # debugsleep\n", microseconds, (unsigned int)(t * 1000000));
+ Sys_PrintfToTerminal("%d %d # debugsleep\n", microseconds, (unsigned int)(t * 1000000));
}
}
+void Sys_PrintfToTerminal(const char *fmt, ...)
+{
+ va_list argptr;
+ char msg[MAX_INPUTLINE];
+
+ va_start(argptr,fmt);
+ dpvsnprintf(msg,sizeof(msg),fmt,argptr);
+ va_end(argptr);
+
+ Sys_PrintToTerminal(msg);
+}
+
+#ifndef WIN32
static const char *Sys_FindInPATH(const char *name, char namesep, const char *PATH, char pathsep, char *buf, size_t bufsize)
{
const char *p = PATH;
}
return name;
}
+#endif
static const char *Sys_FindExecutableName(void)
{
# endif
return features;
}
+#endif
+#ifdef SSE_POSSIBLE
qboolean Sys_HaveSSE(void)
{
// COMMANDLINEOPTION: SSE: -nosse disables SSE support and detection
if(COM_CheckParm("-nosse"))
return false;
+#ifdef SSE_PRESENT
+ return true;
+#else
// COMMANDLINEOPTION: SSE: -forcesse enables SSE support and disables detection
if(COM_CheckParm("-forcesse") || COM_CheckParm("-forcesse2"))
return true;
if(CPUID_Features() & (1 << 25))
return true;
return false;
+#endif
}
qboolean Sys_HaveSSE2(void)
// COMMANDLINEOPTION: SSE2: -nosse2 disables SSE2 support and detection
if(COM_CheckParm("-nosse") || COM_CheckParm("-nosse2"))
return false;
+#ifdef SSE2_PRESENT
+ return true;
+#else
// COMMANDLINEOPTION: SSE2: -forcesse2 enables SSE2 support and disables detection
if(COM_CheckParm("-forcesse2"))
return true;
if((CPUID_Features() & (3 << 25)) == (3 << 25)) // SSE is 1<<25, SSE2 is 1<<26
return true;
return false;
+#endif
+}
+#endif
+
+/// called to set process priority for dedicated servers
+#if defined(__linux__)
+#include <sys/resource.h>
+#include <errno.h>
+static int nicelevel;
+static qboolean nicepossible;
+static qboolean isnice;
+void Sys_InitProcessNice (void)
+{
+ struct rlimit lim;
+ nicepossible = false;
+ if(COM_CheckParm("-nonice"))
+ return;
+ errno = 0;
+ nicelevel = getpriority(PRIO_PROCESS, 0);
+ if(errno)
+ {
+ Con_Printf("Kernel does not support reading process priority - cannot use niceness\n");
+ return;
+ }
+ if(getrlimit(RLIMIT_NICE, &lim))
+ {
+ Con_Printf("Kernel does not support lowering nice level again - cannot use niceness\n");
+ return;
+ }
+ if(lim.rlim_cur != RLIM_INFINITY && nicelevel < (int) (20 - lim.rlim_cur))
+ {
+ Con_Printf("Current nice level is below the soft limit - cannot use niceness\n");
+ return;
+ }
+ nicepossible = true;
+ isnice = false;
+}
+void Sys_MakeProcessNice (void)
+{
+ if(!nicepossible)
+ return;
+ if(isnice)
+ return;
+ Con_DPrintf("Process is becoming 'nice'...\n");
+ if(setpriority(PRIO_PROCESS, 0, 19))
+ Con_Printf("Failed to raise nice level to %d\n", 19);
+ isnice = true;
+}
+void Sys_MakeProcessMean (void)
+{
+ if(!nicepossible)
+ return;
+ if(!isnice)
+ return;
+ Con_DPrintf("Process is becoming 'mean'...\n");
+ if(setpriority(PRIO_PROCESS, 0, nicelevel))
+ Con_Printf("Failed to lower nice level to %d\n", nicelevel);
+ isnice = false;
+}
+#else
+void Sys_InitProcessNice (void)
+{
+}
+void Sys_MakeProcessNice (void)
+{
+}
+void Sys_MakeProcessMean (void)
+{
}
#endif