From b6a9a64124594d5f0679c80e1da8b1854868fdc7 Mon Sep 17 00:00:00 2001 From: Spoike Date: Sun, 15 Jul 2012 03:34:57 +0000 Subject: [PATCH] Lets try using posix clocks instead of gettimeofday. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4076 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/sys_droid.c | 85 ++++++++++++++++++++++++++------------- 1 file changed, 58 insertions(+), 27 deletions(-) diff --git a/engine/client/sys_droid.c b/engine/client/sys_droid.c index d3c9b7547..87fbb1d93 100644 --- a/engine/client/sys_droid.c +++ b/engine/client/sys_droid.c @@ -80,7 +80,7 @@ JNIEXPORT jint JNICALL Java_com_fteqw_FTEDroidEngine_frame(JNIEnv *env, jobject JNIEXPORT void JNICALL Java_com_fteqw_FTEDroidEngine_init(JNIEnv *env, jobject obj, jint width, jint height, jint glesversion, jstring japkpath, jstring jusrpath) { - char *tmp; + const char *tmp; vid.pixelwidth = width; vid.pixelheight = height; sys_glesversion = glesversion; @@ -96,6 +96,7 @@ JNIEXPORT void JNICALL Java_com_fteqw_FTEDroidEngine_init(JNIEnv *env, jobject o "", "" }; + char *basepack; int align; quakeparms_t parms; if (sys_memheap) @@ -112,12 +113,12 @@ JNIEXPORT void JNICALL Java_com_fteqw_FTEDroidEngine_init(JNIEnv *env, jobject o } - args[2] = parms.membase; + basepack = parms.membase; tmp = (*env)->GetStringUTFChars(env, japkpath, NULL); - strcpy(args[2], tmp); + strcpy(basepack, tmp); (*env)->ReleaseStringUTFChars(env, japkpath, tmp); - parms.membase += strlen(args[2])+1; - parms.memsize -= strlen(args[2])+1; + parms.membase += strlen(basepack)+1; + parms.memsize -= strlen(basepack)+1; parms.basedir = parms.membase; tmp = (*env)->GetStringUTFChars(env, jusrpath, NULL); @@ -134,6 +135,8 @@ JNIEXPORT void JNICALL Java_com_fteqw_FTEDroidEngine_init(JNIEnv *env, jobject o parms.memsize -= align; } + args[2] = basepack; + Sys_Printf("Starting up (apk=%s, usr=%s)\n", args[2], parms.basedir); @@ -150,36 +153,64 @@ JNIEXPORT void JNICALL Java_com_fteqw_FTEDroidEngine_init(JNIEnv *env, jobject o } static int secbase; + +#ifdef _POSIX_TIMERS double Sys_DoubleTime(void) { - struct timeval tp; - struct timezone tzp; + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); - gettimeofday(&tp, &tzp); - - if (!secbase) - { - secbase = tp.tv_sec; - return tp.tv_usec/1000000.0; - } - - return (tp.tv_sec - secbase) + tp.tv_usec/1000000.0; + if (!secbase) + { + secbase = ts.tv_sec; + return ts.tv_nsec/1000000000.0; + } + return (ts.tv_sec - secbase) + ts.tv_nsec/1000000000.0; } unsigned int Sys_Milliseconds(void) { - struct timeval tp; - struct timezone tzp; + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); - gettimeofday(&tp, &tzp); - - if (!secbase) - { - secbase = tp.tv_sec; - return tp.tv_usec/1000; - } - - return (tp.tv_sec - secbase)*1000 + tp.tv_usec/1000; + if (!secbase) + { + secbase = ts.tv_sec; + return ts.tv_nsec/1000000; + } + return (ts.tv_sec - secbase)*1000 + ts.tv_nsec/1000000; } +#else +double Sys_DoubleTime(void) +{ + struct timeval tp; + struct timezone tzp; + + gettimeofday(&tp, &tzp); + + if (!secbase) + { + secbase = tp.tv_sec; + return tp.tv_usec/1000000.0; + } + + return (tp.tv_sec - secbase) + tp.tv_usec/1000000.0; +} +unsigned int Sys_Milliseconds(void) +{ + struct timeval tp; + struct timezone tzp; + + gettimeofday(&tp, &tzp); + + if (!secbase) + { + secbase = tp.tv_sec; + return tp.tv_usec/1000; + } + + return (tp.tv_sec - secbase)*1000 + tp.tv_usec/1000; +} +#endif void Sys_Shutdown(void) {