-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Tom Zanussi
authored and
Ingo Molnar
committed
Nov 28, 2009
1 parent
394869c
commit ce29c74
Showing
10 changed files
with
807 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 16c632de64a74644a46e7636db26b2cfb530ca13 | ||
refs/heads/master: bcefe12eff5dca6fdfa94ed85e5bee66380d5cd9 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
use 5.010000; | ||
use ExtUtils::MakeMaker; | ||
# See lib/ExtUtils/MakeMaker.pm for details of how to influence | ||
# the contents of the Makefile that is written. | ||
WriteMakefile( | ||
NAME => 'Perf::Trace::Util', | ||
VERSION_FROM => 'lib/Perf/Trace/Util.pm', # finds $VERSION | ||
PREREQ_PM => {}, # e.g., Module::Name => 1.1 | ||
($] >= 5.005 ? ## Add these new keywords supported since 5.005 | ||
(ABSTRACT_FROM => 'lib/Perf/Trace/Util.pm', # retrieve abstract from module | ||
AUTHOR => 'Tom Zanussi <tzanussi@gmail.com>') : ()), | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
Perf-Trace-Util version 0.01 | ||
============================ | ||
|
||
This module contains utility functions for use with perf trace. | ||
|
||
INSTALLATION | ||
|
||
Building perf with perf trace Perl scripting should install this | ||
module in the right place. | ||
|
||
You should make sure libperl is installed first e.g. apt-get install | ||
libperl-dev. | ||
|
||
DEPENDENCIES | ||
|
||
This module requires these other modules and libraries: | ||
|
||
blah blah blah | ||
|
||
COPYRIGHT AND LICENCE | ||
|
||
Put the correct copyright and licence information here. | ||
|
||
Copyright (C) 2009 by Tom Zanussi <tzanussi@gmail.com> | ||
|
||
This library is free software; you can redistribute it and/or modify | ||
it under the same terms as Perl itself, either Perl version 5.10.0 or, | ||
at your option, any later version of Perl 5 you may have available. | ||
|
||
Alternatively, this software may be distributed under the terms of the | ||
GNU General Public License ("GPL") version 2 as published by the Free | ||
Software Foundation. | ||
|
||
|
||
|
157 changes: 157 additions & 0 deletions
157
trunk/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Core.pm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
package Perf::Trace::Core; | ||
|
||
use 5.010000; | ||
use strict; | ||
use warnings; | ||
|
||
require Exporter; | ||
|
||
our @ISA = qw(Exporter); | ||
|
||
our %EXPORT_TAGS = ( 'all' => [ qw( | ||
) ] ); | ||
|
||
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); | ||
|
||
our @EXPORT = qw( | ||
define_flag_field define_flag_value flag_str dump_flag_fields | ||
define_symbolic_field define_symbolic_value symbol_str dump_symbolic_fields | ||
); | ||
|
||
our $VERSION = '0.01'; | ||
|
||
my %flag_fields; | ||
my %symbolic_fields; | ||
|
||
sub flag_str | ||
{ | ||
my ($event_name, $field_name, $value) = @_; | ||
|
||
my $string; | ||
|
||
if ($flag_fields{$event_name}{$field_name}) { | ||
my $print_delim = 0; | ||
foreach my $idx (sort {$a <=> $b} keys %{$flag_fields{$event_name}{$field_name}{"values"}}) { | ||
if (!$value && !$idx) { | ||
$string .= "$flag_fields{$event_name}{$field_name}{'values'}{$idx}"; | ||
last; | ||
} | ||
if ($idx && ($value & $idx) == $idx) { | ||
if ($print_delim && $flag_fields{$event_name}{$field_name}{'delim'}) { | ||
$string .= " $flag_fields{$event_name}{$field_name}{'delim'} "; | ||
} | ||
$string .= "$flag_fields{$event_name}{$field_name}{'values'}{$idx}"; | ||
$print_delim = 1; | ||
$value &= ~$idx; | ||
} | ||
} | ||
} | ||
|
||
return $string; | ||
} | ||
|
||
sub define_flag_field | ||
{ | ||
my ($event_name, $field_name, $delim) = @_; | ||
|
||
$flag_fields{$event_name}{$field_name}{"delim"} = $delim; | ||
} | ||
|
||
sub define_flag_value | ||
{ | ||
my ($event_name, $field_name, $value, $field_str) = @_; | ||
|
||
$flag_fields{$event_name}{$field_name}{"values"}{$value} = $field_str; | ||
} | ||
|
||
sub dump_flag_fields | ||
{ | ||
for my $event (keys %flag_fields) { | ||
print "event $event:\n"; | ||
for my $field (keys %{$flag_fields{$event}}) { | ||
print " field: $field:\n"; | ||
print " delim: $flag_fields{$event}{$field}{'delim'}\n"; | ||
foreach my $idx (sort {$a <=> $b} keys %{$flag_fields{$event}{$field}{"values"}}) { | ||
print " value $idx: $flag_fields{$event}{$field}{'values'}{$idx}\n"; | ||
} | ||
} | ||
} | ||
} | ||
|
||
sub symbol_str | ||
{ | ||
my ($event_name, $field_name, $value) = @_; | ||
|
||
if ($symbolic_fields{$event_name}{$field_name}) { | ||
foreach my $idx (sort {$a <=> $b} keys %{$symbolic_fields{$event_name}{$field_name}{"values"}}) { | ||
if (!$value && !$idx) { | ||
return "$symbolic_fields{$event_name}{$field_name}{'values'}{$idx}"; | ||
last; | ||
} | ||
if ($value == $idx) { | ||
return "$symbolic_fields{$event_name}{$field_name}{'values'}{$idx}"; | ||
} | ||
} | ||
} | ||
|
||
return undef; | ||
} | ||
|
||
sub define_symbolic_field | ||
{ | ||
my ($event_name, $field_name) = @_; | ||
|
||
# nothing to do, really | ||
} | ||
|
||
sub define_symbolic_value | ||
{ | ||
my ($event_name, $field_name, $value, $field_str) = @_; | ||
|
||
$symbolic_fields{$event_name}{$field_name}{"values"}{$value} = $field_str; | ||
} | ||
|
||
sub dump_symbolic_fields | ||
{ | ||
for my $event (keys %symbolic_fields) { | ||
print "event $event:\n"; | ||
for my $field (keys %{$symbolic_fields{$event}}) { | ||
print " field: $field:\n"; | ||
foreach my $idx (sort {$a <=> $b} keys %{$symbolic_fields{$event}{$field}{"values"}}) { | ||
print " value $idx: $symbolic_fields{$event}{$field}{'values'}{$idx}\n"; | ||
} | ||
} | ||
} | ||
} | ||
|
||
1; | ||
__END__ | ||
=head1 NAME | ||
Perf::Trace::Core - Perl extension for perf trace | ||
=head1 SYNOPSIS | ||
use Perf::Trace::Core | ||
=head1 SEE ALSO | ||
Perf (trace) documentation | ||
=head1 AUTHOR | ||
Tom Zanussi, E<lt>tzanussi@gmail.com<gt> | ||
=head1 COPYRIGHT AND LICENSE | ||
Copyright (C) 2009 by Tom Zanussi | ||
This library is free software; you can redistribute it and/or modify | ||
it under the same terms as Perl itself, either Perl version 5.10.0 or, | ||
at your option, any later version of Perl 5 you may have available. | ||
Alternatively, this software may be distributed under the terms of the | ||
GNU General Public License ("GPL") version 2 as published by the Free | ||
Software Foundation. | ||
=cut |
88 changes: 88 additions & 0 deletions
88
trunk/tools/perf/scripts/perl/Perf-Trace-Util/lib/Perf/Trace/Util.pm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
package Perf::Trace::Util; | ||
|
||
use 5.010000; | ||
use strict; | ||
use warnings; | ||
|
||
require Exporter; | ||
|
||
our @ISA = qw(Exporter); | ||
|
||
our %EXPORT_TAGS = ( 'all' => [ qw( | ||
) ] ); | ||
|
||
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); | ||
|
||
our @EXPORT = qw( | ||
avg nsecs nsecs_secs nsecs_nsecs nsecs_usecs print_nsecs | ||
); | ||
|
||
our $VERSION = '0.01'; | ||
|
||
sub avg | ||
{ | ||
my ($total, $n) = @_; | ||
|
||
return $total / $n; | ||
} | ||
|
||
my $NSECS_PER_SEC = 1000000000; | ||
|
||
sub nsecs | ||
{ | ||
my ($secs, $nsecs) = @_; | ||
|
||
return $secs * $NSECS_PER_SEC + $nsecs; | ||
} | ||
|
||
sub nsecs_secs { | ||
my ($nsecs) = @_; | ||
|
||
return $nsecs / $NSECS_PER_SEC; | ||
} | ||
|
||
sub nsecs_nsecs { | ||
my ($nsecs) = @_; | ||
|
||
return $nsecs - nsecs_secs($nsecs); | ||
} | ||
|
||
sub nsecs_str { | ||
my ($nsecs) = @_; | ||
|
||
my $str = sprintf("%5u.%09u", nsecs_secs($nsecs), nsecs_nsecs($nsecs)); | ||
|
||
return $str; | ||
} | ||
|
||
1; | ||
__END__ | ||
=head1 NAME | ||
Perf::Trace::Util - Perl extension for perf trace | ||
=head1 SYNOPSIS | ||
use Perf::Trace::Util; | ||
=head1 SEE ALSO | ||
Perf (trace) documentation | ||
=head1 AUTHOR | ||
Tom Zanussi, E<lt>tzanussi@gmail.com<gt> | ||
=head1 COPYRIGHT AND LICENSE | ||
Copyright (C) 2009 by Tom Zanussi | ||
This library is free software; you can redistribute it and/or modify | ||
it under the same terms as Perl itself, either Perl version 5.10.0 or, | ||
at your option, any later version of Perl 5 you may have available. | ||
Alternatively, this software may be distributed under the terms of the | ||
GNU General Public License ("GPL") version 2 as published by the Free | ||
Software Foundation. | ||
=cut |
Oops, something went wrong.