Remove ovni_clock_update()
The clock is now managed by the user, using the ovni_clock_now() function to sample the current value and ovni_ev_set_clock() to set the event clock timestamp. This change allows events with custom clock values.
This commit is contained in:
parent
88d79aec8e
commit
d79b887182
39
ovni.c
39
ovni.c
@ -313,7 +313,7 @@ uint64_t rdtsc(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint64_t
|
uint64_t
|
||||||
ovni_get_clock(void)
|
ovni_clock_now(void)
|
||||||
{
|
{
|
||||||
struct timespec tp;
|
struct timespec tp;
|
||||||
uint64_t ns = 1000LL * 1000LL * 1000LL;
|
uint64_t ns = 1000LL * 1000LL * 1000LL;
|
||||||
@ -331,21 +331,12 @@ ovni_get_clock(void)
|
|||||||
#endif /* ENABLE_SLOW_CHECKS */
|
#endif /* ENABLE_SLOW_CHECKS */
|
||||||
|
|
||||||
raw = tp.tv_sec * ns + tp.tv_nsec;
|
raw = tp.tv_sec * ns + tp.tv_nsec;
|
||||||
rthread.clockvalue = (uint64_t) raw;
|
|
||||||
|
|
||||||
#endif /* USE_RDTSC */
|
#endif /* USE_RDTSC */
|
||||||
|
|
||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sets the current time so that all subsequent events have the new
|
|
||||||
* timestamp */
|
|
||||||
void
|
|
||||||
ovni_clock_update(void)
|
|
||||||
{
|
|
||||||
rthread.clockvalue = ovni_get_clock();
|
|
||||||
}
|
|
||||||
|
|
||||||
//static void
|
//static void
|
||||||
//hexdump(uint8_t *buf, size_t size)
|
//hexdump(uint8_t *buf, size_t size)
|
||||||
//{
|
//{
|
||||||
@ -400,10 +391,10 @@ flush_evbuf(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
ovni_ev_set_clock(struct ovni_ev *ev)
|
ovni_ev_set_clock(struct ovni_ev *ev, uint64_t clock)
|
||||||
{
|
{
|
||||||
ev->header.clock = rthread.clockvalue;
|
ev->header.clock = clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t
|
uint64_t
|
||||||
@ -483,14 +474,12 @@ ovni_flush(void)
|
|||||||
assert(rthread.ready);
|
assert(rthread.ready);
|
||||||
assert(rproc.ready);
|
assert(rproc.ready);
|
||||||
|
|
||||||
ovni_clock_update();
|
ovni_ev_set_clock(&pre, ovni_clock_now());
|
||||||
ovni_ev_set_clock(&pre);
|
|
||||||
ovni_ev_set_mcv(&pre, "OF[");
|
ovni_ev_set_mcv(&pre, "OF[");
|
||||||
|
|
||||||
ret = flush_evbuf();
|
ret = flush_evbuf();
|
||||||
|
|
||||||
ovni_clock_update();
|
ovni_ev_set_clock(&post, ovni_clock_now());
|
||||||
ovni_ev_set_clock(&post);
|
|
||||||
ovni_ev_set_mcv(&post, "OF]");
|
ovni_ev_set_mcv(&post, "OF]");
|
||||||
|
|
||||||
/* Add the two flush events */
|
/* Add the two flush events */
|
||||||
@ -534,9 +523,9 @@ ovni_ev_add_jumbo(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize)
|
|||||||
if(rthread.evlen + totalsize >= OVNI_MAX_EV_BUF)
|
if(rthread.evlen + totalsize >= OVNI_MAX_EV_BUF)
|
||||||
{
|
{
|
||||||
/* Measure the flush times */
|
/* Measure the flush times */
|
||||||
t0 = ovni_get_clock();
|
t0 = ovni_clock_now();
|
||||||
flush_evbuf();
|
flush_evbuf();
|
||||||
t1 = ovni_get_clock();
|
t1 = ovni_clock_now();
|
||||||
flushed = 1;
|
flushed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,9 +544,6 @@ ovni_ev_add_jumbo(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize)
|
|||||||
{
|
{
|
||||||
/* Emit the flush events *after* the user event */
|
/* Emit the flush events *after* the user event */
|
||||||
add_flush_events(t0, t1);
|
add_flush_events(t0, t1);
|
||||||
|
|
||||||
/* Set the current clock to the last event */
|
|
||||||
rthread.clockvalue = t1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -573,9 +559,9 @@ ovni_ev_add(struct ovni_ev *ev)
|
|||||||
if(rthread.evlen + size >= OVNI_MAX_EV_BUF)
|
if(rthread.evlen + size >= OVNI_MAX_EV_BUF)
|
||||||
{
|
{
|
||||||
/* Measure the flush times */
|
/* Measure the flush times */
|
||||||
t0 = ovni_get_clock();
|
t0 = ovni_clock_now();
|
||||||
flush_evbuf();
|
flush_evbuf();
|
||||||
t1 = ovni_get_clock();
|
t1 = ovni_clock_now();
|
||||||
flushed = 1;
|
flushed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -586,22 +572,17 @@ ovni_ev_add(struct ovni_ev *ev)
|
|||||||
{
|
{
|
||||||
/* Emit the flush events *after* the user event */
|
/* Emit the flush events *after* the user event */
|
||||||
add_flush_events(t0, t1);
|
add_flush_events(t0, t1);
|
||||||
|
|
||||||
/* Set the current clock to the last event */
|
|
||||||
rthread.clockvalue = t1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ovni_ev_jumbo_emit(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize)
|
ovni_ev_jumbo_emit(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize)
|
||||||
{
|
{
|
||||||
ovni_ev_set_clock(ev);
|
|
||||||
ovni_ev_add_jumbo(ev, buf, bufsize);
|
ovni_ev_add_jumbo(ev, buf, bufsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ovni_ev_emit(struct ovni_ev *ev)
|
ovni_ev_emit(struct ovni_ev *ev)
|
||||||
{
|
{
|
||||||
ovni_ev_set_clock(ev);
|
|
||||||
ovni_ev_add(ev);
|
ovni_ev_add(ev);
|
||||||
}
|
}
|
||||||
|
15
ovni.h
15
ovni.h
@ -101,9 +101,6 @@ struct ovni_rthread {
|
|||||||
/* Current thread id */
|
/* Current thread id */
|
||||||
pid_t tid;
|
pid_t tid;
|
||||||
|
|
||||||
/* Clock value of the events being emitted */
|
|
||||||
uint64_t clockvalue;
|
|
||||||
|
|
||||||
/* Stream trace file descriptor */
|
/* Stream trace file descriptor */
|
||||||
int streamfd;
|
int streamfd;
|
||||||
|
|
||||||
@ -143,13 +140,16 @@ void ovni_thread_free(void);
|
|||||||
|
|
||||||
int ovni_thread_isready(void);
|
int ovni_thread_isready(void);
|
||||||
|
|
||||||
void ovni_clock_update(void);
|
|
||||||
|
|
||||||
void ovni_ev_set_mcv(struct ovni_ev *ev, const char *mcv);
|
void ovni_ev_set_mcv(struct ovni_ev *ev, const char *mcv);
|
||||||
|
|
||||||
|
/* Gets the event clock in ns */
|
||||||
uint64_t ovni_ev_get_clock(const struct ovni_ev *ev);
|
uint64_t ovni_ev_get_clock(const struct ovni_ev *ev);
|
||||||
|
|
||||||
uint64_t ovni_get_clock(void);
|
/* Sets the event clock in ns */
|
||||||
|
void ovni_ev_set_clock(struct ovni_ev *ev, uint64_t clock);
|
||||||
|
|
||||||
|
/* Returns the current value of the ovni clock in ns */
|
||||||
|
uint64_t ovni_clock_now(void);
|
||||||
|
|
||||||
void ovni_payload_add(struct ovni_ev *ev, const uint8_t *buf, int size);
|
void ovni_payload_add(struct ovni_ev *ev, const uint8_t *buf, int size);
|
||||||
|
|
||||||
@ -159,7 +159,8 @@ int ovni_payload_size(const struct ovni_ev *ev);
|
|||||||
|
|
||||||
void ovni_add_cpu(int index, int phyid);
|
void ovni_add_cpu(int index, int phyid);
|
||||||
|
|
||||||
/* Set the current clock in the event and queue it */
|
/* Adds the event to the events buffer. The buffer is flushed first if the event
|
||||||
|
* doesn't fit in the buffer. */
|
||||||
void ovni_ev_emit(struct ovni_ev *ev);
|
void ovni_ev_emit(struct ovni_ev *ev);
|
||||||
void ovni_ev_jumbo_emit(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize);
|
void ovni_ev_jumbo_emit(struct ovni_ev *ev, const uint8_t *buf, uint32_t bufsize);
|
||||||
|
|
||||||
|
@ -56,8 +56,8 @@ init(void)
|
|||||||
static void emit(uint8_t *buf, size_t size)
|
static void emit(uint8_t *buf, size_t size)
|
||||||
{
|
{
|
||||||
struct ovni_ev ev = {0};
|
struct ovni_ev ev = {0};
|
||||||
ovni_clock_update();
|
|
||||||
ovni_ev_set_mcv(&ev, "O$$");
|
ovni_ev_set_mcv(&ev, "O$$");
|
||||||
|
ovni_ev_set_clock(&ev, ovni_clock_now());
|
||||||
ovni_ev_jumbo_emit(&ev, buf, size);
|
ovni_ev_jumbo_emit(&ev, buf, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
for(i=0; i<n; i++)
|
for(i=0; i<n; i++)
|
||||||
{
|
{
|
||||||
ovni_clock_update();
|
ovni_ev_set_clock(&ev, ovni_clock_now());
|
||||||
ovni_ev_emit(&ev);
|
ovni_ev_emit(&ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user