Author: tim.bunce
Date: Wed Oct 22 02:05:47 2008
New Revision: 532

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

Log:
Move sub_caller migration to new _migrate_sub_callers_from_eval_fids()  
method.


Modified: trunk/lib/Devel/NYTProf/Data.pm
==============================================================================
--- trunk/lib/Devel/NYTProf/Data.pm     (original)
+++ trunk/lib/Devel/NYTProf/Data.pm     Wed Oct 22 02:05:47 2008
@@ -91,42 +91,7 @@
      (my $sub_class = $class) =~ s/\w+$/ProfSub/;
      $_ and bless $_ => $sub_class for values %$sub_subinfo;

-
-    # migrate sub calls made from evals to be calls from the base fid
-    #
-    # map of { eval_fid => base_fid, ... }
-    my $eval_fid_map = $profile->eval_fid_map;
-    # map of { fid => { subs called from fid... }, ... }
-    my $fid_sub_calls_map = $profile->fid_sub_calls_map;
-    #
-    while ( my ($eval_fid, $base_fid) = each %$eval_fid_map ) {
-        my $subnames = $fid_sub_calls_map->{$eval_fid}
-            or next; # no subs called from this eval fid
-
-        # drill thru string-evals-within-string-evals
-        $base_fid = $eval_fid_map->{$base_fid}
-            while $eval_fid_map->{$base_fid};
-
-        my $line_of_eval = $profile->fileinfo_of($eval_fid)->eval_line;
-        warn "Migrating sub calls from eval fid $eval_fid to fid $base_fid  
line $line_of_eval: @$subnames\n"
-            if $trace;
-
-        my $sub_caller = $profile->{sub_caller};
-        for my $subname (@$subnames) {
-
-            my $eval_calls = delete $sub_caller->{$subname}{$eval_fid}
-                or die "panic";
-            my $base_calls =        $sub_caller->{$subname}{$base_fid} ||=  
{};
-
-            warn "merged $subname calls from fid $eval_fid to $base_fid\n";
-            while ( my ($line_in_eval, $eval_line_calls) =  
each %$eval_calls ) {
-                my $e = $eval_calls->{$line_in_eval};
-                my $b = $base_calls->{$line_of_eval} ||= [ (0) x @$e ];
-                $b->[$_] += $e->[$_] for ([EMAIL PROTECTED]);
-            }
-        }
-    }
-    $profile->_clear_caches;
+    $profile->_migrate_sub_callers_from_eval_fids;

      # XXX merge evals - should become a method optionally called here
      # (which uses other methods to do the work and those methods
@@ -566,6 +531,48 @@
      }

      return;
+}
+
+
+sub _migrate_sub_callers_from_eval_fids {
+    my $self = shift;
+
+    # migrate sub calls made from evals to be calls from the base fid
+    #
+    # map of { eval_fid => base_fid, ... }
+    my $eval_fid_map = $self->eval_fid_map;
+    # map of { fid => { subs called from fid... }, ... }
+    my $fid_sub_calls_map = $self->fid_sub_calls_map;
+    #
+    while ( my ($eval_fid, $base_fid) = each %$eval_fid_map ) {
+        my $subnames = $fid_sub_calls_map->{$eval_fid}
+            or next; # no subs called from this eval fid
+
+        # drill thru string-evals-within-string-evals
+        $base_fid = $eval_fid_map->{$base_fid}
+            while $eval_fid_map->{$base_fid};
+
+        my $line_of_eval = $self->fileinfo_of($eval_fid)->eval_line;
+        warn "Migrating sub calls from eval fid $eval_fid to fid $base_fid  
line $line_of_eval: @$subnames\n"
+            if $trace;
+
+        my $sub_caller = $self->{sub_caller};
+        for my $subname (@$subnames) {
+
+            my $eval_calls = delete $sub_caller->{$subname}{$eval_fid}
+                or die "panic";
+            my $base_calls =        $sub_caller->{$subname}{$base_fid} ||=  
{};
+
+            warn "merged $subname calls from fid $eval_fid to $base_fid\n"
+                if $trace;
+            while ( my ($line_in_eval, $eval_line_calls) =  
each %$eval_calls ) {
+                my $e = $eval_calls->{$line_in_eval};
+                my $b = $base_calls->{$line_of_eval} ||= [ (0) x @$e ];
+                $b->[$_] += $e->[$_] for ([EMAIL PROTECTED]);
+            }
+        }
+    }
+    $self->_clear_caches;
  }



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