trace: Multi-backend tracing

Adds support to compile QEMU with multiple tracing backends at the same time.

For example, you can compile QEMU with:

  $ ./configure --enable-trace-backends=ftrace,dtrace

Where 'ftrace' can be handy for having an in-flight record of events, and 'dtrace' can be later used to extract more information from the system.

This patch allows having both available without recompiling QEMU.

Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Lluís Vilanova 2014-05-27 15:02:14 +02:00 committed by Stefan Hajnoczi
parent 82432638eb
commit 5b808275f3
20 changed files with 152 additions and 233 deletions

View file

@ -368,22 +368,6 @@ void st_flush_trace_buffer(void)
flush_trace_file(true);
}
void trace_print_events(FILE *stream, fprintf_function stream_printf)
{
unsigned int i;
for (i = 0; i < trace_event_count(); i++) {
TraceEvent *ev = trace_event_id(i);
stream_printf(stream, "%s [Event ID %u] : state %u\n",
trace_event_get_name(ev), i, trace_event_get_state_dynamic(ev));
}
}
void trace_event_set_state_dynamic_backend(TraceEvent *ev, bool state)
{
ev->dstate = state;
}
/* Helper function to create a thread with signals blocked. Use glib's
* portable threads since QEMU abstractions cannot be used due to reentrancy in
* the tracer. Also note the signal masking on POSIX hosts so that the thread
@ -412,7 +396,7 @@ static GThread *trace_thread_create(GThreadFunc fn)
return thread;
}
bool trace_backend_init(const char *events, const char *file)
bool st_init(const char *file)
{
GThread *thread;
@ -430,7 +414,6 @@ bool trace_backend_init(const char *events, const char *file)
}
atexit(st_flush_trace_buffer);
trace_backend_init_events(events);
st_set_trace_file(file);
return true;
}