]> git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
new cvar sys_useclockgettime (default 0) that makes DP use clock_gettime as time...
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sun, 15 Jun 2008 14:31:11 +0000 (14:31 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sun, 15 Jun 2008 14:31:11 +0000 (14:31 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@8354 d7cf8633-e32d-0410-b094-e92efae38249

makefile.inc
sys_linux.c

index ab8a448fed61ac1e6b52c637a324b67c53a69cbd..6f3bb46d4e53c1023a86b505fb2c256d92635bef 100644 (file)
@@ -205,9 +205,9 @@ OBJ_LINUXCD=cd_linux.o
 #OBJ_LINUXCD=$(OBJ_NOCD)
 
 # Link
-LDFLAGS_LINUXCL=$(LDFLAGS_UNIXCOMMON) -ldl $(LDFLAGS_UNIXCL)
-LDFLAGS_LINUXSV=$(LDFLAGS_UNIXCOMMON) -ldl
-LDFLAGS_LINUXSDL=$(LDFLAGS_UNIXCOMMON) -ldl $(LDFLAGS_UNIXSDL)
+LDFLAGS_LINUXCL=$(LDFLAGS_UNIXCOMMON) -lrt -ldl $(LDFLAGS_UNIXCL)
+LDFLAGS_LINUXSV=$(LDFLAGS_UNIXCOMMON) -lrt -ldl
+LDFLAGS_LINUXSDL=$(LDFLAGS_UNIXCOMMON) -lrt -ldl $(LDFLAGS_UNIXSDL)
 
 
 ##### Mac OS X specific variables #####
@@ -234,9 +234,9 @@ OBJ_SUNOSCD=$(OBJ_NOCD)
 CFLAGS_SUNOS=-I/usr/lib/oss/include -DBSD_COMP -DSUNOS
 
 # Link
-LDFLAGS_SUNOSCL=$(LDFLAGS_UNIXCOMMON) -ldl -lsocket -lnsl -R$(UNIX_X11LIBPATH) -L$(UNIX_X11LIBPATH) -lX11 -lXpm -lXext -lXxf86vm $(LIB_SOUND)
-LDFLAGS_SUNOSSV=$(LDFLAGS_UNIXCOMMON) -ldl -lsocket -lnsl
-LDFLAGS_SUNOSSDL=$(LDFLAGS_UNIXCOMMON) -ldl -lsocket -lnsl $(LDFLAGS_UNIXSDL)
+LDFLAGS_SUNOSCL=$(LDFLAGS_UNIXCOMMON) -lrt -ldl -lsocket -lnsl -R$(UNIX_X11LIBPATH) -L$(UNIX_X11LIBPATH) -lX11 -lXpm -lXext -lXxf86vm $(LIB_SOUND)
+LDFLAGS_SUNOSSV=$(LDFLAGS_UNIXCOMMON) -lrt -ldl -lsocket -lnsl
+LDFLAGS_SUNOSSDL=$(LDFLAGS_UNIXCOMMON) -lrt -ldl -lsocket -lnsl $(LDFLAGS_UNIXSDL)
 
 
 ##### BSD specific variables #####
@@ -248,7 +248,7 @@ OBJ_BSDCD=cd_bsd.o
 
 # Link
 LDFLAGS_BSDCL=$(LDFLAGS_UNIXCOMMON) -lutil $(LDFLAGS_UNIXCL)
-LDFLAGS_BSDSV=$(LDFLAGS_UNIXCOMMON)
+LDFLAGS_BSDSV=$(LDFLAGS_UNIXCOMMON) 
 LDFLAGS_BSDSDL=$(LDFLAGS_UNIXCOMMON) $(LDFLAGS_UNIXSDL)
 
 
index 7439c27fd3e86246c53c6244f059cfda55d44293..0ddf3224d68d49f499d26588bea10cceed3e5412 100644 (file)
@@ -7,6 +7,7 @@
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/time.h>
+#include <time.h>
 #endif
 
 #include <signal.h>
 
 #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
+# ifndef MACOSX
+cvar_t sys_useclockgettime = {CVAR_SAVE, "sys_useclockgettime", "0", "use POSIX clock_gettime function (which has issues if the system clock speed is far off, as it can't get fixed by NTP) for timing rather than gettimeofday (which has issues if the system time is stepped by ntpdate, or apparently on some Xen installations)"};
+# endif
 #endif
 
 
@@ -129,9 +134,24 @@ double Sys_DoubleTime (void)
                #endif
        }
 #else
-       struct timeval tp;
-       gettimeofday(&tp, NULL);
-       newtime = (double) tp.tv_sec + tp.tv_usec / 1000000.0;
+# ifndef MACOSX
+       if (sys_useclockgettime.integer)
+       {
+               struct timespec ts;
+#  ifdef SUNOS
+               clock_gettime(CLOCK_HIGHRES, &ts);
+#  else
+               clock_gettime(CLOCK_MONOTONIC, &ts);
+#  endif
+               newtime = (double) ts.tv_sec + ts.tv_nsec / 1000000000.0;
+       }
+       else
+# endif
+       {
+               struct timeval tp;
+               gettimeofday(&tp, NULL);
+               newtime = (double) tp.tv_sec + tp.tv_usec / 1000000.0;
+       }
 #endif
 
        if (first)
@@ -233,6 +253,13 @@ void Sys_InitConsole (void)
 
 void Sys_Init_Commands (void)
 {
+#ifdef WIN32
+       Cvar_RegisterVariable(&sys_usetimegettime);
+#else
+# ifndef MACOSX
+       Cvar_RegisterVariable(&sys_useclockgettime);
+# endif
+#endif
 }
 
 int main (int argc, char **argv)