From a2306446c86b3333e69b082e41ae76ba71a42d9d Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Thu, 24 Mar 2011 13:57:13 -0700 Subject: Optimize common objects, and adjust other objects accordingly. Major changes still need to be made to each of the servers. --- src/common/timer.h | 86 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 53 insertions(+), 33 deletions(-) (limited to 'src/common/timer.h') diff --git a/src/common/timer.h b/src/common/timer.h index c6c4b52..4fa5db8 100644 --- a/src/common/timer.h +++ b/src/common/timer.h @@ -1,47 +1,67 @@ -// original : core.h 2003/03/14 11:55:25 Rev 1.4 +#ifndef TIMER_H +#define TIMER_H -#ifndef _TIMER_H_ -#define _TIMER_H_ +# include "sanity.h" -#define BASE_TICK 5 - -#define TIMER_ONCE_AUTODEL 1 -#define TIMER_INTERVAL 2 -#define TIMER_REMOVE_HEAP 16 - -#define DIFF_TICK(a,b) ((int)((a)-(b))) +enum TIMER_TYPE { + TIMER_ONCE_AUTODEL = 1, + TIMER_INTERVAL = 2, +}; +/// This is needed to produce a signed result when 2 ticks are subtracted +# define DIFF_TICK(a,b) ((int32_t)((a)-(b))) -// Struct declaration +// TODO replace with signed 64-bit to make code more clear and protect from the future +typedef uint32_t tick_t; +typedef uint32_t interdb_val_t; +typedef uint32_t timer_id; +// BUG: pointers are stored in here +typedef int32_t custom_id_t; +typedef int32_t custom_data_t; +typedef void (*timer_func) (timer_id, tick_t, custom_id_t, custom_data_t); struct TimerData { - unsigned int tick; - int (*func) (int, unsigned int, int, int); - int id; - int data; - int type; - int interval; - int heap_pos; + /// When it will be triggered + tick_t tick; + /// What will be done + timer_func func; + /// Arbitrary data. WARNING, callers are stupid and put pointers in here + // Should we change to void* or intptr_t ? + custom_id_t id; + custom_data_t data; + /// Type of timer - 0 initially + enum TIMER_TYPE type; + /// Repeat rate + uint32_t interval; }; -// Function prototype declaration - -unsigned int gettick_nocache (void); -unsigned int gettick (void); +/// Server time, in milliseconds, since the epoch, +/// but use of 32-bit integers means it wraps every 49 days. +// The only external caller of this function is the core.c main loop, but that makes sense +// in fact, it might make more sense if gettick() ALWAYS returned that cached value +tick_t gettick_nocache (void); +/// This function is called enough that it's worth caching the result for +/// the next 255 times +tick_t gettick (void); -int add_timer (unsigned int, int (*)(int, unsigned int, int, int), int, int); -int add_timer_interval (unsigned int, int (*)(int, unsigned int, int, int), - int, int, int); -int delete_timer (int, int (*)(int, unsigned int, int, int)); +timer_id add_timer (tick_t tick, timer_func func, custom_id_t id, + custom_data_t data); +timer_id add_timer_interval (tick_t tick, timer_func func, custom_id_t id, + custom_data_t data, interdb_val_t interval); +void delete_timer (timer_id, timer_func); -int addtick_timer (int tid, unsigned int tick); -struct TimerData *get_timer (int tid); +tick_t addtick_timer (timer_id tid, interdb_val_t tick); +struct TimerData *get_timer (timer_id tid); -int do_timer (unsigned int tick); +/// Do all timers scheduled before tick, and return the number of milliseconds until the next timer happens +interdb_val_t do_timer (tick_t tick); -int add_timer_func_list (int (*)(int, unsigned int, int, int), char *); -char *search_timer_func_list (int (*)(int, unsigned int, int, int)); +// debugging +static void add_timer_func_list (timer_func, char *) __attribute__((deprecated)); +static inline void add_timer_func_list (timer_func UNUSED, char *UNUSED) {} -extern void timer_final (); +// used to just call free(), which doesn't matter when we're exiting +static void timer_final () __attribute__((deprecated)); +static inline void timer_final() {}; -#endif // _TIMER_H_ +#endif // TIMER_H -- cgit v1.2.3-70-g09d2