summary refs log tree commit diff stats
path: root/scripts/tracetool/backend/__init__.py
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/backend/__init__.py
parent82432638ebeedda8a2e18838b6fbef4b14a94f31 (diff)
downloadfocaccia-qemu-5b808275f3bbe8cc95bb9301f4d5a41331d0e0e6.tar.gz
focaccia-qemu-5b808275f3bbe8cc95bb9301f4d5a41331d0e0e6.zip
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/backend/__init__.py')
-rw-r--r--scripts/tracetool/backend/__init__.py15
1 files changed, 8 insertions, 7 deletions
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)