Author: tim.bunce
Date: Fri Dec 19 02:14:34 2008
New Revision: 653
Modified:
trunk/lib/Devel/NYTProf/Data.pm
trunk/lib/Devel/NYTProf/FileInfo.pm
trunk/t/test14.rdt
Log:
FileInfo dump() now takes option to not dump internal details.
Data dump callback uses that to not dump internal details of std lib
modules.
Modified: trunk/lib/Devel/NYTProf/Data.pm
==============================================================================
--- trunk/lib/Devel/NYTProf/Data.pm (original)
+++ trunk/lib/Devel/NYTProf/Data.pm Fri Dec 19 02:14:34 2008
@@ -316,20 +316,26 @@
if ($args->{skip_stdlib}) {
+ # for fid_fileinfo don't dump internal details of lib modules
+ if ($path->[0] eq 'fid_fileinfo' && @$path==2) {
+ my $is_lib = ($value->filename =~ $is_lib_regex) ? 1 : 0;
+ return { skip_internal_details => $is_lib };
+ }
+
# skip sub_subinfo data for 'library modules'
if ($path->[0] eq 'sub_subinfo' && @$path==2 && $value->[0]) {
my $fi = $self->fileinfo_of($value->[0]);
- return 0 if $fi->filename =~ $is_lib_regex;
+ return undef if $fi->filename =~ $is_lib_regex;
}
# skip fid_*_time data for 'library modules'
if ($path->[0] =~ /^fid_\w+_time$/ && @$path==2) {
my $fi = $self->fileinfo_of($path->[1]);
- return 0 if $fi->filename =~ $is_lib_regex
+ return undef if $fi->filename =~ $is_lib_regex
or $fi->filename =~ m!^/\.\.\./!;
}
}
- return 1;
+ return {};
};
_dump_elements($startnode, $separator, $filehandle, [], $callback);
@@ -360,23 +366,25 @@
my $key1 = $path->[0] || $keys->[0];
for my $key (@$keys) {
+ next if $key eq 'fid_srclines';
+
my $value = ($is_hash) ? $r->{$key} : $r->[$key];
# skip undef elements in array
next if !defined($value) && !$is_hash;
- next if $callback and not $callback->([ @$path, $key ], $value);
-
- next if $key eq 'fid_srclines';
+ my $dump_opts = {};
+ if ($callback) {
+ $dump_opts = $callback->([ @$path, $key ], $value);
+ next if not $dump_opts;
+ }
my $prefix = "$padN$key$colon";
if (UNIVERSAL::can($value,'dump')) {
- $value->dump($separator, $fh, [ @$path, $key ], $prefix);
+ $value->dump($separator, $fh, [ @$path, $key ], $prefix,
$dump_opts);
}
else {
- $value = $value->_values_for_dump
- if blessed $value && $value->can('_values_for_dump');
# special case some common cases to be more compact:
# fid_*_time [fid][line] = [N,N]
Modified: trunk/lib/Devel/NYTProf/FileInfo.pm
==============================================================================
--- trunk/lib/Devel/NYTProf/FileInfo.pm (original)
+++ trunk/lib/Devel/NYTProf/FileInfo.pm Fri Dec 19 02:14:34 2008
@@ -170,7 +170,8 @@
sub dump {
- my ($self, $separator, $fh, $path, $prefix) = @_;
+ my ($self, $separator, $fh, $path, $prefix, $opts) = @_;
+
my @values = @{$self}[
NYTP_FIDi_FILENAME, NYTP_FIDi_EVAL_FID, NYTP_FIDi_EVAL_LINE,
NYTP_FIDi_FID,
NYTP_FIDi_FLAGS, NYTP_FIDi_FILESIZE, NYTP_FIDi_FILEMTIME
@@ -179,32 +180,34 @@
# include count of number of string eval fids
my $evals = $self->has_evals(0) || [];
- push @values, scalar @$evals;
+ push @values, scalar @$evals; # XXX
printf $fh "%s[ %s ]\n", $prefix, join(" ", map { defined($_) ?
$_ : 'undef' } @values);
- my $subs = $self->subs;
- for my $subname (sort keys %$subs) {
- my $si = $subs->{$subname};
-
- printf $fh "%s%s%s%s%s%s-%s\n",
- $prefix, 'sub', $separator,
- $si->subname(' and '), $separator,
- $si->first_line, $si->last_line;
- }
-
- # return a ref to a hash of { line => { subname => [...] }, ... }
- my $sub_call_lines = $self->sub_call_lines;
- for my $line (sort { $a <=> $b } keys %$sub_call_lines) {
- my $subs_called = $sub_call_lines->{$line};
-
- for my $subname (sort keys %$subs_called) {
- my $sc = $subs_called->{$subname};
-
- printf $fh "%s%s%s%s%s%s%s[ %s ]\n",
- $prefix, 'call', $separator,
- $line, $separator, $subname, $separator,
- join(" ", map { defined($_) ? $_ : 'undef' } @$sc)
+ if (not $opts->{skip_internal_details}) {
+ my $subs = $self->subs;
+ for my $subname (sort keys %$subs) {
+ my $si = $subs->{$subname};
+
+ printf $fh "%s%s%s%s%s%s-%s\n",
+ $prefix, 'sub', $separator,
+ $si->subname(' and '), $separator,
+ $si->first_line, $si->last_line;
+ }
+
+ # { line => { subname => [...] }, ... }
+ my $sub_call_lines = $self->sub_call_lines;
+ for my $line (sort { $a <=> $b } keys %$sub_call_lines) {
+ my $subs_called = $sub_call_lines->{$line};
+
+ for my $subname (sort keys %$subs_called) {
+ my $sc = $subs_called->{$subname};
+
+ printf $fh "%s%s%s%s%s%s%s[ %s ]\n",
+ $prefix, 'call', $separator,
+ $line, $separator, $subname, $separator,
+ join(" ", map { defined($_) ? $_ : 'undef' } @$sc)
+ }
}
}
Modified: trunk/t/test14.rdt
==============================================================================
--- trunk/t/test14.rdt (original)
+++ trunk/t/test14.rdt Fri Dec 19 02:14:34 2008
@@ -10,7 +10,7 @@
attribute total_stmts_discounted 0
attribute total_stmts_duration 0
attribute total_stmts_measured 0
-attribute total_sub_calls 4
+attribute total_sub_calls 2
attribute xs_version 0
fid_block_time 1 17 [ 0 1 ]
fid_block_time 1 18 [ 0 1 ]
@@ -24,13 +24,6 @@
fid_fileinfo 1 call 17 AutoLoader::AUTOLOAD [ 1 0 0 0 0 0 0
]
fid_fileinfo 1 call 18 AutoLoader::AUTOLOAD [ 1 0 0 0 0 0 0
]
fid_fileinfo 2 [ AutoLoader.pm 2 2 0 0 0 ]
-fid_fileinfo 2 sub AutoLoader::AUTOLOAD 21-52
-fid_fileinfo 2 sub AutoLoader::BEGIN 186-186
-fid_fileinfo 2 sub
AutoLoader::__ANON__[/usr/local/perl589/lib/5.8.9/AutoLoader.pm:31] 31-31
-fid_fileinfo 2 sub AutoLoader::find_filename 54-126
-fid_fileinfo 2 sub AutoLoader::import 128-181
-fid_fileinfo 2 sub AutoLoader::unimport 183-193
-fid_fileinfo 2 call 23 AutoLoader::find_filename [ 2 0 0
0 0 0 0 ]
fid_fileinfo 3 [ test14.pm 3 2 0 0 1 ]
fid_fileinfo 3 sub test14::BEGIN 2-2
fid_fileinfo 3 sub test14::bar 10-12
--~--~---------~--~----~------------~-------~--~----~
You've received this message because you are subscribed to
the Devel::NYTProf Development User group.
Group hosted at: http://groups.google.com/group/develnytprof-dev
Project hosted at: http://perl-devel-nytprof.googlecode.com
CPAN distribution: http://search.cpan.org/dist/Devel-NYTProf
To post, email: [email protected]
To unsubscribe, email: [email protected]
-~----------~----~----~----~------~----~------~--~---