File Index
Files and directories
Sign in
FILE

Core.pm

File preview with syntax highlighting.

linux-6.19.14/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Core.pm PERL
  1package Perf::Trace::Core;
  2
  3use 5.010000;
  4use strict;
  5use warnings;
  6
  7require Exporter;
  8
  9our @ISA = qw(Exporter);
 10
 11our %EXPORT_TAGS = ( 'all' => [ qw(
 12) ] );
 13
 14our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
 15
 16our @EXPORT = qw(
 17define_flag_field define_flag_value flag_str dump_flag_fields
 18define_symbolic_field define_symbolic_value symbol_str dump_symbolic_fields
 19trace_flag_str
 20);
 21
 22our $VERSION = '0.01';
 23
 24my %trace_flags = (0x00 => "NONE",
 25		   0x01 => "IRQS_OFF",
 26		   0x02 => "IRQS_NOSUPPORT",
 27		   0x04 => "NEED_RESCHED",
 28		   0x08 => "HARDIRQ",
 29		   0x10 => "SOFTIRQ");
 30
 31sub trace_flag_str
 32{
 33    my ($value) = @_;
 34
 35    my $string;
 36
 37    my $print_delim = 0;
 38
 39    foreach my $idx (sort {$a <=> $b} keys %trace_flags) {
 40	if (!$value && !$idx) {
 41	    $string .= "NONE";
 42	    last;
 43	}
 44
 45	if ($idx && ($value & $idx) == $idx) {
 46	    if ($print_delim) {
 47		$string .= " | ";
 48	    }
 49	    $string .= "$trace_flags{$idx}";
 50	    $print_delim = 1;
 51	    $value &= ~$idx;
 52	}
 53    }
 54
 55    return $string;
 56}
 57
 58my %flag_fields;
 59my %symbolic_fields;
 60
 61sub flag_str
 62{
 63    my ($event_name, $field_name, $value) = @_;
 64
 65    my $string;
 66
 67    if ($flag_fields{$event_name}{$field_name}) {
 68	my $print_delim = 0;
 69	foreach my $idx (sort {$a <=> $b} keys %{$flag_fields{$event_name}{$field_name}{"values"}}) {
 70	    if (!$value && !$idx) {
 71		$string .= "$flag_fields{$event_name}{$field_name}{'values'}{$idx}";
 72		last;
 73	    }
 74	    if ($idx && ($value & $idx) == $idx) {
 75		if ($print_delim && $flag_fields{$event_name}{$field_name}{'delim'}) {
 76		    $string .= " $flag_fields{$event_name}{$field_name}{'delim'} ";
 77		}
 78		$string .= "$flag_fields{$event_name}{$field_name}{'values'}{$idx}";
 79		$print_delim = 1;
 80		$value &= ~$idx;
 81	    }
 82	}
 83    }
 84
 85    return $string;
 86}
 87
 88sub define_flag_field
 89{
 90    my ($event_name, $field_name, $delim) = @_;
 91
 92    $flag_fields{$event_name}{$field_name}{"delim"} = $delim;
 93}
 94
 95sub define_flag_value
 96{
 97    my ($event_name, $field_name, $value, $field_str) = @_;
 98
 99    $flag_fields{$event_name}{$field_name}{"values"}{$value} = $field_str;
100}
101
102sub dump_flag_fields
103{
104    for my $event (keys %flag_fields) {
105	print "event $event:\n";
106	for my $field (keys %{$flag_fields{$event}}) {
107	    print "    field: $field:\n";
108	    print "        delim: $flag_fields{$event}{$field}{'delim'}\n";
109	    foreach my $idx (sort {$a <=> $b} keys %{$flag_fields{$event}{$field}{"values"}}) {
110		print "        value $idx: $flag_fields{$event}{$field}{'values'}{$idx}\n";
111	    }
112	}
113    }
114}
115
116sub symbol_str
117{
118    my ($event_name, $field_name, $value) = @_;
119
120    if ($symbolic_fields{$event_name}{$field_name}) {
121	foreach my $idx (sort {$a <=> $b} keys %{$symbolic_fields{$event_name}{$field_name}{"values"}}) {
122	    if (!$value && !$idx) {
123		return "$symbolic_fields{$event_name}{$field_name}{'values'}{$idx}";
124		last;
125	    }
126	    if ($value == $idx) {
127		return "$symbolic_fields{$event_name}{$field_name}{'values'}{$idx}";
128	    }
129	}
130    }
131
132    return undef;
133}
134
135sub define_symbolic_field
136{
137    my ($event_name, $field_name) = @_;
138
139    # nothing to do, really
140}
141
142sub define_symbolic_value
143{
144    my ($event_name, $field_name, $value, $field_str) = @_;
145
146    $symbolic_fields{$event_name}{$field_name}{"values"}{$value} = $field_str;
147}
148
149sub dump_symbolic_fields
150{
151    for my $event (keys %symbolic_fields) {
152	print "event $event:\n";
153	for my $field (keys %{$symbolic_fields{$event}}) {
154	    print "    field: $field:\n";
155	    foreach my $idx (sort {$a <=> $b} keys %{$symbolic_fields{$event}{$field}{"values"}}) {
156		print "        value $idx: $symbolic_fields{$event}{$field}{'values'}{$idx}\n";
157	    }
158	}
159    }
160}
161
1621;
163__END__
164=head1 NAME
165
166Perf::Trace::Core - Perl extension for perf script
167
168=head1 SYNOPSIS
169
170  use Perf::Trace::Core
171
172=head1 SEE ALSO
173
174Perf (script) documentation
175
176=head1 AUTHOR
177
178Tom Zanussi, E<lt>tzanussi@gmail.com<gt>
179
180=head1 COPYRIGHT AND LICENSE
181
182Copyright (C) 2009 by Tom Zanussi
183
184This library is free software; you can redistribute it and/or modify
185it under the same terms as Perl itself, either Perl version 5.10.0 or,
186at your option, any later version of Perl 5 you may have available.
187
188Alternatively, this software may be distributed under the terms of the
189GNU General Public License ("GPL") version 2 as published by the Free
190Software Foundation.
191
192=cut
~/ Read-only file preview.