aboutsummaryrefslogtreecommitdiff
path: root/scripts/tracetool
diff options
context:
space:
mode:
authorLluís Vilanova <vilanova@ac.upc.edu>2014-05-27 15:02:14 +0200
committerStefan Hajnoczi <stefanha@redhat.com>2014-06-09 15:43:40 +0200
commit5b808275f3bbe8cc95bb9301f4d5a41331d0e0e6 (patch)
treed5611a010851864336448529088cd94a9afcf83a /scripts/tracetool
parent82432638ebeedda8a2e18838b6fbef4b14a94f31 (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__.py24
-rw-r--r--scripts/tracetool/backend/__init__.py15
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)