• Robert Richter's avatar
    perf script: Add generic perl handler to process events · 37a058ea
    Robert Richter authored
    The current perf scripting facility only supports tracepoints. This
    patch implements a generic perl handler to support other events than
    tracepoints too.
    
    This patch introduces a function process_event() that is called by perf
    for each sample. The function is called with byte streams as arguments
    containing information about the event, its attributes, the sample and
    raw data. Perl's unpack() function can easily be used for byte decoding.
    The following is the default implementation for process_event() that can
    also be generated with perf script:
    
     # Packed byte string args of process_event():
     #
     # $event:       union perf_event        util/event.h
     # $attr:        struct perf_event_attr  linux/perf_event.h
     # $sample:      struct perf_sample      util/event.h
     # $raw_data:    perf_sample->raw_data   util/event.h
    
     sub process_event
     {
             my ($event, $attr, $sample, $raw_data) = @_;
    
             my @event       = unpack("LSS", $event);
             my @attr        = unpack("LLQQQQQLLQQ", $attr);
             my @sample      = unpack("QLLQQQQQLL", $sample);
             my @raw_data    = unpack("C*", $raw_data);
    
             use Data::Dumper;
             print Dumper \@event, \@attr, \@sample, \@raw_data;
     }
    
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/r/1323969824-9711-4-git-send-email-robert.richter@amd.comSigned-off-by: default avatarRobert Richter <robert.richter@amd.com>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    37a058ea
trace-event-perl.c 15.1 KB