xref: /qemu/scripts/tracetool/vcpu.py (revision b2a3cbb8)
1# -*- coding: utf-8 -*-
2
3"""
4Generic management for the 'vcpu' property.
5
6"""
7
8__author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
9__copyright__  = "Copyright 2016, Lluís Vilanova <vilanova@ac.upc.edu>"
10__license__    = "GPL version 2 or (at your option) any later version"
11
12__maintainer__ = "Stefan Hajnoczi"
13__email__      = "stefanha@redhat.com"
14
15
16from tracetool import Arguments, try_import
17
18
19def transform_event(event):
20    """Transform event to comply with the 'vcpu' property (if present)."""
21    if "vcpu" in event.properties:
22        event.args = Arguments([("void *", "__cpu"), event.args])
23        fmt = "\"cpu=%p \""
24        event.fmt = fmt + event.fmt
25    return event
26
27
28def transform_args(format, event, *args, **kwargs):
29    """Transforms the arguments to suit the specified format.
30
31    The format module must implement function 'vcpu_args', which receives the
32    implicit arguments added by the 'vcpu' property, and must return suitable
33    arguments for the given format.
34
35    The function is only called for events with the 'vcpu' property.
36
37    Parameters
38    ==========
39    format : str
40        Format module name.
41    event : Event
42    args, kwargs
43        Passed to 'vcpu_transform_args'.
44
45    Returns
46    =======
47    Arguments
48        The transformed arguments, including the non-implicit ones.
49
50    """
51    if "vcpu" in event.properties:
52        ok, func = try_import("tracetool.format." + format,
53                              "vcpu_transform_args")
54        assert ok
55        assert func
56        return Arguments([func(event.args[:1], *args, **kwargs),
57                          event.args[1:]])
58    else:
59        return event.args
60