diff options
author | Lluís Vilanova <vilanova@ac.upc.edu> | 2014-05-27 15:02:14 +0200 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2014-06-09 15:43:40 +0200 |
commit | 5b808275f3bbe8cc95bb9301f4d5a41331d0e0e6 (patch) | |
tree | d5611a010851864336448529088cd94a9afcf83a /scripts/tracetool | |
parent | 82432638ebeedda8a2e18838b6fbef4b14a94f31 (diff) |
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>
Diffstat (limited to 'scripts/tracetool')
-rw-r--r-- | scripts/tracetool/__init__.py | 24 | ||||
-rw-r--r-- | scripts/tracetool/backend/__init__.py | 15 |
2 files changed, 19 insertions, 20 deletions
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py index eccf5524f3..e8e8edcc4c 100644 --- a/scripts/tracetool/__init__.py +++ b/scripts/tracetool/__init__.py @@ -233,9 +233,9 @@ def try_import(mod_name, attr_name=None, attr_default=None): return False, None -def generate(fevents, format, backend, +def generate(fevents, format, backends, binary=None, probe_prefix=None): - """Generate the output for the given (format, backend) pair. + """Generate the output for the given (format, backends) pair. Parameters ---------- @@ -243,8 +243,8 @@ def generate(fevents, format, backend, Event description file. format : str Output format name. - backend : str - Output backend name. + backends : list + Output backend names. binary : str or None See tracetool.backend.dtrace.BINARY. probe_prefix : str or None @@ -258,15 +258,13 @@ def generate(fevents, format, backend, raise TracetoolError("format not set") if not tracetool.format.exists(format): raise TracetoolError("unknown format: %s" % format) - format = format.replace("-", "_") - - backend = str(backend) - if len(backend) is 0: - raise TracetoolError("backend not set") - if not tracetool.backend.exists(backend): - raise TracetoolError("unknown backend: %s" % backend) - backend = backend.replace("-", "_") - backend = tracetool.backend.Wrapper(backend, format) + + if len(backends) is 0: + raise TracetoolError("no backends specified") + for backend in backends: + if not tracetool.backend.exists(backend): + raise TracetoolError("unknown backend: %s" % backend) + backend = tracetool.backend.Wrapper(backends, format) import tracetool.backend.dtrace tracetool.backend.dtrace.BINARY = binary diff --git a/scripts/tracetool/backend/__init__.py b/scripts/tracetool/backend/__init__.py index 5e36f0415d..5bfa1efc5c 100644 --- a/scripts/tracetool/backend/__init__.py +++ b/scripts/tracetool/backend/__init__.py @@ -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) |