aboutsummaryrefslogtreecommitdiff
path: root/audio/jack/files
diff options
context:
space:
mode:
authorTilman Keskinoz <arved@FreeBSD.org>2004-03-10 11:43:58 +0000
committerTilman Keskinoz <arved@FreeBSD.org>2004-03-10 11:43:58 +0000
commit1903ee6f576697eaec8869f7eefe58aa682a368a (patch)
tree48a32177d4bc1823a9c2381fbef6c241e057e11c /audio/jack/files
parent83d2ee1f011e567ade63bb6fdbba1ec3d0104633 (diff)
downloadports-1903ee6f576697eaec8869f7eefe58aa682a368a.tar.gz
ports-1903ee6f576697eaec8869f7eefe58aa682a368a.zip
Fix Mhz detection. Thanks to Simon Barner for pointing to example code.
Obtained from: mplayer
Notes
Notes: svn path=/head/; revision=103518
Diffstat (limited to 'audio/jack/files')
-rw-r--r--audio/jack/files/patch-client.c51
1 files changed, 50 insertions, 1 deletions
diff --git a/audio/jack/files/patch-client.c b/audio/jack/files/patch-client.c
index 18b68558a6f1..bd2fe8768ddf 100644
--- a/audio/jack/files/patch-client.c
+++ b/audio/jack/files/patch-client.c
@@ -1,5 +1,5 @@
--- libjack/client.c.orig Sun Jan 11 20:07:14 2004
-+++ libjack/client.c Tue Mar 9 20:19:15 2004
++++ libjack/client.c Wed Mar 10 12:32:47 2004
@@ -26,20 +26,23 @@
#else
#include <sys/poll.h>
@@ -55,3 +55,52 @@
/* a bigger stack makes the application crash... */
#define BIG_ENOUGH_STACK 10000
#else
+@@ -1748,6 +1758,15 @@
+ return client->thread_id;
+ }
+
++static int64_t
++rdtsc(void)
++{
++ unsigned int i, j;
++#define RDTSC ".byte 0x0f, 0x31; "
++ asm(RDTSC : "=a"(i), "=d"(j) : );
++ return ((int64_t)j<<32) + (int64_t)i;
++}
++
+ #if defined(__APPLE__) && defined(__POWERPC__)
+
+ double __jack_time_ratio;
+@@ -1763,6 +1782,7 @@
+ jack_time_t
+ jack_get_mhz (void)
+ {
++#ifndef __FreeBSD__
+ FILE *f = fopen("/proc/cpuinfo", "r");
+ if (f == 0)
+ {
+@@ -1803,6 +1823,24 @@
+ return (jack_time_t)mhz;
+ }
+ }
++
++#else
++ int64_t tsc_start, tsc_end;
++ struct timeval tv_start, tv_end;
++ int usec_delay;
++
++ tsc_start = rdtsc();
++ gettimeofday(&tv_start, NULL);
++ usleep(100000);
++ tsc_end = rdtsc();
++ gettimeofday(&tv_end, NULL);
++
++ usec_delay = 1000000 * (tv_end.tv_sec - tv_start.tv_sec)
++ + (tv_end.tv_usec - tv_start.tv_usec);
++
++ printf("cpu MHz\t\t: %.3f\n",
++ (double)(tsc_end-tsc_start) / usec_delay);
++#endif
+ }
+
+ jack_time_t __jack_cpu_mhz;