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