]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - sys_linux.c
add DP_NULL_MODEL extension
[xonotic/darkplaces.git] / sys_linux.c
index 0ddf3224d68d49f499d26588bea10cceed3e5412..8e042f405a0c9deba593e0541b33fb48f373a68e 100644 (file)
@@ -13,6 +13,9 @@
 #include <signal.h>
 
 
+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 <mmsystem.h>
        // 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