void _starpu_timing_init(void) { static starpu_tick_t t1, t2; int i; if (inited) return; residual = (unsigned long long)1 << 63; for(i = 0; i < 20; i++) { STARPU_GET_TICK(t1); STARPU_GET_TICK(t2); residual = STARPU_MIN(residual, TICK_RAW_DIFF(t1, t2)); } { struct timeval tv1,tv2; STARPU_GET_TICK(t1); gettimeofday(&tv1,0); usleep(500000); STARPU_GET_TICK(t2); gettimeofday(&tv2,0); scale = ((tv2.tv_sec*1e6 + tv2.tv_usec) - (tv1.tv_sec*1e6 + tv1.tv_usec)) / (double)(TICK_DIFF(t1, t2)); } STARPU_GET_TICK(reference_start_tick); inited = 1; }
//Commands local void Cblink(const char *cmd, const char *params, Player *p, const Target *target) { if (target->type != T_ARENA) return; //Ignore non-pub commands PlayerData *pdata = getPlayerData(p); if (!pdata->canBlink) { chat->SendMessage(p, "You do not have an item capable of blink on your ship."); return; } if (TICK_DIFF(current_ticks(), pdata->lastBlink) < pdata->blinkDelay) { chat->SendMessage(p, "Blink is currently recharging."); return; } pdata->blinkActivated = true; if (!params || !*params) pdata->blinkDirection = rand()%360; else pdata->blinkDirection = atoi(params); }
void starpu_clock_gettime(struct timespec *ts) { starpu_tick_t tick_now; STARPU_GET_TICK(tick_now); uint64_t elapsed_ticks = TICK_DIFF(reference_start_tick, tick_now); /* We convert this number into nano-seconds so that we can fill the * timespec structure. */ uint64_t elapsed_ns = (uint64_t)(((double)elapsed_ticks)*(scale*1000.0)); long tv_nsec = (elapsed_ns % 1000000000); time_t tv_sec = (elapsed_ns / 1000000000); ts->tv_sec = tv_sec; ts->tv_nsec = tv_nsec; }
local void Ctime(const char *cmd, const char *params, Player *p, const Target *target) { Arena *arena = p->arena; int tout; timerdata *td = P_ARENA_DATA(arena, tdkey); char time_string[40]; if (td->enabled) { tout = TICK_DIFF(td->timeout, current_ticks()); get_time_string(tout, time_string); chat->SendMessage(p, "Time left: %s.", time_string); } else if (td->timeout) { get_time_string(td->timeout, time_string); chat->SendMessage(p, "Timer paused at: %s.", time_string); } else chat->SendMessage(p, "Time left: 0 seconds."); }
local int TimerMaster(void *nothing) { ticks_t now = current_ticks(); int j; Link *link; Arena *arena; timerdata *td; aman->Lock(); FOR_EACH_ARENA_P(arena, td, tdkey) if (td->enabled && TICK_GT(now, td->timeout)) { lm->LogA(L_DRIVEL, "game_timer", arena, "timer expired"); DO_CBS(CB_TIMESUP, arena, GameTimerFunc, (arena)); chat->SendArenaSoundMessage(arena, SOUND_HALLELLULA, "NOTICE: Game over"); if (td->gamelen) td->timeout = TICK_MAKE(now+td->gamelen); else { td->enabled = 0; td->timeout = 0; } } else if (td->enabled) { now = TICK_DIFF(td->timeout, current_ticks())/100; for (j = 0; j < MAXWARNMSGS; j++) if (now && td->warnmsgs[j] == now) { if (!(td->warnmsgs[j]%60)) chat->SendArenaMessage(arena, "NOTICE: %u minute%s remaining.", now/60, now == 60 ? "" : "s"); else chat->SendArenaMessage(arena, "NOTICE: %u seconds remaining.", now); } } aman->Unlock(); return TRUE; }