ruby-prof 0.15.9 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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