| # -*- 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 |