From d1f0fd9fe8a52b320f71dbd89544f72e9076f541 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sat, 10 Jan 2015 01:12:58 +0100 Subject: Moved OSX osd_sleep and friends to modules/lib (nw) --- src/osd/modules/lib/osdlib_macosx.c | 124 ++++++++++++++++++++++++++++++++++++ src/osd/sdl/sdlos_macosx.c | 117 ---------------------------------- 2 files changed, 124 insertions(+), 117 deletions(-) diff --git a/src/osd/modules/lib/osdlib_macosx.c b/src/osd/modules/lib/osdlib_macosx.c index 7aab9eaf78c..4f3b5bd3548 100644 --- a/src/osd/modules/lib/osdlib_macosx.c +++ b/src/osd/modules/lib/osdlib_macosx.c @@ -6,11 +6,17 @@ #include #include +#include #include // MAME headers +#include "osdcore.h" #include "osdlib.h" +// FIXME: We shouldn't use SDL functions in here + +#include "sdlinc.h" + //============================================================ // osd_process_kill //============================================================ @@ -102,3 +108,121 @@ int osd_setenv(const char *name, const char *value, int overwrite) { return setenv(name, value, overwrite); } + +//============================================================ +// PROTOTYPES +//============================================================ + +static osd_ticks_t init_cycle_counter(void); +static osd_ticks_t mach_cycle_counter(void); + +//============================================================ +// STATIC VARIABLES +//============================================================ + +static osd_ticks_t (*cycle_counter)(void) = init_cycle_counter; +static osd_ticks_t (*ticks_counter)(void) = init_cycle_counter; +static osd_ticks_t ticks_per_second; + +//============================================================ +// init_cycle_counter +// +// to avoid total grossness, this function is split by subarch +//============================================================ + +static osd_ticks_t init_cycle_counter(void) +{ + osd_ticks_t start, end; + osd_ticks_t a, b; + + cycle_counter = mach_cycle_counter; + ticks_counter = mach_cycle_counter; + + // wait for an edge on the timeGetTime call + a = SDL_GetTicks(); + do + { + b = SDL_GetTicks(); + } while (a == b); + + // get the starting cycle count + start = (*cycle_counter)(); + + // now wait for 1/4 second total + do + { + a = SDL_GetTicks(); + } while (a - b < 250); + + // get the ending cycle count + end = (*cycle_counter)(); + + // compute ticks_per_sec + ticks_per_second = (end - start) * 4; + + // return the current cycle count + return (*cycle_counter)(); +} + +//============================================================ +// performance_cycle_counter +//============================================================ + +//============================================================ +// mach_cycle_counter +//============================================================ +static osd_ticks_t mach_cycle_counter(void) +{ + return mach_absolute_time(); +} + +//============================================================ +// osd_cycles +//============================================================ + +osd_ticks_t osd_ticks(void) +{ + return (*cycle_counter)(); +} + + +//============================================================ +// osd_ticks_per_second +//============================================================ + +osd_ticks_t osd_ticks_per_second(void) +{ + if (ticks_per_second == 0) + { + // if we haven't computed the value yet, there's no time like the present + init_cycle_counter(); + } + return ticks_per_second; +} + + + +//============================================================ +// osd_sleep +//============================================================ + +void osd_sleep(osd_ticks_t duration) +{ + UINT32 msec; + + // make sure we've computed ticks_per_second + if (ticks_per_second == 0) + (void)osd_ticks(); + + // convert to milliseconds, rounding down + msec = (UINT32)(duration * 1000 / ticks_per_second); + + // only sleep if at least 2 full milliseconds + if (msec >= 2) + { + // take a couple of msecs off the top for good measure + msec -= 2; + usleep(msec*1000); + } +} + diff --git a/src/osd/sdl/sdlos_macosx.c b/src/osd/sdl/sdlos_macosx.c index 4a961f5f872..a6baef5f159 100644 --- a/src/osd/sdl/sdlos_macosx.c +++ b/src/osd/sdl/sdlos_macosx.c @@ -22,123 +22,6 @@ // MAME headers #include "osdcore.h" -//============================================================ -// PROTOTYPES -//============================================================ - -static osd_ticks_t init_cycle_counter(void); -static osd_ticks_t mach_cycle_counter(void); - -//============================================================ -// STATIC VARIABLES -//============================================================ - -static osd_ticks_t (*cycle_counter)(void) = init_cycle_counter; -static osd_ticks_t (*ticks_counter)(void) = init_cycle_counter; -static osd_ticks_t ticks_per_second; - -//============================================================ -// init_cycle_counter -// -// to avoid total grossness, this function is split by subarch -//============================================================ - -static osd_ticks_t init_cycle_counter(void) -{ - osd_ticks_t start, end; - osd_ticks_t a, b; - - cycle_counter = mach_cycle_counter; - ticks_counter = mach_cycle_counter; - - // wait for an edge on the timeGetTime call - a = SDL_GetTicks(); - do - { - b = SDL_GetTicks(); - } while (a == b); - - // get the starting cycle count - start = (*cycle_counter)(); - - // now wait for 1/4 second total - do - { - a = SDL_GetTicks(); - } while (a - b < 250); - - // get the ending cycle count - end = (*cycle_counter)(); - - // compute ticks_per_sec - ticks_per_second = (end - start) * 4; - - // return the current cycle count - return (*cycle_counter)(); -} - -//============================================================ -// performance_cycle_counter -//============================================================ - -//============================================================ -// mach_cycle_counter -//============================================================ -static osd_ticks_t mach_cycle_counter(void) -{ - return mach_absolute_time(); -} - -//============================================================ -// osd_cycles -//============================================================ - -osd_ticks_t osd_ticks(void) -{ - return (*cycle_counter)(); -} - - -//============================================================ -// osd_ticks_per_second -//============================================================ - -osd_ticks_t osd_ticks_per_second(void) -{ - if (ticks_per_second == 0) - { - // if we haven't computed the value yet, there's no time like the present - init_cycle_counter(); - } - return ticks_per_second; -} - - - -//============================================================ -// osd_sleep -//============================================================ - -void osd_sleep(osd_ticks_t duration) -{ - UINT32 msec; - - // make sure we've computed ticks_per_second - if (ticks_per_second == 0) - (void)osd_ticks(); - - // convert to milliseconds, rounding down - msec = (UINT32)(duration * 1000 / ticks_per_second); - - // only sleep if at least 2 full milliseconds - if (msec >= 2) - { - // take a couple of msecs off the top for good measure - msec -= 2; - usleep(msec*1000); - } -} - //============================================================ // osd_get_clipboard_text -- cgit v1.2.3