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]
-~----------~----~----~----~------~----~------~--~---

Reply via email to