Revision: 1019
Author: [email protected]
Date: Thu Jan 21 02:29:41 2010
Log: When iterating %DB::sub to find filenames for packages, skip over any entry
where the "filename" is one generated by eval, or re_eval.

This is a moderate knock-on in 4 of the tests, which had been associating
main:: with an eval filename.
http://code.google.com/p/perl-devel-nytprof/source/detail?r=1019

Modified:
 /trunk/NYTProf.xs
 /trunk/t/test11.rdt
 /trunk/t/test22-strevala.rdt
 /trunk/t/test51-enable.rdt
 /trunk/t/test61-submerge.rdt

=======================================
--- /trunk/NYTProf.xs   Tue Jan 19 08:22:24 2010
+++ /trunk/NYTProf.xs   Thu Jan 21 02:29:41 2010
@@ -2984,6 +2984,22 @@
     return 1;
 }

+/* Returns a pointer to the ')' after the digits in the (?:re_)?eval prefix.
+   As the prefix length is known, this gives the length of the digits.  */
+
+static char *
+eval_prefix(char *filename, const char *prefix, STRLEN prefix_len) {
+    if (memEQ(filename, prefix, prefix_len)
+        && isdigit(filename[prefix_len])) {
+        char *s = filename + prefix_len + 1;
+
+        while (isdigit(*s))
+            ++s;
+        if (s[0] == ')' && s[1] == '[')
+            return s;
+    }
+    return NULL;
+}

 static void
 write_sub_line_ranges(pTHX)
@@ -3032,6 +3048,13 @@
         first = strrchr(filename, ':');
         filename_len = (first) ? first - filename : 0;

+ /* skip filenames for generated evals /\A\((?:re_)?eval \d+\)\[.*]\z/
+         */
+        if (filename_len > 9 && filename[filename_len - 1] == ']'
+            && (eval_prefix(filename, "(eval ", 6) ||
+                eval_prefix(filename, "(re_eval ", 9)))
+            continue;
+
         /* get sv for package-of-subname to filename mapping */
pkg_filename_sv = sub_pkg_filename_sv(aTHX_ sub_name, sub_name_len);

=======================================
--- /trunk/t/test11.rdt Thu Dec 10 03:05:52 2009
+++ /trunk/t/test11.rdt Thu Jan 21 02:29:41 2010
@@ -20,11 +20,11 @@
 fid_block_time 1       6       [ 0 1 ]
 fid_fileinfo   1       [ test11.p   1 2 0 0 ]
 fid_fileinfo   1       sub     main::BEGIN     2-4
+fid_fileinfo   1       sub     main::RUNTIME   1-1
fid_fileinfo 1 call 5 main::__ANON__[(eval 0)[test11.p:3]:1] [ 1 0 0 0 0 0 0 main::RUNTIME ] fid_fileinfo 1 call 6 main::__ANON__[(eval 0)[test11.p:3]:1] [ 1 0 0 0 0 0 0 main::RUNTIME ]
 fid_fileinfo   1       eval    3       [ 1 0 ]
 fid_fileinfo   2       [ (eval 0)[test11.p:3] 1 3 2 2 0 0 ]
-fid_fileinfo   2       sub     main::RUNTIME   1-1
 fid_fileinfo   2       sub     main::__ANON__[(eval 0)[test11.p:3]:1]  1-1
 fid_line_time  1       3       0       0
 fid_line_time  1       3       1       0
@@ -40,7 +40,7 @@
 profile_modes  fid_line_time   line
 profile_modes  fid_sub_time    sub
 sub_subinfo    main::BEGIN     [ 1 2 4 0 0 0 0 0 ]
-sub_subinfo    main::RUNTIME   [ 2 1 1 0 0 0 0 0 ]
+sub_subinfo    main::RUNTIME   [ 1 1 1 0 0 0 0 0 ]
 sub_subinfo    main::__ANON__[(eval 0)[test11.p:3]:1]  [ 2 1 1 2 0 0 0 0 ]
sub_subinfo main::__ANON__[(eval 0)[test11.p:3]:1] called_by 1 5 [ 1 0 0 0 0 0 0 main::RUNTIME ] sub_subinfo main::__ANON__[(eval 0)[test11.p:3]:1] called_by 1 6 [ 1 0 0 0 0 0 0 main::RUNTIME ]
=======================================
--- /trunk/t/test22-strevala.rdt        Thu Dec 10 03:05:52 2009
+++ /trunk/t/test22-strevala.rdt        Thu Jan 21 02:29:41 2010
@@ -28,14 +28,14 @@
 fid_block_time 1       12      2       2       [ 0 4 ]
 fid_fileinfo   1       [ test22-strevala.p   1 2 0 0 ]
 fid_fileinfo   1       sub     main::BEGIN     0-0
+fid_fileinfo   1       sub     main::CORE:print        0-0
+fid_fileinfo   1       sub     main::RUNTIME   1-1
fid_fileinfo 1 call 6 main::__ANON__[(eval 0)[test22-strevala.p:6]:1] [ 1 0 0 0 0 0 0 main::RUNTIME ] fid_fileinfo 1 call 9 main::__ANON__[(eval 0)[test22-strevala.p:9]:1] [ 2 0 0 0 0 0 0 main::RUNTIME ]
 fid_fileinfo   1       eval    6       [ 1 0 ]
 fid_fileinfo   1       eval    9       [ 2 0 ]
 fid_fileinfo   1       eval    12      [ 1 2 ]
 fid_fileinfo   2       [ (eval 0)[test22-strevala.p:6] 1 6 2 2 0 0 ]
-fid_fileinfo   2       sub     main::CORE:print        0-0
-fid_fileinfo   2       sub     main::RUNTIME   1-1
 fid_fileinfo   2       sub     main::__ANON__[(eval 0)[test22-strevala.p:6]:1] 
1-1
fid_fileinfo 2 call 1 main::CORE:print [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[test22-strevala.p:6]:1] ]
 fid_fileinfo   3       [ (eval 0)[test22-strevala.p:9] 1 9 3 2 0 0 ]
@@ -83,13 +83,13 @@
 profile_modes  fid_line_time   line
 profile_modes  fid_sub_time    sub
 sub_subinfo    main::BEGIN     [ 1 0 0 0 0 0 0 0 ]
-sub_subinfo    main::CORE:print        [ 2 0 0 5 0 0 0 0 ]
+sub_subinfo    main::CORE:print        [ 1 0 0 5 0 0 0 0 ]
sub_subinfo main::CORE:print called_by 2 1 [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[test22-strevala.p:6]:1] ] sub_subinfo main::CORE:print called_by 3 1 [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[test22-strevala.p:9]:1] ] sub_subinfo main::CORE:print called_by 4 1 [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[test22-strevala.p:9]:1] ] sub_subinfo main::CORE:print called_by 6 1 [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[(eval 0)[test22-strevala.p:12]:2]:1] ] sub_subinfo main::CORE:print called_by 7 1 [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[(eval 0)[test22-strevala.p:12]:2]:1] ]
-sub_subinfo    main::RUNTIME   [ 2 1 1 0 0 0 0 0 ]
+sub_subinfo    main::RUNTIME   [ 1 1 1 0 0 0 0 0 ]
sub_subinfo main::__ANON__[(eval 0)[(eval 0)[test22-strevala.p:12]:2]:1] [ 6 1 1 2 0 0 0 0 ] sub_subinfo main::__ANON__[(eval 0)[(eval 0)[test22-strevala.p:12]:2]:1] called_by 5 2 [ 2 0 0 0 0 0 0 main::RUNTIME ] sub_subinfo main::__ANON__[(eval 0)[test22-strevala.p:6]:1] [ 2 1 1 1 0 0 0 0 ]
=======================================
--- /trunk/t/test51-enable.rdt  Thu Dec 10 03:05:52 2009
+++ /trunk/t/test51-enable.rdt  Thu Jan 21 02:29:41 2010
@@ -22,16 +22,14 @@
 fid_block_time 1       9       [ 0 1 ]
 fid_fileinfo   1       [ test51-enable.p   1 2 0 0 ]
 fid_fileinfo   1       sub     main::BEGIN     0-0
+fid_fileinfo   1       sub     main::CORE:unlink       0-0
+fid_fileinfo   1       sub     main::RUNTIME   1-1
 fid_fileinfo   1       call    5       main::CORE:unlink       [ 1 0 0 0 0 0 0 
main::RUNTIME ]
 fid_fileinfo   1       call    9       main::sub1      [ 1 0 0 0 0 0 0 
main::RUNTIME ]
 fid_fileinfo   1       call    11      DB::disable_profile     [ 1 0 0 0 0 0 0 
main::RUNTIME ]
-fid_fileinfo   1       eval    7       [ 2 0 ]
+fid_fileinfo   1       eval    7       [ 1 0 ]
 fid_fileinfo   2       [ (eval 0)[test51-enable.p:7] 1 7 2 2 0 0 ]
 fid_fileinfo   2       sub     main::sub1      1-1
-fid_fileinfo   3       [ (eval 0)[test51-enable.p:7] 1 7 3 4 0 0 ]
-fid_fileinfo   3       sub     main::CORE:unlink       0-0
-fid_fileinfo   3       sub     main::RUNTIME   1-1
-fid_fileinfo   3       sub     main::sub9      1-1
 fid_line_time  1       3       [ 0 1 ]
 fid_line_time  1       4       [ 0 1 ]
 fid_line_time  1       5       [ 0 1 ]
@@ -52,9 +50,8 @@
 sub_subinfo    DB::disable_profile     [ undef 0 0 1 0 0 0 0 ]
sub_subinfo DB::disable_profile called_by 1 11 [ 1 0 0 0 0 0 0 main::RUNTIME ]
 sub_subinfo    main::BEGIN     [ 1 0 0 0 0 0 0 0 ]
-sub_subinfo    main::CORE:unlink       [ 3 0 0 1 0 0 0 0 ]
+sub_subinfo    main::CORE:unlink       [ 1 0 0 1 0 0 0 0 ]
 sub_subinfo    main::CORE:unlink       called_by       1       5       [ 1 0 0 
0 0 0 0 main::RUNTIME ]
-sub_subinfo    main::RUNTIME   [ 3 1 1 0 0 0 0 0 ]
+sub_subinfo    main::RUNTIME   [ 1 1 1 0 0 0 0 0 ]
 sub_subinfo    main::sub1      [ 2 1 1 1 0 0 0 0 ]
 sub_subinfo    main::sub1      called_by       1       9       [ 1 0 0 0 0 0 0 
main::RUNTIME ]
-sub_subinfo    main::sub9      [ 3 1 1 0 0 0 0 0 ]
=======================================
--- /trunk/t/test61-submerge.rdt        Thu Dec 10 03:05:52 2009
+++ /trunk/t/test61-submerge.rdt        Thu Jan 21 02:29:41 2010
@@ -21,6 +21,8 @@
 fid_block_time 1       8       2       2       [ 0 3 ]
 fid_fileinfo   1       [ test61-submerge.p   1 2 0 0 ]
 fid_fileinfo   1       sub     main::BEGIN     0-0
+fid_fileinfo   1       sub     main::CORE:print        0-0
+fid_fileinfo   1       sub     main::RUNTIME   1-1
 fid_fileinfo   1       sub     main::foo       4-4
 fid_fileinfo   1       call    4       main::CORE:print        [ 3 0 0 0 0 0 0 
main::foo ]
fid_fileinfo 1 call 8 main::__ANON__[(eval 0)[test61-submerge.p:8]:1] [ 3 0 0 0 0 0 0 main::RUNTIME ]
@@ -32,8 +34,6 @@
 fid_fileinfo   3       sub     main::__ANON__[(eval 0)[test61-submerge.p:8]:1] 
1-1
fid_fileinfo 3 call 1 main::foo [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[test61-submerge.p:8]:1] ]
 fid_fileinfo   4       [ (eval 0)[test61-submerge.p:8] 1 8 4 2 0 0 ]
-fid_fileinfo   4       sub     main::CORE:print        0-0
-fid_fileinfo   4       sub     main::RUNTIME   1-1
 fid_fileinfo   4       sub     main::__ANON__[(eval 0)[test61-submerge.p:8]:1] 
1-1
fid_fileinfo 4 call 1 main::foo [ 1 0 0 0 0 0 0 main::__ANON__[(eval 0)[test61-submerge.p:8]:1] ]
 fid_line_time  1       4       [ 0 3 ]
@@ -52,9 +52,9 @@
 profile_modes  fid_line_time   line
 profile_modes  fid_sub_time    sub
 sub_subinfo    main::BEGIN     [ 1 0 0 0 0 0 0 0 ]
-sub_subinfo    main::CORE:print        [ 4 0 0 3 0 0 0 0 ]
+sub_subinfo    main::CORE:print        [ 1 0 0 3 0 0 0 0 ]
 sub_subinfo    main::CORE:print        called_by       1       4       [ 3 0 0 
0 0 0 0 main::foo ]
-sub_subinfo    main::RUNTIME   [ 4 1 1 0 0 0 0 0 ]
+sub_subinfo    main::RUNTIME   [ 1 1 1 0 0 0 0 0 ]
sub_subinfo main::__ANON__[(eval 0)[test61-submerge.p:8]:1] [ 2 1 1 3 0 0 0 0 ] sub_subinfo main::__ANON__[(eval 0)[test61-submerge.p:8]:1] called_by 1 8 [ 3 0 0 0 0 0 0 main::RUNTIME ]
 sub_subinfo    main::foo       [ 1 4 4 3 0 0 0 0 ]
-- 
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