mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 10:11:08 +00:00
corrected the rdtsc code, it actually, um, works now ;-)
Original commit message from CVS: corrected the rdtsc code, it actually, um, works now ;-)
This commit is contained in:
parent
6df5d52f72
commit
3cfd332a23
1 changed files with 4 additions and 20 deletions
24
test/lat.c
24
test/lat.c
|
@ -1,24 +1,8 @@
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
__inline__ void lat_read_tsc(guint64 *dst) {
|
#define rdtscll(result) \
|
||||||
//#ifdef HAVE_RDTS
|
__asm__ __volatile__("rdtsc" : "=A" (result) : /* No inputs */ )
|
||||||
/*
|
|
||||||
__asm__ __volatile__
|
|
||||||
("rdtsc"
|
|
||||||
: "=a" (*(guint32 *)dst), "=d" (*(((guint32 *)dst) + 1))
|
|
||||||
:
|
|
||||||
: "eax", "edx");
|
|
||||||
*/
|
|
||||||
__asm__ __volatile__
|
|
||||||
("rdtsc"
|
|
||||||
: "=a" (*(guint32 *)dst), "=d" (*(((guint32 *)dst) + 1))
|
|
||||||
:
|
|
||||||
);
|
|
||||||
//#else
|
|
||||||
// *dst = 0;
|
|
||||||
//#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static guint64 max = 0, min = -1, total = 0;
|
static guint64 max = 0, min = -1, total = 0;
|
||||||
static guint count = 0;
|
static guint count = 0;
|
||||||
|
@ -28,7 +12,7 @@ static guint mhz = 0;
|
||||||
|
|
||||||
void handoff_src(GstElement *src, GstBuffer *buf, gpointer user_data) {
|
void handoff_src(GstElement *src, GstBuffer *buf, gpointer user_data) {
|
||||||
guint64 start;
|
guint64 start;
|
||||||
lat_read_tsc(&start);
|
rdtscll(start);
|
||||||
GST_BUFFER_TIMESTAMP(buf) = start;
|
GST_BUFFER_TIMESTAMP(buf) = start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +20,7 @@ void handoff_sink(GstElement *sink, GstBuffer *buf, gpointer user_data) {
|
||||||
guint64 end, d, avg;
|
guint64 end, d, avg;
|
||||||
guint avg_ns;
|
guint avg_ns;
|
||||||
|
|
||||||
lat_read_tsc(&end);
|
rdtscll(end);
|
||||||
d = end - GST_BUFFER_TIMESTAMP(buf);
|
d = end - GST_BUFFER_TIMESTAMP(buf);
|
||||||
if (d > max) max = d;
|
if (d > max) max = d;
|
||||||
if (d < min) min = d;
|
if (d < min) min = d;
|
||||||
|
|
Loading…
Reference in a new issue