From 2a0fe10e3e5dd6da617d9f7f675e0778be957314 Mon Sep 17 00:00:00 2001 From: Darren Salt Date: Fri, 18 Nov 2011 18:22:07 +0000 Subject: Use POSIX timers where available for determining which memcpy method to use. --- src/xine-utils/memcpy.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/xine-utils/memcpy.c b/src/xine-utils/memcpy.c index 9056749e2..fa568c485 100644 --- a/src/xine-utils/memcpy.c +++ b/src/xine-utils/memcpy.c @@ -408,7 +408,18 @@ static struct { { NULL, NULL, 0, 0 } }; -#if (defined(ARCH_X86) || defined(ARCH_X86_64)) && defined(HAVE_SYS_TIMES_H) +#ifdef HAVE_POSIX_TIMERS +/* Prefer clock_gettime() where available. */ +static int64_t _x_gettime(void) +{ + struct timespec tm; + return (clock_gettime (CLOCK_THREAD_CPUTIME_ID, &tm) == -1) + ? times (NULL) + : (int64_t)tm.tv_sec * 1e9 + tm.tv_nsec; +} +# define rdtsc(x) _x_gettime() + +#elif (defined(ARCH_X86) || defined(ARCH_X86_64)) && defined(HAVE_SYS_TIMES_H) static int64_t rdtsc(int config_flags) { int64_t x; @@ -511,6 +522,12 @@ void xine_probe_fast_memcpy(xine_t *xine) memset(buf1,0,BUFSIZE); memset(buf2,0,BUFSIZE); + /* some initial activity to ensure that we're not running slowly :-) */ + for(j=0;j<50;j++) { + memcpy_method[i].function(buf2,buf1,BUFSIZE); + memcpy_method[i].function(buf1,buf2,BUFSIZE); + } + for(i=1; memcpy_method[i].name; i++) { if( (config_flags & memcpy_method[i].cpu_require) != -- cgit v1.2.3