//This rewrites internal variables, and must be threadsafe void Timer_Manager::Frame() { if (FPSLimit > 0.0f) { while (Time() - lastftime < 1.0f / FPSLimit) Thread.Sleep(); lastftime = Time(); } LockID timerLock = Thread.EnterLock(MUTEX_TIMER); float rdt = (_curtime() - lasttime); //real delta dt = min(0.5f,rdt); //clamped to prevent deltatime spikes lasttime = _curtime(); totalFrames++; curfps = 1 / rdt; Thread.LeaveLock(timerLock); }
static METACACHE_RECORD* _cache_lookup(METACACHE_FS_PRIV* fspriv, const char* filename) { METACACHE_RECORD* rec; // FIXME: do a lookup if ((hash_retrieve(&(fspriv->cache), (char*)filename, (void**)&rec)) && (rec!=NULL)) { if ((rec->mtime+CACHE_TIMEOUT) > _curtime()) { DEBUGMSG("cached: %s", filename); return rec; } DEBUGMSG("purging old cache record for %s", filename); mvfs_stat_free(rec->stat); rec->stat = NULL; return rec; } // ... lookup failed - no record yet rec = calloc(1,sizeof(METACACHE_RECORD)); rec->filename = strdup(filename); // now insert hash_insert(&(fspriv->cache),rec->filename,rec); return rec; }
//FIXME: this one isn't really needed void Timer_Manager::Initialize() { LockID timerLock = Thread.EnterLock(MUTEX_TIMER); starttime = _curtime(); lasttime = starttime; timeRunning = true; FPSLimit = 0.0f; lastftime = lasttime; Thread.LeaveLock(timerLock); }
static void _cache_clear(METACACHE_RECORD* rec) { if (rec == NULL) { DEBUGMSG("NULL rec passed"); return; } rec->mtime = _curtime(); mvfs_stat_free(rec->stat); rec->stat = NULL; }
float Timer_Manager::Time() { return (_curtime()-starttime); }
static void _cache_set(METACACHE_RECORD* rec, MVFS_STAT* st) { rec->mtime = _curtime(); mvfs_stat_free(rec->stat); rec->stat = (st ? mvfs_stat_dup(st) : NULL); }