ruby-prof 0.15.9 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +27 -1
  3. data/README.rdoc +83 -31
  4. data/bin/ruby-prof +4 -4
  5. data/doc/LICENSE.html +1 -1
  6. data/doc/README_rdoc.html +92 -33
  7. data/doc/Rack.html +1 -1
  8. data/doc/Rack/RubyProf.html +17 -14
  9. data/doc/RubyProf.html +30 -29
  10. data/doc/RubyProf/AbstractPrinter.html +1 -1
  11. data/doc/RubyProf/AggregateCallInfo.html +1 -1
  12. data/doc/RubyProf/CallInfo.html +1 -1
  13. data/doc/RubyProf/CallInfoPrinter.html +1 -1
  14. data/doc/RubyProf/CallInfoVisitor.html +1 -1
  15. data/doc/RubyProf/CallStackPrinter.html +1 -1
  16. data/doc/RubyProf/CallTreePrinter.html +349 -67
  17. data/doc/RubyProf/Cmd.html +5 -5
  18. data/doc/RubyProf/DotPrinter.html +2 -2
  19. data/doc/RubyProf/FlatPrinter.html +1 -1
  20. data/doc/RubyProf/FlatPrinterWithLineNumbers.html +1 -1
  21. data/doc/RubyProf/GraphHtmlPrinter.html +1 -1
  22. data/doc/RubyProf/GraphPrinter.html +1 -1
  23. data/doc/RubyProf/MethodInfo.html +2 -2
  24. data/doc/RubyProf/MultiPrinter.html +11 -9
  25. data/doc/RubyProf/Profile.html +94 -44
  26. data/doc/RubyProf/ProfileTask.html +1 -1
  27. data/doc/RubyProf/Thread.html +43 -1
  28. data/doc/created.rid +16 -16
  29. data/doc/examples/flat_txt.html +1 -1
  30. data/doc/examples/graph_html.html +1 -1
  31. data/doc/examples/graph_txt.html +3 -3
  32. data/doc/index.html +85 -30
  33. data/doc/js/navigation.js.gz +0 -0
  34. data/doc/js/search_index.js +1 -1
  35. data/doc/js/search_index.js.gz +0 -0
  36. data/doc/js/searcher.js +2 -2
  37. data/doc/js/searcher.js.gz +0 -0
  38. data/doc/table_of_contents.html +117 -68
  39. data/examples/cachegrind.out.1 +114 -0
  40. data/examples/cachegrind.out.1.32313213 +114 -0
  41. data/examples/graph.txt +1 -1
  42. data/ext/ruby_prof/extconf.rb +6 -2
  43. data/ext/ruby_prof/rp_measure_cpu_time.c +29 -31
  44. data/ext/ruby_prof/rp_method.c +1 -1
  45. data/ext/ruby_prof/rp_thread.c +57 -52
  46. data/ext/ruby_prof/ruby_prof.c +122 -66
  47. data/ext/ruby_prof/ruby_prof.h +2 -0
  48. data/lib/ruby-prof.rb +14 -13
  49. data/lib/ruby-prof/assets/call_stack_printer.js.html +1 -1
  50. data/lib/ruby-prof/compatibility.rb +9 -8
  51. data/lib/ruby-prof/method_info.rb +1 -1
  52. data/lib/ruby-prof/printers/call_tree_printer.rb +88 -50
  53. data/lib/ruby-prof/printers/dot_printer.rb +1 -1
  54. data/lib/ruby-prof/printers/multi_printer.rb +6 -4
  55. data/lib/ruby-prof/profile.rb +0 -1
  56. data/lib/ruby-prof/rack.rb +53 -16
  57. data/lib/ruby-prof/thread.rb +11 -0
  58. data/lib/ruby-prof/version.rb +1 -1
  59. data/test/exclude_threads_test.rb +2 -3
  60. data/test/fiber_test.rb +21 -7
  61. data/test/measure_cpu_time_test.rb +84 -24
  62. data/test/multi_printer_test.rb +5 -4
  63. data/test/pause_resume_test.rb +7 -7
  64. data/test/printers_test.rb +6 -4
  65. data/test/rack_test.rb +26 -1
  66. data/test/test_helper.rb +28 -3
  67. data/test/thread_test.rb +1 -0
  68. metadata +5 -3
@@ -89,7 +89,7 @@
89
89
 
90
90
  <footer id="validator-badges" role="contentinfo">
91
91
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
92
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
92
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
93
93
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
94
94
  </footer>
95
95
 
@@ -141,7 +141,8 @@
141
141
  <span class="ruby-operator">::</span><span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">GraphHtmlPrinter</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&#39;graph.html&#39;</span>,
142
142
  <span class="ruby-operator">::</span><span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">CallStackPrinter</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">&#39;call_stack.html&#39;</span>}
143
143
 
144
- <span class="ruby-ivar">@skip_paths</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:skip_paths</span>] <span class="ruby-operator">||</span> [<span class="ruby-regexp">%r{^/assets}</span>, <span class="ruby-regexp">%r{\.css$}</span>, <span class="ruby-regexp">%r{\.js$}</span>, <span class="ruby-regexp">%r{\.png$}</span>, <span class="ruby-regexp">%r{\.jpeg$}</span>, <span class="ruby-regexp">%r{\.jpg$}</span>, <span class="ruby-regexp">%r{\.gif$}</span>]
144
+ <span class="ruby-ivar">@skip_paths</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:skip_paths</span>] <span class="ruby-operator">||</span> [<span class="ruby-regexp">%r{^/assets}</span>, <span class="ruby-regexp">%r{\.(css|js|png|jpeg|jpg|gif)$}</span>]
145
+ <span class="ruby-ivar">@only_paths</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:only_paths</span>]
145
146
  <span class="ruby-keyword">end</span></pre>
146
147
  </div>
147
148
 
@@ -180,23 +181,25 @@
180
181
 
181
182
 
182
183
  <div class="method-source-code" id="call-source">
183
- <pre><span class="ruby-comment"># File lib/ruby-prof/rack.rb, line 21</span>
184
+ <pre><span class="ruby-comment"># File lib/ruby-prof/rack.rb, line 22</span>
184
185
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
185
186
  <span class="ruby-identifier">request</span> = <span class="ruby-constant">Rack</span><span class="ruby-operator">::</span><span class="ruby-constant">Request</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">env</span>)
186
187
 
187
- <span class="ruby-keyword">if</span> <span class="ruby-ivar">@skip_paths</span>.<span class="ruby-identifier">any?</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">skip_path</span><span class="ruby-operator">|</span> <span class="ruby-identifier">skip_path</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">request</span>.<span class="ruby-identifier">path</span>}
188
- <span class="ruby-ivar">@app</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
189
- <span class="ruby-keyword">else</span>
190
- <span class="ruby-identifier">result</span> = <span class="ruby-keyword">nil</span>
191
- <span class="ruby-identifier">data</span> = <span class="ruby-operator">::</span><span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">Profile</span>.<span class="ruby-identifier">profile</span> <span class="ruby-keyword">do</span>
192
- <span class="ruby-identifier">result</span> = <span class="ruby-ivar">@app</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
193
- <span class="ruby-keyword">end</span>
188
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">should_profile?</span>(<span class="ruby-identifier">request</span>.<span class="ruby-identifier">path</span>)
189
+ <span class="ruby-keyword">begin</span>
190
+ <span class="ruby-identifier">result</span> = <span class="ruby-keyword">nil</span>
191
+ <span class="ruby-identifier">data</span> = <span class="ruby-operator">::</span><span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">Profile</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">profiling_options</span>) <span class="ruby-keyword">do</span>
192
+ <span class="ruby-identifier">result</span> = <span class="ruby-ivar">@app</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
193
+ <span class="ruby-keyword">end</span>
194
194
 
195
- <span class="ruby-identifier">path</span> = <span class="ruby-identifier">request</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&#39;/&#39;</span>, <span class="ruby-string">&#39;-&#39;</span>)
196
- <span class="ruby-identifier">path</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">0</span>)
195
+ <span class="ruby-identifier">path</span> = <span class="ruby-identifier">request</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&#39;/&#39;</span>, <span class="ruby-string">&#39;-&#39;</span>)
196
+ <span class="ruby-identifier">path</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-value">0</span>)
197
197
 
198
- <span class="ruby-identifier">print</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">path</span>)
199
- <span class="ruby-identifier">result</span>
198
+ <span class="ruby-identifier">print</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">path</span>)
199
+ <span class="ruby-identifier">result</span>
200
+ <span class="ruby-keyword">end</span>
201
+ <span class="ruby-keyword">else</span>
202
+ <span class="ruby-ivar">@app</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">env</span>)
200
203
  <span class="ruby-keyword">end</span>
201
204
  <span class="ruby-keyword">end</span></pre>
202
205
  </div>
@@ -217,7 +220,7 @@
217
220
 
218
221
  <footer id="validator-badges" role="contentinfo">
219
222
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
220
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
223
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
221
224
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
222
225
  </footer>
223
226
 
@@ -297,7 +297,7 @@ environment variable</p>
297
297
 
298
298
 
299
299
  <div class="method-source-code" id="figure_measure_mode-source">
300
- <pre><span class="ruby-comment"># File lib/ruby-prof.rb, line 34</span>
300
+ <pre><span class="ruby-comment"># File lib/ruby-prof.rb, line 35</span>
301
301
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">figure_measure_mode</span>
302
302
  <span class="ruby-keyword">case</span> <span class="ruby-constant">ENV</span>[<span class="ruby-string">&quot;RUBY_PROF_MEASURE_MODE&quot;</span>]
303
303
  <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;wall&quot;</span>, <span class="ruby-string">&quot;wall_time&quot;</span>
@@ -511,17 +511,17 @@ environment variable</p>
511
511
 
512
512
  <p>Returns what ruby-prof is measuring. Valid values include:</p>
513
513
 
514
- <p>*RubyProf::PROCESS_TIME - Measure process time. This is default. It is
515
- implemented using the clock functions in the C Runtime library.
516
- *RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and
517
- GetLocalTime on Windows *RubyProf::CPU_TIME - Measure time using the CPU
518
- clock counter. This mode is only supported on Pentium or PowerPC
519
- platforms. *RubyProf::ALLOCATIONS - Measure object allocations. This
520
- requires a patched Ruby interpreter. *RubyProf::MEMORY - Measure memory
521
- size. This requires a patched Ruby interpreter. *RubyProf::GC_RUNS -
522
- Measure number of garbage collections. This requires a patched Ruby
523
- interpreter. *RubyProf::GC_TIME - Measure time spent doing garbage
524
- collection. This requires a patched Ruby interpreter.*/</p>
514
+ <p>*RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and
515
+ GetLocalTime on Windows. This is default. *RubyProf::PROCESS_TIME -
516
+ Measure process time. It is implemented using the clock functions in the C
517
+ Runtime library. *RubyProf::CPU_TIME - Measure time using the CPU clock
518
+ counter. This mode is only supported on Pentium or PowerPC platforms.
519
+ *RubyProf::ALLOCATIONS - Measure object allocations. This requires a
520
+ patched Ruby interpreter. *RubyProf::MEMORY - Measure memory size. This
521
+ requires a patched Ruby interpreter. *RubyProf::GC_RUNS - Measure number of
522
+ garbage collections. This requires a patched Ruby interpreter.
523
+ *RubyProf::GC_TIME - Measure time spent doing garbage collection. This
524
+ requires a patched Ruby interpreter.*/</p>
525
525
 
526
526
 
527
527
 
@@ -559,17 +559,17 @@ collection. This requires a patched Ruby interpreter.*/</p>
559
559
 
560
560
  <p>Specifies what ruby-prof should measure. Valid values include:</p>
561
561
 
562
- <p>*RubyProf::PROCESS_TIME - Measure process time. This is default. It is
563
- implemented using the clock functions in the C Runtime library.
564
- *RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and
565
- GetLocalTime on Windows *RubyProf::CPU_TIME - Measure time using the CPU
566
- clock counter. This mode is only supported on Pentium or PowerPC
567
- platforms. *RubyProf::ALLOCATIONS - Measure object allocations. This
568
- requires a patched Ruby interpreter. *RubyProf::MEMORY - Measure memory
569
- size. This requires a patched Ruby interpreter. *RubyProf::GC_RUNS -
570
- Measure number of garbage collections. This requires a patched Ruby
571
- interpreter. *RubyProf::GC_TIME - Measure time spent doing garbage
572
- collection. This requires a patched Ruby interpreter.*/</p>
562
+ <p>*RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and
563
+ GetLocalTime on Windows. This is default. *RubyProf::PROCESS_TIME -
564
+ Measure process time. It is implemented using the clock functions in the C
565
+ Runtime library. *RubyProf::CPU_TIME - Measure time using the CPU clock
566
+ counter. This mode is only supported on Pentium or PowerPC platforms.
567
+ *RubyProf::ALLOCATIONS - Measure object allocations. This requires a
568
+ patched Ruby interpreter. *RubyProf::MEMORY - Measure memory size. This
569
+ requires a patched Ruby interpreter. *RubyProf::GC_RUNS - Measure number of
570
+ garbage collections. This requires a patched Ruby interpreter.
571
+ *RubyProf::GC_TIME - Measure time spent doing garbage collection. This
572
+ requires a patched Ruby interpreter.*/</p>
573
573
 
574
574
 
575
575
 
@@ -735,7 +735,7 @@ collection. This requires a patched Ruby interpreter.*/</p>
735
735
 
736
736
  <div class="method-heading">
737
737
  <span class="method-name">profile</span><span
738
- class="method-args">(&block)</span>
738
+ class="method-args">(options = {}, &block)</span>
739
739
 
740
740
  <span class="method-click-advice">click to toggle source</span>
741
741
 
@@ -751,12 +751,13 @@ collection. This requires a patched Ruby interpreter.*/</p>
751
751
 
752
752
  <div class="method-source-code" id="profile-source">
753
753
  <pre><span class="ruby-comment"># File lib/ruby-prof/compatibility.rb, line 142</span>
754
- <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
754
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">options</span> = {}, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
755
755
  <span class="ruby-identifier">ensure_not_running!</span>
756
756
  <span class="ruby-identifier">gc_stat_was_enabled</span> = <span class="ruby-identifier">enable_gc_stats_if_needed</span>
757
- <span class="ruby-identifier">res</span> = <span class="ruby-constant">Profile</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">measure_mode</span>, <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exclude_threads</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
757
+ <span class="ruby-identifier">options</span> = { <span class="ruby-identifier">measure_mode</span><span class="ruby-operator">:</span> <span class="ruby-identifier">measure_mode</span>, <span class="ruby-identifier">exclude_threads</span><span class="ruby-operator">:</span> <span class="ruby-identifier">exclude_threads</span> }.<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">options</span>)
758
+ <span class="ruby-identifier">result</span> = <span class="ruby-constant">Profile</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">options</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
758
759
  <span class="ruby-identifier">disable_gc_stats_if_needed</span>(<span class="ruby-identifier">gc_stat_was_enabled</span>)
759
- <span class="ruby-identifier">res</span>
760
+ <span class="ruby-identifier">result</span>
760
761
  <span class="ruby-keyword">end</span></pre>
761
762
  </div>
762
763
 
@@ -862,7 +863,7 @@ collection. This requires a patched Ruby interpreter.*/</p>
862
863
  <pre><span class="ruby-comment"># File lib/ruby-prof/compatibility.rb, line 106</span>
863
864
  <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">start</span>
864
865
  <span class="ruby-identifier">ensure_not_running!</span>
865
- <span class="ruby-ivar">@profile</span> = <span class="ruby-constant">Profile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">measure_mode</span>, <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exclude_threads</span>)
866
+ <span class="ruby-ivar">@profile</span> = <span class="ruby-constant">Profile</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">measure_mode</span><span class="ruby-operator">:</span> <span class="ruby-identifier">measure_mode</span>, <span class="ruby-identifier">exclude_threads</span><span class="ruby-operator">:</span> <span class="ruby-identifier">exclude_threads</span>)
866
867
  <span class="ruby-identifier">enable_gc_stats_if_needed</span>
867
868
  <span class="ruby-ivar">@profile</span>.<span class="ruby-identifier">start</span>
868
869
  <span class="ruby-keyword">end</span></pre>
@@ -955,7 +956,7 @@ collection. This requires a patched Ruby interpreter.*/</p>
955
956
 
956
957
  <footer id="validator-badges" role="contentinfo">
957
958
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
958
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
959
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
959
960
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
960
961
  </footer>
961
962
 
@@ -540,7 +540,7 @@ options.</p>
540
540
 
541
541
  <footer id="validator-badges" role="contentinfo">
542
542
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
543
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
543
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
544
544
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
545
545
  </footer>
546
546
 
@@ -545,7 +545,7 @@
545
545
 
546
546
  <footer id="validator-badges" role="contentinfo">
547
547
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
548
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
548
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
549
549
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
550
550
  </footer>
551
551
 
@@ -633,7 +633,7 @@ merges children of other into children of self.</p>
633
633
 
634
634
  <footer id="validator-badges" role="contentinfo">
635
635
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
636
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
636
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
637
637
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
638
638
  </footer>
639
639
 
@@ -114,7 +114,7 @@ into RubyProf&#39;s internals.</p>
114
114
 
115
115
  <footer id="validator-badges" role="contentinfo">
116
116
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
117
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
117
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
118
118
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
119
119
  </footer>
120
120
 
@@ -192,7 +192,7 @@
192
192
 
193
193
  <footer id="validator-badges" role="contentinfo">
194
194
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
195
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
195
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
196
196
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
197
197
  </footer>
198
198
 
@@ -1115,7 +1115,7 @@ end_title_bar</span>
1115
1115
 
1116
1116
  <footer id="validator-badges" role="contentinfo">
1117
1117
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
1118
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
1118
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
1119
1119
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
1120
1120
  </footer>
1121
1121
 
@@ -70,16 +70,32 @@
70
70
 
71
71
  <ul class="link-list" role="directory">
72
72
 
73
+ <li ><a href="#method-i-base_name">#base_name</a>
74
+
73
75
  <li ><a href="#method-i-convert">#convert</a>
74
76
 
77
+ <li ><a href="#method-i-determine_event_specification_and_value_scale">#determine_event_specification_and_value_scale</a>
78
+
75
79
  <li ><a href="#method-i-file">#file</a>
76
80
 
81
+ <li ><a href="#method-i-file_name_for_thread">#file_name_for_thread</a>
82
+
83
+ <li ><a href="#method-i-file_path_for_thread">#file_path_for_thread</a>
84
+
85
+ <li ><a href="#method-i-path">#path</a>
86
+
77
87
  <li ><a href="#method-i-print">#print</a>
78
88
 
89
+ <li ><a href="#method-i-print_headers">#print_headers</a>
90
+
91
+ <li ><a href="#method-i-print_method">#print_method</a>
92
+
79
93
  <li ><a href="#method-i-print_thread">#print_thread</a>
80
94
 
81
95
  <li ><a href="#method-i-print_threads">#print_threads</a>
82
96
 
97
+ <li ><a href="#method-i-remove_subsidiary_files_from_previous_profile_runs">#remove_subsidiary_files_from_previous_profile_runs</a>
98
+
83
99
  </ul>
84
100
  </div>
85
101
 
@@ -93,9 +109,13 @@
93
109
 
94
110
  <section class="description">
95
111
 
96
- <p>Generate profiling information in calltree format for use by kcachegrind
112
+ <p>Generate profiling information in callgrind format for use by kcachegrind
97
113
  and similar tools.</p>
98
114
 
115
+ <p>Note: when profiling for a callgrind printer, one should use the
116
+ merge_fibers: true option when creating the profile. Otherwise each fiber
117
+ would appear as a separate profile.</p>
118
+
99
119
  </section>
100
120
 
101
121
 
@@ -117,11 +137,11 @@ and similar tools.</p>
117
137
  </header>
118
138
 
119
139
 
120
- <div id="method-i-convert" class="method-detail ">
140
+ <div id="method-i-base_name" class="method-detail ">
121
141
 
122
142
  <div class="method-heading">
123
- <span class="method-name">convert</span><span
124
- class="method-args">(value)</span>
143
+ <span class="method-name">base_name</span><span
144
+ class="method-args">()</span>
125
145
 
126
146
  <span class="method-click-advice">click to toggle source</span>
127
147
 
@@ -135,10 +155,10 @@ and similar tools.</p>
135
155
 
136
156
 
137
157
 
138
- <div class="method-source-code" id="convert-source">
139
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 61</span>
140
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">value</span>)
141
- (<span class="ruby-identifier">value</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@value_scale</span>).<span class="ruby-identifier">round</span>
158
+ <div class="method-source-code" id="base_name-source">
159
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 81</span>
160
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">base_name</span>
161
+ <span class="ruby-ivar">@options</span>[<span class="ruby-value">:profile</span>] <span class="ruby-operator">||</span> <span class="ruby-string">&quot;profile&quot;</span>
142
162
  <span class="ruby-keyword">end</span></pre>
143
163
  </div>
144
164
 
@@ -150,11 +170,11 @@ and similar tools.</p>
150
170
  </div>
151
171
 
152
172
 
153
- <div id="method-i-file" class="method-detail ">
173
+ <div id="method-i-convert" class="method-detail ">
154
174
 
155
175
  <div class="method-heading">
156
- <span class="method-name">file</span><span
157
- class="method-args">(method)</span>
176
+ <span class="method-name">convert</span><span
177
+ class="method-args">(value)</span>
158
178
 
159
179
  <span class="method-click-advice">click to toggle source</span>
160
180
 
@@ -168,10 +188,10 @@ and similar tools.</p>
168
188
 
169
189
 
170
190
 
171
- <div class="method-source-code" id="file-source">
172
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 65</span>
173
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">file</span>(<span class="ruby-identifier">method</span>)
174
- <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">method</span>.<span class="ruby-identifier">source_file</span>)
191
+ <div class="method-source-code" id="convert-source">
192
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 60</span>
193
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">convert</span>(<span class="ruby-identifier">value</span>)
194
+ (<span class="ruby-identifier">value</span> <span class="ruby-operator">*</span> <span class="ruby-ivar">@value_scale</span>).<span class="ruby-identifier">round</span>
175
195
  <span class="ruby-keyword">end</span></pre>
176
196
  </div>
177
197
 
@@ -183,11 +203,11 @@ and similar tools.</p>
183
203
  </div>
184
204
 
185
205
 
186
- <div id="method-i-print" class="method-detail ">
206
+ <div id="method-i-determine_event_specification_and_value_scale" class="method-detail ">
187
207
 
188
208
  <div class="method-heading">
189
- <span class="method-name">print</span><span
190
- class="method-args">(output = STDOUT, options = {})</span>
209
+ <span class="method-name">determine_event_specification_and_value_scale</span><span
210
+ class="method-args">()</span>
191
211
 
192
212
  <span class="method-click-advice">click to toggle source</span>
193
213
 
@@ -196,57 +216,210 @@ and similar tools.</p>
196
216
 
197
217
  <div class="method-description">
198
218
 
199
- <p>Specify print options.</p>
200
-
201
- <p>options - Hash table</p>
202
-
203
- <pre>:min_percent - Number 0 to 100 that specifes the minimum
204
- %self (the methods self time divided by the
205
- overall total time) that a method must take
206
- for it to be printed out in the report.
207
- Default value is 0.
208
-
209
- :print_file - True or false. Specifies if a method&#39;s source
210
- file should be printed. Default value if false.</pre>
211
219
 
212
220
 
213
-
214
221
 
215
- <div class="method-source-code" id="print-source">
216
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 19</span>
217
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">print</span>(<span class="ruby-identifier">output</span> = <span class="ruby-constant">STDOUT</span>, <span class="ruby-identifier">options</span> = {})
218
- <span class="ruby-ivar">@output</span> = <span class="ruby-identifier">output</span>
219
- <span class="ruby-identifier">setup_options</span>(<span class="ruby-identifier">options</span>)
220
222
 
221
- <span class="ruby-comment"># add a header - this information is somewhat arbitrary</span>
222
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;events: &quot;</span>
223
+
224
+ <div class="method-source-code" id="determine_event_specification_and_value_scale-source">
225
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 16</span>
226
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">determine_event_specification_and_value_scale</span>
227
+ <span class="ruby-ivar">@event_specification</span> = <span class="ruby-string">&quot;events: &quot;</span>
223
228
  <span class="ruby-keyword">case</span> <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">measure_mode</span>
224
229
  <span class="ruby-keyword">when</span> <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">PROCESS_TIME</span>
225
- <span class="ruby-ivar">@value_scale</span> = <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">CLOCKS_PER_SEC</span>;
226
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;process_time&#39;</span>
230
+ <span class="ruby-ivar">@value_scale</span> = <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">CLOCKS_PER_SEC</span>
231
+ <span class="ruby-ivar">@event_specification</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;process_time&#39;</span>
227
232
  <span class="ruby-keyword">when</span> <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">WALL_TIME</span>
228
233
  <span class="ruby-ivar">@value_scale</span> = <span class="ruby-value">1_000_000</span>
229
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;wall_time&#39;</span>
234
+ <span class="ruby-ivar">@event_specification</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;wall_time&#39;</span>
230
235
  <span class="ruby-keyword">when</span> <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">const_defined?</span>(<span class="ruby-value">:CPU_TIME</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">CPU_TIME</span>
231
236
  <span class="ruby-ivar">@value_scale</span> = <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">cpu_frequency</span>
232
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;cpu_time&#39;</span>
237
+ <span class="ruby-ivar">@event_specification</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;cpu_time&#39;</span>
233
238
  <span class="ruby-keyword">when</span> <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">const_defined?</span>(<span class="ruby-value">:ALLOCATIONS</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">ALLOCATIONS</span>
234
239
  <span class="ruby-ivar">@value_scale</span> = <span class="ruby-value">1</span>
235
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;allocations&#39;</span>
240
+ <span class="ruby-ivar">@event_specification</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;allocations&#39;</span>
236
241
  <span class="ruby-keyword">when</span> <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">const_defined?</span>(<span class="ruby-value">:MEMORY</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">MEMORY</span>
237
242
  <span class="ruby-ivar">@value_scale</span> = <span class="ruby-value">1</span>
238
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;memory&#39;</span>
243
+ <span class="ruby-ivar">@event_specification</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;memory&#39;</span>
239
244
  <span class="ruby-keyword">when</span> <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">const_defined?</span>(<span class="ruby-value">:GC_RUNS</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">GC_RUNS</span>
240
245
  <span class="ruby-ivar">@value_scale</span> = <span class="ruby-value">1</span>
241
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;gc_runs&#39;</span>
246
+ <span class="ruby-ivar">@event_specification</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;gc_runs&#39;</span>
242
247
  <span class="ruby-keyword">when</span> <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">const_defined?</span>(<span class="ruby-value">:GC_TIME</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">GC_TIME</span>
243
248
  <span class="ruby-ivar">@value_scale</span> = <span class="ruby-value">1000000</span>
244
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;gc_time&#39;</span>
249
+ <span class="ruby-ivar">@event_specification</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&#39;gc_time&#39;</span>
245
250
  <span class="ruby-keyword">else</span>
246
251
  <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Unknown measure mode: #{RubyProf.measure_mode}&quot;</span>
247
252
  <span class="ruby-keyword">end</span>
248
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n\n&quot;</span>
253
+ <span class="ruby-keyword">end</span></pre>
254
+ </div>
255
+
256
+ </div>
257
+
258
+
259
+
260
+
261
+ </div>
262
+
263
+
264
+ <div id="method-i-file" class="method-detail ">
265
+
266
+ <div class="method-heading">
267
+ <span class="method-name">file</span><span
268
+ class="method-args">(method)</span>
269
+
270
+ <span class="method-click-advice">click to toggle source</span>
271
+
272
+ </div>
273
+
274
+
275
+ <div class="method-description">
276
+
277
+
278
+
279
+
280
+
281
+
282
+ <div class="method-source-code" id="file-source">
283
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 64</span>
284
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">file</span>(<span class="ruby-identifier">method</span>)
285
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">method</span>.<span class="ruby-identifier">source_file</span>)
286
+ <span class="ruby-keyword">end</span></pre>
287
+ </div>
288
+
289
+ </div>
290
+
291
+
292
+
293
+
294
+ </div>
295
+
296
+
297
+ <div id="method-i-file_name_for_thread" class="method-detail ">
298
+
299
+ <div class="method-heading">
300
+ <span class="method-name">file_name_for_thread</span><span
301
+ class="method-args">(thread)</span>
302
+
303
+ <span class="method-click-advice">click to toggle source</span>
304
+
305
+ </div>
306
+
307
+
308
+ <div class="method-description">
309
+
310
+
311
+
312
+
313
+
314
+
315
+ <div class="method-source-code" id="file_name_for_thread-source">
316
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 91</span>
317
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">file_name_for_thread</span>(<span class="ruby-identifier">thread</span>)
318
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">thread</span>.<span class="ruby-identifier">fiber_id</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Fiber</span>.<span class="ruby-identifier">current</span>.<span class="ruby-identifier">object_id</span>
319
+ [<span class="ruby-identifier">base_name</span>, <span class="ruby-string">&quot;callgrind.out&quot;</span>, <span class="ruby-identifier">$$</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
320
+ <span class="ruby-keyword">else</span>
321
+ [<span class="ruby-identifier">base_name</span>, <span class="ruby-string">&quot;callgrind.out&quot;</span>, <span class="ruby-identifier">$$</span>, <span class="ruby-identifier">thread</span>.<span class="ruby-identifier">fiber_id</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
322
+ <span class="ruby-keyword">end</span>
323
+ <span class="ruby-keyword">end</span></pre>
324
+ </div>
325
+
326
+ </div>
327
+
328
+
329
+
330
+
331
+ </div>
332
+
333
+
334
+ <div id="method-i-file_path_for_thread" class="method-detail ">
335
+
336
+ <div class="method-heading">
337
+ <span class="method-name">file_path_for_thread</span><span
338
+ class="method-args">(thread)</span>
339
+
340
+ <span class="method-click-advice">click to toggle source</span>
341
+
342
+ </div>
343
+
344
+
345
+ <div class="method-description">
346
+
347
+
348
+
349
+
350
+
351
+
352
+ <div class="method-source-code" id="file_path_for_thread-source">
353
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 99</span>
354
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">file_path_for_thread</span>(<span class="ruby-identifier">thread</span>)
355
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">file_name_for_thread</span>(<span class="ruby-identifier">thread</span>))
356
+ <span class="ruby-keyword">end</span></pre>
357
+ </div>
358
+
359
+ </div>
360
+
361
+
362
+
363
+
364
+ </div>
365
+
366
+
367
+ <div id="method-i-path" class="method-detail ">
368
+
369
+ <div class="method-heading">
370
+ <span class="method-name">path</span><span
371
+ class="method-args">()</span>
372
+
373
+ <span class="method-click-advice">click to toggle source</span>
374
+
375
+ </div>
376
+
377
+
378
+ <div class="method-description">
379
+
380
+
381
+
382
+
383
+
384
+
385
+ <div class="method-source-code" id="path-source">
386
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 77</span>
387
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">path</span>
388
+ <span class="ruby-ivar">@options</span>[<span class="ruby-value">:path</span>] <span class="ruby-operator">||</span> <span class="ruby-string">&quot;.&quot;</span>
389
+ <span class="ruby-keyword">end</span></pre>
390
+ </div>
391
+
392
+ </div>
393
+
394
+
395
+
396
+
397
+ </div>
398
+
399
+
400
+ <div id="method-i-print" class="method-detail ">
401
+
402
+ <div class="method-heading">
403
+ <span class="method-name">print</span><span
404
+ class="method-args">(options = {})</span>
405
+
406
+ <span class="method-click-advice">click to toggle source</span>
407
+
408
+ </div>
409
+
249
410
 
411
+ <div class="method-description">
412
+
413
+
414
+
415
+
416
+
417
+
418
+ <div class="method-source-code" id="print-source">
419
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 45</span>
420
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">print</span>(<span class="ruby-identifier">options</span> = {})
421
+ <span class="ruby-identifier">setup_options</span>(<span class="ruby-identifier">options</span>)
422
+ <span class="ruby-identifier">determine_event_specification_and_value_scale</span>
250
423
  <span class="ruby-identifier">print_threads</span>
251
424
  <span class="ruby-keyword">end</span></pre>
252
425
  </div>
@@ -256,6 +429,90 @@ and similar tools.</p>
256
429
 
257
430
 
258
431
 
432
+ </div>
433
+
434
+
435
+ <div id="method-i-print_headers" class="method-detail ">
436
+
437
+ <div class="method-heading">
438
+ <span class="method-name">print_headers</span><span
439
+ class="method-args">(output, thread)</span>
440
+
441
+ <span class="method-click-advice">click to toggle source</span>
442
+
443
+ </div>
444
+
445
+
446
+ <div class="method-description">
447
+
448
+
449
+
450
+
451
+
452
+
453
+ <div class="method-source-code" id="print_headers-source">
454
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 103</span>
455
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_headers</span>(<span class="ruby-identifier">output</span>, <span class="ruby-identifier">thread</span>)
456
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{@event_specification}\n\n&quot;</span>
457
+ <span class="ruby-comment"># this doesn&#39;t work. kcachegrind does not fully support the spec.</span>
458
+ <span class="ruby-comment"># output &lt;&lt; &quot;thread: #{thread.id}\n\n&quot;</span>
459
+ <span class="ruby-keyword">end</span></pre>
460
+ </div>
461
+
462
+ </div>
463
+
464
+
465
+
466
+
467
+ </div>
468
+
469
+
470
+ <div id="method-i-print_method" class="method-detail ">
471
+
472
+ <div class="method-heading">
473
+ <span class="method-name">print_method</span><span
474
+ class="method-args">(output, method)</span>
475
+
476
+ <span class="method-click-advice">click to toggle source</span>
477
+
478
+ </div>
479
+
480
+
481
+ <div class="method-description">
482
+
483
+
484
+
485
+
486
+
487
+
488
+ <div class="method-source-code" id="print_method-source">
489
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 109</span>
490
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_method</span>(<span class="ruby-identifier">output</span>, <span class="ruby-identifier">method</span>)
491
+ <span class="ruby-comment"># Print out the file and method name</span>
492
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;fl=#{file(method)}\n&quot;</span>
493
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;fn=#{method_name(method)}\n&quot;</span>
494
+
495
+ <span class="ruby-comment"># Now print out the function line number and its self time</span>
496
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{method.line} #{convert(method.self_time)}\n&quot;</span>
497
+
498
+ <span class="ruby-comment"># Now print out all the children methods</span>
499
+ <span class="ruby-identifier">method</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">callee</span><span class="ruby-operator">|</span>
500
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;cfl=#{file(callee.target)}\n&quot;</span>
501
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;cfn=#{method_name(callee.target)}\n&quot;</span>
502
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;calls=#{callee.called} #{callee.line}\n&quot;</span>
503
+
504
+ <span class="ruby-comment"># Print out total times here!</span>
505
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{callee.line} #{convert(callee.total_time)}\n&quot;</span>
506
+ <span class="ruby-keyword">end</span>
507
+ <span class="ruby-identifier">output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>
508
+ <span class="ruby-keyword">end</span></pre>
509
+ </div>
510
+
511
+ </div>
512
+
513
+
514
+
515
+
259
516
  </div>
260
517
 
261
518
 
@@ -278,26 +535,13 @@ and similar tools.</p>
278
535
 
279
536
 
280
537
  <div class="method-source-code" id="print_thread-source">
281
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 69</span>
538
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 68</span>
282
539
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_thread</span>(<span class="ruby-identifier">thread</span>)
283
- <span class="ruby-identifier">thread</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">method</span><span class="ruby-operator">|</span>
284
- <span class="ruby-comment"># Print out the file and method name</span>
285
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;fl=#{file(method)}\n&quot;</span>
286
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;fn=#{method_name(method)}\n&quot;</span>
287
-
288
- <span class="ruby-comment"># Now print out the function line number and its self time</span>
289
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{method.line} #{convert(method.self_time)}\n&quot;</span>
290
-
291
- <span class="ruby-comment"># Now print out all the children methods</span>
292
- <span class="ruby-identifier">method</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">callee</span><span class="ruby-operator">|</span>
293
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;cfl=#{file(callee.target)}\n&quot;</span>
294
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;cfn=#{method_name(callee.target)}\n&quot;</span>
295
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;calls=#{callee.called} #{callee.line}\n&quot;</span>
296
-
297
- <span class="ruby-comment"># Print out total times here!</span>
298
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;#{callee.line} #{convert(callee.total_time)}\n&quot;</span>
540
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">file_path_for_thread</span>(<span class="ruby-identifier">thread</span>), <span class="ruby-string">&quot;w&quot;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
541
+ <span class="ruby-identifier">print_headers</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">thread</span>)
542
+ <span class="ruby-identifier">thread</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">reverse_each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">method</span><span class="ruby-operator">|</span>
543
+ <span class="ruby-identifier">print_method</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">method</span>)
299
544
  <span class="ruby-keyword">end</span>
300
- <span class="ruby-ivar">@output</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;\n&quot;</span>
301
545
  <span class="ruby-keyword">end</span>
302
546
  <span class="ruby-keyword">end</span></pre>
303
547
  </div>
@@ -329,8 +573,11 @@ and similar tools.</p>
329
573
 
330
574
 
331
575
  <div class="method-source-code" id="print_threads-source">
332
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 55</span>
576
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 51</span>
333
577
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_threads</span>
578
+ <span class="ruby-identifier">remove_subsidiary_files_from_previous_profile_runs</span>
579
+ <span class="ruby-comment"># TODO: merge fibers of a given thread here, instead of relying</span>
580
+ <span class="ruby-comment"># on the profiler to merge fibers.</span>
334
581
  <span class="ruby-ivar">@result</span>.<span class="ruby-identifier">threads</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">thread</span><span class="ruby-operator">|</span>
335
582
  <span class="ruby-identifier">print_thread</span>(<span class="ruby-identifier">thread</span>)
336
583
  <span class="ruby-keyword">end</span>
@@ -342,6 +589,41 @@ and similar tools.</p>
342
589
 
343
590
 
344
591
 
592
+ </div>
593
+
594
+
595
+ <div id="method-i-remove_subsidiary_files_from_previous_profile_runs" class="method-detail ">
596
+
597
+ <div class="method-heading">
598
+ <span class="method-name">remove_subsidiary_files_from_previous_profile_runs</span><span
599
+ class="method-args">()</span>
600
+
601
+ <span class="method-click-advice">click to toggle source</span>
602
+
603
+ </div>
604
+
605
+
606
+ <div class="method-description">
607
+
608
+
609
+
610
+
611
+
612
+
613
+ <div class="method-source-code" id="remove_subsidiary_files_from_previous_profile_runs-source">
614
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/call_tree_printer.rb, line 85</span>
615
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">remove_subsidiary_files_from_previous_profile_runs</span>
616
+ <span class="ruby-identifier">pattern</span> = [<span class="ruby-identifier">base_name</span>, <span class="ruby-string">&quot;callgrind.out&quot;</span>, <span class="ruby-identifier">$$</span>, <span class="ruby-string">&quot;*&quot;</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&quot;.&quot;</span>)
617
+ <span class="ruby-identifier">files</span> = <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">pattern</span>))
618
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm_f</span>(<span class="ruby-identifier">files</span>)
619
+ <span class="ruby-keyword">end</span></pre>
620
+ </div>
621
+
622
+ </div>
623
+
624
+
625
+
626
+
345
627
  </div>
346
628
 
347
629
 
@@ -353,7 +635,7 @@ and similar tools.</p>
353
635
 
354
636
  <footer id="validator-badges" role="contentinfo">
355
637
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
356
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
638
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
357
639
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
358
640
  </footer>
359
641