Author: tim.bunce
Date: Thu Dec 4 14:53:30 2008
New Revision: 641
Modified:
trunk/NYTProf.xs
trunk/lib/Devel/NYTProf/SubInfo.pm
Log:
Add NYTP_SIi_* constants for sub info
Modified: trunk/NYTProf.xs
==============================================================================
--- trunk/NYTProf.xs (original)
+++ trunk/NYTProf.xs Thu Dec 4 14:53:30 2008
@@ -102,6 +102,19 @@
#define NYTP_FIDi_SUBS_CALLED 11
/* indices to elements of the sub call info array */
+#define NYTP_SIi_FID 0 /* fid of file sub was defined in */
+#define NYTP_SIi_FIRST_LINE 1 /* line number of first line of sub */
+#define NYTP_SIi_LAST_LINE 2 /* line number of last line of sub */
+#define NYTP_SIi_CALL_COUNT 3 /* number of times sub was called */
+#define NYTP_SIi_INCL_RTIME 4 /* incl real time in sub */
+#define NYTP_SIi_EXCL_RTIME 5 /* excl real time in sub */
+#define NYTP_SIi_SUB_NAME 6 /* sub name */
+#define NYTP_SIi_PROFILE 7 /* ref to profile object */
+#define NYTP_SIi_REC_DEPTH 8 /* max recursion call depth */
+#define NYTP_SIi_RECI_RTIME 9 /* recursive incl real time in sub */
+#define NYTP_SIi_elements 10 /* highest index, plus 1 */
+
+/* indices to elements of the sub call info array */
#define NYTP_SCi_CALL_COUNT 0 /* count of calls to sub */
#define NYTP_SCi_INCL_RTIME 1 /* inclusive real time in sub */
#define NYTP_SCi_EXCL_RTIME 2 /* exclusive real time in sub */
@@ -3167,16 +3180,16 @@
warn("Sub %s fid %u lines %u..%u\n",
subname_pv, fid, first_line, last_line);
av = lookup_subinfo_av(aTHX_ subname_sv, sub_subinfo_hv);
- sv_setuv(*av_fetch(av, 0, 1), fid);
- sv_setuv(*av_fetch(av, 1, 1), first_line);
- sv_setuv(*av_fetch(av, 2, 1), last_line);
- sv_setuv(*av_fetch(av, 3, 1), 0); /* call count */
- sv_setnv(*av_fetch(av, 4, 1), 0.0); /* incl_time */
- sv_setnv(*av_fetch(av, 5, 1), 0.0); /* excl_time */
- sv_setsv(*av_fetch(av, 6, 1), subname_sv);
- sv_setsv(*av_fetch(av, 7, 1), &PL_sv_undef); /* ref to
profile */
- sv_setuv(*av_fetch(av, 8, 1), 0); /* rec_depth */
- sv_setnv(*av_fetch(av, 9, 1), 0.0); /* reci_time */
+ sv_setuv(*av_fetch(av, NYTP_SIi_FID, 1), fid);
+ sv_setuv(*av_fetch(av, NYTP_SIi_FIRST_LINE, 1),
first_line);
+ sv_setuv(*av_fetch(av, NYTP_SIi_LAST_LINE, 1), last_line);
+ sv_setuv(*av_fetch(av, NYTP_SIi_CALL_COUNT, 1), 0); /*
call count */
+ sv_setnv(*av_fetch(av, NYTP_SIi_INCL_RTIME, 1), 0.0); /*
incl_time */
+ sv_setnv(*av_fetch(av, NYTP_SIi_EXCL_RTIME, 1), 0.0); /*
excl_time */
+ sv_setsv(*av_fetch(av, NYTP_SIi_SUB_NAME, 1),
subname_sv);
+ sv_setsv(*av_fetch(av, NYTP_SIi_PROFILE, 1),
&PL_sv_undef); /* ref to profile */
+ sv_setuv(*av_fetch(av, NYTP_SIi_REC_DEPTH, 1), 0); /*
rec_depth */
+ sv_setnv(*av_fetch(av, NYTP_SIi_RECI_RTIME, 1), 0.0); /*
reci_time */
/* add sub to NYTP_FIDi_SUBS_DEFINED of fid */
sv = SvRV(*av_fetch(fid_fileinfo_av, fid, 1));
@@ -3555,7 +3568,26 @@
newCONSTSUB(stash, "NYTP_FIDi_HAS_EVALS",
newSViv(NYTP_FIDi_HAS_EVALS));
newCONSTSUB(stash, "NYTP_FIDi_SUBS_DEFINED",
newSViv(NYTP_FIDi_SUBS_DEFINED));
newCONSTSUB(stash, "NYTP_FIDi_SUBS_CALLED",
newSViv(NYTP_FIDi_SUBS_CALLED));
- }
+ /* NYTP_SIi_* */
+ newCONSTSUB(stash, "NYTP_SIi_FID", newSViv(NYTP_SIi_FID));
+ newCONSTSUB(stash, "NYTP_SIi_FIRST_LINE",
newSViv(NYTP_SIi_FIRST_LINE));
+ newCONSTSUB(stash, "NYTP_SIi_LAST_LINE", newSViv(NYTP_SIi_LAST_LINE));
+ newCONSTSUB(stash, "NYTP_SIi_CALL_COUNT",
newSViv(NYTP_SIi_CALL_COUNT));
+ newCONSTSUB(stash, "NYTP_SIi_INCL_RTIME",
newSViv(NYTP_SIi_INCL_RTIME));
+ newCONSTSUB(stash, "NYTP_SIi_EXCL_RTIME",
newSViv(NYTP_SIi_EXCL_RTIME));
+ newCONSTSUB(stash, "NYTP_SIi_SUB_NAME", newSViv(NYTP_SIi_SUB_NAME));
+ newCONSTSUB(stash, "NYTP_SIi_PROFILE", newSViv(NYTP_SIi_PROFILE));
+ newCONSTSUB(stash, "NYTP_SIi_REC_DEPTH", newSViv(NYTP_SIi_REC_DEPTH));
+ newCONSTSUB(stash, "NYTP_SIi_RECI_RTIME",
newSViv(NYTP_SIi_RECI_RTIME));
+ /* NYTP_SCi_* */
+ newCONSTSUB(stash, "NYTP_SCi_CALL_COUNT",
newSViv(NYTP_SCi_CALL_COUNT));
+ newCONSTSUB(stash, "NYTP_SCi_INCL_RTIME",
newSViv(NYTP_SCi_INCL_RTIME));
+ newCONSTSUB(stash, "NYTP_SCi_EXCL_RTIME",
newSViv(NYTP_SCi_EXCL_RTIME));
+ newCONSTSUB(stash, "NYTP_SCi_INCL_UTIME",
newSViv(NYTP_SCi_INCL_UTIME));
+ newCONSTSUB(stash, "NYTP_SCi_INCL_STIME",
newSViv(NYTP_SCi_INCL_STIME));
+ newCONSTSUB(stash, "NYTP_SCi_RECI_RTIME",
newSViv(NYTP_SCi_RECI_RTIME));
+ newCONSTSUB(stash, "NYTP_SCi_REC_DEPTH", newSViv(NYTP_SCi_REC_DEPTH));
+}
MODULE = Devel::NYTProf PACKAGE = Devel::NYTProf::Test
Modified: trunk/lib/Devel/NYTProf/SubInfo.pm
==============================================================================
--- trunk/lib/Devel/NYTProf/SubInfo.pm (original)
+++ trunk/lib/Devel/NYTProf/SubInfo.pm Thu Dec 4 14:53:30 2008
@@ -1,18 +1,29 @@
package Devel::NYTProf::SubInfo; # sub_subinfo
+use strict;
+use warnings;
+use Carp;
+
+use Devel::NYTProf::Constants qw(
+ NYTP_SIi_FID NYTP_SIi_FIRST_LINE NYTP_SIi_LAST_LINE
+ NYTP_SIi_CALL_COUNT NYTP_SIi_INCL_RTIME NYTP_SIi_EXCL_RTIME
+ NYTP_SIi_SUB_NAME NYTP_SIi_PROFILE
+ NYTP_SIi_REC_DEPTH NYTP_SIi_RECI_RTIME
+);
+
use List::Util qw(sum min max);
-sub fid { $_[0]->[0] ||=
$_[0]->profile->package_fids($_[0]->package) }
-sub first_line { shift->[1] }
-sub last_line { shift->[2] }
-sub calls { shift->[3] }
-sub incl_time { shift->[4] }
-sub excl_time { shift->[5] }
-sub subname { shift->[6] }
-sub profile { shift->[7] }
+sub fid { $_[0]->[NYTP_SIi_FID] || croak "No fid for $_[0][6]" }
+sub first_line { shift->[NYTP_SIi_FIRST_LINE] }
+sub last_line { shift->[NYTP_SIi_LAST_LINE] }
+sub calls { shift->[NYTP_SIi_CALL_COUNT] }
+sub incl_time { shift->[NYTP_SIi_INCL_RTIME] }
+sub excl_time { shift->[NYTP_SIi_EXCL_RTIME] }
+sub subname { shift->[NYTP_SIi_SUB_NAME] }
+sub profile { shift->[NYTP_SIi_PROFILE] }
sub package { (my $pkg = shift->subname) =~ s/^(.*)::.*/$1/; return
$pkg }
-sub recur_max_depth { shift->[8] }
-sub recur_incl_time { shift->[9] }
+sub recur_max_depth { shift->[NYTP_SIi_REC_DEPTH] }
+sub recur_incl_time { shift->[NYTP_SIi_RECI_RTIME] }
sub is_xsub {
my $self = shift;
@@ -45,21 +56,26 @@
sub merge_in {
my $self = shift;
my $new = shift;
- $self->[1] = min($self->[1], $new->[1]); # first_line
- $self->[2] = max($self->[2], $new->[2]); # last_line
- $self->[3] += $new->[3]; # calls
- $self->[4] += $new->[4]; # incl_time (umm, reasonable)
- $self->[5] += $new->[5]; # excl_time
- $self->[6] = [ $self->[6] ] if not ref $self->[6];
- push @{$self->[6]}, $new->[6]; # subname
- $self->[8] = max($self->[8], $new->[8]); # recur_max_depth
- $self->[9] = max($self->[9], $new->[9]); # recur_incl_time (ug,
plausible)
+ $self->[NYTP_SIi_FIRST_LINE] = min($self->[NYTP_SIi_FIRST_LINE],
$new->[NYTP_SIi_FIRST_LINE]);
+ $self->[NYTP_SIi_LAST_LINE] = max($self->[NYTP_SIi_LAST_LINE],
$new->[NYTP_SIi_LAST_LINE]);
+ $self->[NYTP_SIi_CALL_COUNT] += $new->[NYTP_SIi_CALL_COUNT];
+ $self->[NYTP_SIi_INCL_RTIME] += $new->[NYTP_SIi_INCL_RTIME];
+ $self->[NYTP_SIi_EXCL_RTIME] += $new->[NYTP_SIi_EXCL_RTIME];
+ $self->[NYTP_SIi_SUB_NAME] = [ $self->[NYTP_SIi_SUB_NAME] ]
+ if not ref $self->[NYTP_SIi_SUB_NAME];
+ push @{$self->[NYTP_SIi_SUB_NAME]}, $new->[NYTP_SIi_SUB_NAME];
+ $self->[NYTP_SIi_REC_DEPTH] = max($self->[NYTP_SIi_REC_DEPTH],
$new->[NYTP_SIi_REC_DEPTH]);
+ $self->[9] = max($self->[NYTP_SIi_RECI_RTIME],
$new->[NYTP_SIi_RECI_RTIME]); # ug, plausible
return;
}
sub _values_for_dump {
my $self = shift;
- my @values = @{$self}[0 .. 5, 8, 9 ];
+ my @values = @{$self}[
+ NYTP_SIi_FID, NYTP_SIi_FIRST_LINE, NYTP_SIi_LAST_LINE,
+ NYTP_SIi_CALL_COUNT, NYTP_SIi_INCL_RTIME, NYTP_SIi_EXCL_RTIME,
+ NYTP_SIi_REC_DEPTH, NYTP_SIi_RECI_RTIME
+ ];
return [EMAIL PROTECTED];
}
--~--~---------~--~----~------------~-------~--~----~
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]
-~----------~----~----~----~------~----~------~--~---