X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=sys_linux.c;h=8e042f405a0c9deba593e0541b33fb48f373a68e;hb=4afc8578d1934fafc515c720cacb37cccd5e01d8;hp=0ddf3224d68d49f499d26588bea10cceed3e5412;hpb=892af9237609d72a8c9f4e563b52bf844ea3bf15;p=xonotic%2Fdarkplaces.git diff --git a/sys_linux.c b/sys_linux.c index 0ddf3224..8e042f40 100644 --- a/sys_linux.c +++ b/sys_linux.c @@ -13,6 +13,9 @@ #include +cvar_t sys_usenoclockbutbenchmark = {CVAR_SAVE, "sys_usenoclockbutbenchmark", "0", "don't use ANY real timing, and simulate a clock (for benchmarking); the game then runs as fast as possible. Run a QC mod with bots that does some stuff, then does a quit at the end, to benchmark a server. NEVER do this on a public server."}; +static unsigned long benchmark_time; + #ifdef WIN32 cvar_t sys_usetimegettime = {CVAR_SAVE, "sys_usetimegettime", "1", "use windows timeGetTime function (which has issues on some motherboards) for timing rather than QueryPerformanceCounter timer (which has issues on multicore/multiprocessor machines and processors which are designed to conserve power)"}; #else @@ -60,10 +63,12 @@ void Sys_PrintToTerminal(const char *text) // BUG: for some reason, NDELAY also affects stdout (1) when used on stdin (0). int origflags = fcntl (1, F_GETFL, 0); fcntl (1, F_SETFL, origflags & ~FNDELAY); +#else +#define write _write #endif while(*text) { - int written = (int)write(1, text, (int)strlen(text)); + ssize_t written = write(1, text, strlen(text)); if(written <= 0) break; // sorry, I cannot do anything about this error - without an output text += written; @@ -79,6 +84,11 @@ double Sys_DoubleTime (void) static int first = true; static double oldtime = 0.0, curtime = 0.0; double newtime; + if(sys_usenoclockbutbenchmark.integer) + { + benchmark_time += 1; + return ((double) benchmark_time) / 1e6; + } #ifdef WIN32 #include // LordHavoc: note to people modifying this code, DWORD is specifically defined as an unsigned 32bit number, therefore the 65536.0 * 65536.0 is fine. @@ -166,6 +176,10 @@ double Sys_DoubleTime (void) if (newtime - oldtime < -0.01) Con_Printf("Sys_DoubleTime: time stepped backwards (went from %f to %f, difference %f)\n", oldtime, newtime, newtime - oldtime); } + else if (newtime > oldtime + 1800) + { + Con_Printf("Sys_DoubleTime: time stepped forward (went from %f to %f, difference %f)\n", oldtime, newtime, newtime - oldtime); + } else curtime += newtime - oldtime; oldtime = newtime; @@ -175,7 +189,7 @@ double Sys_DoubleTime (void) char *Sys_ConsoleInput(void) { - if (cls.state == ca_dedicated) + //if (cls.state == ca_dedicated) { static char text[MAX_INPUTLINE]; static unsigned int len = 0; @@ -189,7 +203,7 @@ char *Sys_ConsoleInput(void) if (c == '\r') { text[len] = '\0'; - putch ('\n'); + _putch ('\n'); len = 0; return text; } @@ -197,16 +211,16 @@ char *Sys_ConsoleInput(void) { if (len) { - putch (c); - putch (' '); - putch (c); + _putch (c); + _putch (' '); + _putch (c); len--; } continue; } if (len < sizeof (text) - 1) { - putch (c); + _putch (c); text[len] = c; len++; } @@ -235,6 +249,11 @@ char *Sys_ConsoleInput(void) void Sys_Sleep(int microseconds) { + if(sys_usenoclockbutbenchmark.integer) + { + benchmark_time += microseconds; + return; + } #ifdef WIN32 Sleep(microseconds / 1000); #else @@ -253,6 +272,7 @@ void Sys_InitConsole (void) void Sys_Init_Commands (void) { + Cvar_RegisterVariable(&sys_usenoclockbutbenchmark); #ifdef WIN32 Cvar_RegisterVariable(&sys_usetimegettime); #else