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

@@ -99,17 +99,18 @@ def exists(name):
class Wrapper:
def __init__(self, backend, format):
self._backend = backend.replace("-", "_")
def __init__(self, backends, format):
self._backends = [backend.replace("-", "_") for backend in backends]
self._format = format.replace("-", "_")
assert exists(self._backend)
assert all(exists(backend) for backend in self._backends)
assert tracetool.format.exists(self._format)
def _run_function(self, name, *args, **kwargs):
func = tracetool.try_import("tracetool.backend." + self._backend,
name % self._format, None)[1]
if func is not None:
func(*args, **kwargs)
for backend in self._backends:
func = tracetool.try_import("tracetool.backend." + backend,
name % self._format, None)[1]
if func is not None:
func(*args, **kwargs)
def generate_begin(self, events):
self._run_function("generate_%s_begin", events)