| # -*- coding: utf-8 -*- | |
| """ | |
| Generic management for the 'vcpu' property. | |
| """ | |
| __author__ = "Lluís Vilanova <vilanova@ac.upc.edu>" | |
| __copyright__ = "Copyright 2016, Lluís Vilanova <vilanova@ac.upc.edu>" | |
| __license__ = "GPL version 2 or (at your option) any later version" | |
| __maintainer__ = "Stefan Hajnoczi" | |
| __email__ = "stefanha@redhat.com" | |
| from tracetool import Arguments, try_import | |
| def transform_event(event): | |
| """Transform event to comply with the 'vcpu' property (if present).""" | |
| if "vcpu" in event.properties: | |
| event.args = Arguments([("void *", "__cpu"), event.args]) | |
| fmt = "\"cpu=%p \"" | |
| event.fmt = fmt + event.fmt | |
| return event | |
| def transform_args(format, event, *args, **kwargs): | |
| """Transforms the arguments to suit the specified format. | |
| The format module must implement function 'vcpu_args', which receives the | |
| implicit arguments added by the 'vcpu' property, and must return suitable | |
| arguments for the given format. | |
| The function is only called for events with the 'vcpu' property. | |
| Parameters | |
| ========== | |
| format : str | |
| Format module name. | |
| event : Event | |
| args, kwargs | |
| Passed to 'vcpu_transform_args'. | |
| Returns | |
| ======= | |
| Arguments | |
| The transformed arguments, including the non-implicit ones. | |
| """ | |
| if "vcpu" in event.properties: | |
| ok, func = try_import("tracetool.format." + format, | |
| "vcpu_transform_args") | |
| assert ok | |
| assert func | |
| return Arguments([func(event.args[:1], *args, **kwargs), | |
| event.args[1:]]) | |
| else: | |
| return event.args |