Author: tim.bunce
Date: Thu Nov 13 13:24:06 2008
New Revision: 604

Modified:
    trunk/NYTProf.xs
    trunk/lib/Devel/NYTProf/Data.pm
    trunk/lib/Devel/NYTProf/FileInfo.pm

Log:
Populate $fi->subs data direct into fileinfo in XS.
Delete fid_subs_map() as it's no longer used.


Modified: trunk/NYTProf.xs
==============================================================================
--- trunk/NYTProf.xs    (original)
+++ trunk/NYTProf.xs    Thu Nov 13 13:24:06 2008
@@ -96,8 +96,9 @@
  #define NYTP_FIDi_FILEMTIME     6
  #define NYTP_FIDi_PROFILE       7
  #define NYTP_FIDi_EVAL_FI       8
-#define NYTP_FIDi_SUBS_DEFN     9
-#define NYTP_FIDi_HAS_EVALS     10
+#define NYTP_FIDi_HAS_EVALS     9
+#define NYTP_FIDi_SUBS_DEFINED  10
+#define NYTP_FIDi_SUBS_CALLED   11


  /* Hash table definitions */
@@ -3030,8 +3031,9 @@
                  av_store(av, NYTP_FIDi_FILESIZE,  newSVuv(file_size));
                  av_store(av, NYTP_FIDi_FILEMTIME, newSVuv(file_mtime));
                  av_store(av, NYTP_FIDi_PROFILE,   &PL_sv_undef);
-                av_store(av, NYTP_FIDi_SUBS_DEFN, &PL_sv_undef);
                  av_store(av, NYTP_FIDi_HAS_EVALS, &PL_sv_undef);
+                av_store(av, NYTP_FIDi_SUBS_DEFINED,  
newRV_noinc((SV*)newHV()));
+                av_store(av, NYTP_FIDi_SUBS_CALLED,   
newRV_noinc((SV*)newHV()));

                  break;
              }
@@ -3078,10 +3080,13 @@
              case NYTP_TAG_SUB_LINE_RANGE:
              {
                  AV *av;
+                SV *sv;
                  unsigned int fid        = read_int();
                  unsigned int first_line = read_int();
                  unsigned int last_line  = read_int();
                  SV *subname_sv = read_str(aTHX_ tmp_str_sv);
+                STRLEN subname_len;
+                char *subname_pv = SvPV(subname_sv, subname_len);

                if (cb) {
                    PUSHMARK(SP);
@@ -3100,7 +3105,7 @@

                  if (trace_level >= 2)
                      warn("Sub %s fid %u lines %u..%u\n",
-                        SvPV_nolen(subname_sv), fid, first_line,  
last_line);
+                        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);
@@ -3112,6 +3117,12 @@
                  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 */
+
+                /* add sub to NYTP_FIDi_SUBS_DEFINED of fid */
+                sv = SvRV(*av_fetch(fid_fileinfo_av, fid, 1));
+                sv = SvRV(*av_fetch((AV *)sv, NYTP_FIDi_SUBS_DEFINED, 1));
+                (void)hv_store((HV *)sv, subname_pv, subname_len,  
newRV((SV*)av), 0);
+
                  break;
              }

@@ -3465,8 +3476,9 @@
      newCONSTSUB(stash, "NYTP_FIDi_FILEMTIME",  
newSViv(NYTP_FIDi_FILEMTIME));
      newCONSTSUB(stash, "NYTP_FIDi_PROFILE",   newSViv(NYTP_FIDi_PROFILE));
      newCONSTSUB(stash, "NYTP_FIDi_EVAL_FI",   newSViv(NYTP_FIDi_EVAL_FI));
-    newCONSTSUB(stash, "NYTP_FIDi_SUBS_DEFN",  
newSViv(NYTP_FIDi_SUBS_DEFN));
      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));
      }



Modified: trunk/lib/Devel/NYTProf/Data.pm
==============================================================================
--- trunk/lib/Devel/NYTProf/Data.pm     (original)
+++ trunk/lib/Devel/NYTProf/Data.pm     Thu Nov 13 13:24:06 2008
@@ -172,21 +172,6 @@
      return @all;
  }

-sub fid_subs_map {
-    # return { fid => { subname => subinfo, ... }, fid => ... }
-    my $self = shift;
-
-    my $caches = $self->_caches;
-    return $caches->{fid_subs_map} if $caches->{fid_subs_map};
-
-    my $subname_subinfo_map = $self->subname_subinfo_map;
-    my %fid_subs_map;
-    while ( my ($subname, $subinfo) = each %$subname_subinfo_map ) {
-        $fid_subs_map{ $subinfo->fid || 0 }{ $subname } = $subinfo;
-    }
-
-    return $caches->{fid_subs_map} = \%fid_subs_map;
-}

  sub fileinfo_of {
      my $self = shift;

Modified: trunk/lib/Devel/NYTProf/FileInfo.pm
==============================================================================
--- trunk/lib/Devel/NYTProf/FileInfo.pm (original)
+++ trunk/lib/Devel/NYTProf/FileInfo.pm Thu Nov 13 13:24:06 2008
@@ -7,7 +7,7 @@
  use Devel::NYTProf::Constants qw(
      NYTP_FIDi_FILENAME NYTP_FIDi_EVAL_FID NYTP_FIDi_EVAL_LINE NYTP_FIDi_FID
      NYTP_FIDi_FLAGS NYTP_FIDi_FILESIZE NYTP_FIDi_FILEMTIME  
NYTP_FIDi_PROFILE
-    NYTP_FIDi_EVAL_FI NYTP_FIDi_SUBS_DEFN NYTP_FIDi_HAS_EVALS
+    NYTP_FIDi_EVAL_FI NYTP_FIDi_SUBS_DEFINED NYTP_FIDi_HAS_EVALS
      NYTP_FIDf_IS_PMC
  );

@@ -27,7 +27,7 @@
  sub has_evals { $_[0]->[NYTP_FIDi_HAS_EVALS()] }

  # return a ref to a hash of { subname => subinfo, ... }
-sub subs      { $_[0]->[NYTP_FIDi_SUBS_DEFN()] ||=  
$_[0]->profile->fid_subs_map->{ $_[0]->fid } }
+sub subs      { $_[0]->[NYTP_FIDi_SUBS_DEFINED()] }


  sub _values_for_dump {

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