X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=sys_shared.c;h=10f5a60e5d7126a145188698246ddeb23479840c;hb=6f1a935ecaf044b18f487094317fcef26a467316;hp=34fd2f7ae6098feaf904f51d573f46ee5be4259d;hpb=cfee52a1ec9db338098789cae89ae5cf1f7a6fbf;p=xonotic%2Fdarkplaces.git diff --git a/sys_shared.c b/sys_shared.c index 34fd2f7a..10f5a60e 100644 --- a/sys_shared.c +++ b/sys_shared.c @@ -434,10 +434,23 @@ void Sys_Sleep(int microseconds) 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; @@ -460,6 +473,7 @@ static const char *Sys_FindInPATH(const char *name, char namesep, const char *PA } return name; } +#endif static const char *Sys_FindExecutableName(void) { @@ -522,18 +536,24 @@ static int CPUID_Features(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) @@ -541,11 +561,82 @@ 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 +#include +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