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
@@ -331,8 +331,8 @@
331
331
  <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">on</span>(<span class="ruby-string">&#39;--mode=measure_mode&#39;</span>,
332
332
  [<span class="ruby-value">:process</span>, <span class="ruby-value">:wall</span>, <span class="ruby-value">:cpu</span>, <span class="ruby-value">:allocations</span>, <span class="ruby-value">:memory</span>, <span class="ruby-value">:gc_runs</span>, <span class="ruby-value">:gc_time</span>],
333
333
  <span class="ruby-string">&#39;Select what ruby-prof should measure:&#39;</span>,
334
- <span class="ruby-string">&#39; process - Process time (default).&#39;</span>,
335
- <span class="ruby-string">&#39; wall - Wall time.&#39;</span>,
334
+ <span class="ruby-string">&#39; wall - Wall time (default).&#39;</span>,
335
+ <span class="ruby-string">&#39; process - Process time.&#39;</span>,
336
336
  <span class="ruby-string">&#39; cpu - CPU time (Pentium and PowerPCs only).&#39;</span>,
337
337
  <span class="ruby-string">&#39; allocations - Object allocations (requires patched Ruby interpreter).&#39;</span>,
338
338
  <span class="ruby-string">&#39; memory - Allocated memory in KB (requires patched Ruby interpreter).&#39;</span>,
@@ -340,10 +340,10 @@
340
340
  <span class="ruby-string">&#39; gc_time - Time spent in garbage collection (requires patched Ruby interpreter).&#39;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">measure_mode</span><span class="ruby-operator">|</span>
341
341
 
342
342
  <span class="ruby-keyword">case</span> <span class="ruby-identifier">measure_mode</span>
343
- <span class="ruby-keyword">when</span> <span class="ruby-value">:process</span>
344
- <span class="ruby-identifier">options</span>.<span class="ruby-identifier">measure_mode</span> = <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">PROCESS_TIME</span>
345
343
  <span class="ruby-keyword">when</span> <span class="ruby-value">:wall</span>
346
344
  <span class="ruby-identifier">options</span>.<span class="ruby-identifier">measure_mode</span> = <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">WALL_TIME</span>
345
+ <span class="ruby-keyword">when</span> <span class="ruby-value">:process</span>
346
+ <span class="ruby-identifier">options</span>.<span class="ruby-identifier">measure_mode</span> = <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">PROCESS_TIME</span>
347
347
  <span class="ruby-keyword">when</span> <span class="ruby-value">:cpu</span>
348
348
  <span class="ruby-identifier">options</span>.<span class="ruby-identifier">measure_mode</span> = <span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-constant">CPU_TIME</span>
349
349
  <span class="ruby-keyword">when</span> <span class="ruby-value">:allocations</span>
@@ -625,7 +625,7 @@
625
625
 
626
626
  <footer id="validator-badges" role="contentinfo">
627
627
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
628
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
628
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
629
629
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
630
630
  </footer>
631
631
 
@@ -155,7 +155,7 @@ tool to reformat the output into a wide variety of outputs:</p>
155
155
  <div class="method-description">
156
156
 
157
157
  <p>Creates the <a href="DotPrinter.html">DotPrinter</a> using a
158
- RubyProf::Result.</p>
158
+ RubyProf::Proile.</p>
159
159
 
160
160
 
161
161
  <div class="method-calls-super">
@@ -251,7 +251,7 @@ to use the :min_percent option, for example:</p>
251
251
 
252
252
  <footer id="validator-badges" role="contentinfo">
253
253
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
254
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
254
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
255
255
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
256
256
  </footer>
257
257
 
@@ -157,7 +157,7 @@ printer.print(STDOUT, {})</pre>
157
157
 
158
158
  <footer id="validator-badges" role="contentinfo">
159
159
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
160
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
160
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
161
161
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
162
162
  </footer>
163
163
 
@@ -202,7 +202,7 @@ printer.print(STDOUT, {})</pre>
202
202
 
203
203
  <footer id="validator-badges" role="contentinfo">
204
204
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
205
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
205
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
206
206
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
207
207
  </footer>
208
208
 
@@ -546,7 +546,7 @@ be printed out.</p>
546
546
 
547
547
  <footer id="validator-badges" role="contentinfo">
548
548
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
549
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
549
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
550
550
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
551
551
  </footer>
552
552
 
@@ -133,7 +133,7 @@ href="../README_rdoc.html">README</a></p>
133
133
 
134
134
  <footer id="validator-badges" role="contentinfo">
135
135
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
136
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
136
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
137
137
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
138
138
  </footer>
139
139
 
@@ -643,7 +643,7 @@
643
643
  <div class="method-source-code" id="to_s-source">
644
644
  <pre><span class="ruby-comment"># File lib/ruby-prof/method_info.rb, line 116</span>
645
645
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">to_s</span>
646
- <span class="ruby-node">&quot;#{self.full_name} (c: #{self.called}, tt: #{self.total_time}, st: #{self.self_time}, ct: #{self.children_time})&quot;</span>
646
+ <span class="ruby-node">&quot;#{self.full_name} (c: #{self.called}, tt: #{self.total_time}, st: #{self.self_time}, wt: #{wait_time}, ct: #{self.children_time})&quot;</span>
647
647
  <span class="ruby-keyword">end</span></pre>
648
648
  </div>
649
649
 
@@ -739,7 +739,7 @@
739
739
 
740
740
  <footer id="validator-badges" role="contentinfo">
741
741
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
742
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
742
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
743
743
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
744
744
  </footer>
745
745
 
@@ -183,7 +183,7 @@ stack profile and a graph profile.</p>
183
183
 
184
184
 
185
185
  <div class="method-source-code" id="flat_profile-source">
186
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 50</span>
186
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 52</span>
187
187
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">flat_profile</span>
188
188
  <span class="ruby-node">&quot;#{@directory}/#{@profile}.flat.txt&quot;</span>
189
189
  <span class="ruby-keyword">end</span></pre>
@@ -216,7 +216,7 @@ stack profile and a graph profile.</p>
216
216
 
217
217
 
218
218
  <div class="method-source-code" id="graph_profile-source">
219
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 40</span>
219
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 42</span>
220
220
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">graph_profile</span>
221
221
  <span class="ruby-node">&quot;#{@directory}/#{@profile}.graph.html&quot;</span>
222
222
  <span class="ruby-keyword">end</span></pre>
@@ -255,15 +255,17 @@ pofile file, defaults to “profile”.</p>
255
255
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">print</span>(<span class="ruby-identifier">options</span>)
256
256
  <span class="ruby-ivar">@profile</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value">:profile</span>) <span class="ruby-operator">||</span> <span class="ruby-string">&quot;profile&quot;</span>
257
257
  <span class="ruby-ivar">@directory</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-value">:path</span>) <span class="ruby-operator">||</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-string">&quot;.&quot;</span>)
258
+
258
259
  <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">stack_profile</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>
259
260
  <span class="ruby-ivar">@stack_printer</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-value">:graph</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{@profile}.graph.html&quot;</span>))
260
261
  <span class="ruby-keyword">end</span>
262
+
261
263
  <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">graph_profile</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>
262
264
  <span class="ruby-ivar">@graph_printer</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">options</span>)
263
265
  <span class="ruby-keyword">end</span>
264
- <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">tree_profile</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>
265
- <span class="ruby-ivar">@tree_printer</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">options</span>)
266
- <span class="ruby-keyword">end</span>
266
+
267
+ <span class="ruby-ivar">@tree_printer</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-value">:path</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@directory</span>, <span class="ruby-value">:profile</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@profile</span>))
268
+
267
269
  <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">flat_profile</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>
268
270
  <span class="ruby-ivar">@flat_printer</span>.<span class="ruby-identifier">print</span>(<span class="ruby-identifier">f</span>, <span class="ruby-identifier">options</span>)
269
271
  <span class="ruby-keyword">end</span>
@@ -297,7 +299,7 @@ pofile file, defaults to “profile”.</p>
297
299
 
298
300
 
299
301
  <div class="method-source-code" id="stack_profile-source">
300
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 35</span>
302
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 37</span>
301
303
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">stack_profile</span>
302
304
  <span class="ruby-node">&quot;#{@directory}/#{@profile}.stack.html&quot;</span>
303
305
  <span class="ruby-keyword">end</span></pre>
@@ -330,9 +332,9 @@ pofile file, defaults to “profile”.</p>
330
332
 
331
333
 
332
334
  <div class="method-source-code" id="tree_profile-source">
333
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 45</span>
335
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 47</span>
334
336
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">tree_profile</span>
335
- <span class="ruby-node">&quot;#{@directory}/#{@profile}.grind.dat&quot;</span>
337
+ <span class="ruby-node">&quot;#{@directory}/#{@profile}.callgrind.out.#{$$}&quot;</span>
336
338
  <span class="ruby-keyword">end</span></pre>
337
339
  </div>
338
340
 
@@ -352,7 +354,7 @@ pofile file, defaults to “profile”.</p>
352
354
 
353
355
  <footer id="validator-badges" role="contentinfo">
354
356
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
355
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
357
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
356
358
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
357
359
  </footer>
358
360
 
@@ -131,27 +131,40 @@
131
131
 
132
132
  <div class="method-heading">
133
133
  <span class="method-callseq">
134
- RubyProf::Profile.new(mode, exclude_threads) &rarr; instance
134
+ new()
135
135
  </span>
136
136
 
137
137
  <span class="method-click-advice">click to toggle source</span>
138
138
 
139
139
  </div>
140
140
 
141
+ <div class="method-heading">
142
+ <span class="method-callseq">
143
+ new(options)
144
+ </span>
145
+
146
+ </div>
147
+
141
148
 
142
149
 
143
150
  <div class="method-description">
144
151
 
145
- <p>Returns a new profiler.</p>
146
-
147
- <h2 id="method-c-new-label-Parameters">Parameters<span><a href="#method-c-new-label-Parameters">&para;</a> <a href="#top">&uarr;</a></span></h2>
148
- <dl class="rdoc-list note-list"><dt>mode
152
+ <p>Returns a new profiler. Possible options for the options hash are:</p>
153
+ <dl class="rdoc-list note-list"><dt>measure_mode
149
154
  <dd>
150
- <p>Measure mode (optional). Specifies the profile measure mode. If not
151
- specified, defaults to RubyProf::WALL_TIME.</p>
155
+ <p>Measure mode. Specifies the profile measure mode. If not specified,
156
+ defaults to RubyProf::WALL_TIME.</p>
152
157
  </dd><dt>exclude_threads
153
158
  <dd>
154
- <p>Threads to exclude from the profiling results (optional).</p>
159
+ <p>Threads to exclude from the profiling results.</p>
160
+ </dd><dt>include_threads
161
+ <dd>
162
+ <p>Focus profiling on only the given threads. This will ignore all other
163
+ threads.</p>
164
+ </dd><dt>merge_fibers
165
+ <dd>
166
+ <p>Whether to merge all fibers under a given thread. This should be used when
167
+ profiling for a callgrind printer.</p>
155
168
  </dd></dl>
156
169
 
157
170
 
@@ -162,40 +175,61 @@ specified, defaults to RubyProf::WALL_TIME.</p>
162
175
  prof_initialize(int argc, VALUE *argv, VALUE self)
163
176
  {
164
177
  prof_profile_t* profile = prof_get_profile(self);
165
- VALUE mode;
166
- prof_measure_mode_t measurer = MEASURE_WALL_TIME;
167
- VALUE exclude_threads;
178
+ VALUE mode_or_options;
179
+ VALUE mode = Qnil;
180
+ VALUE exclude_threads = Qnil;
181
+ VALUE include_threads = Qnil;
182
+ VALUE merge_fibers = Qnil;
168
183
  int i;
169
-
170
- switch (rb_scan_args(argc, argv, &quot;02&quot;, &amp;mode, &amp;exclude_threads))
171
- {
172
- case 0:
173
- {
174
- measurer = MEASURE_WALL_TIME;
175
- exclude_threads = rb_ary_new();
184
+
185
+ switch (rb_scan_args(argc, argv, &quot;02&quot;, &amp;mode_or_options, &amp;exclude_threads)) {
186
+ case 0:
176
187
  break;
177
- }
178
- case 1:
179
- {
180
- measurer = (prof_measure_mode_t)NUM2INT(mode);
181
- exclude_threads = rb_ary_new();
188
+ case 1:
189
+ if (FIXNUM_P(mode_or_options)) {
190
+ mode = mode_or_options;
191
+ }
192
+ else {
193
+ Check_Type(mode_or_options, T_HASH);
194
+ mode = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;measure_mode&quot;)));
195
+ merge_fibers = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;merge_fibers&quot;)));
196
+ exclude_threads = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;exclude_threads&quot;)));
197
+ include_threads = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;include_threads&quot;)));
198
+ }
182
199
  break;
183
- }
184
- case 2:
185
- {
200
+ case 2:
186
201
  Check_Type(exclude_threads, T_ARRAY);
187
- measurer = (prof_measure_mode_t)NUM2INT(mode);
188
202
  break;
189
- }
190
203
  }
191
204
 
192
- profile-&gt;measurer = prof_get_measurer(measurer);
205
+ if (mode == Qnil) {
206
+ mode = INT2NUM(MEASURE_WALL_TIME);
207
+ } else {
208
+ Check_Type(mode, T_FIXNUM);
209
+ }
210
+ profile-&gt;measurer = prof_get_measurer(NUM2INT(mode));
211
+ profile-&gt;merge_fibers = merge_fibers != Qnil &amp;&amp; merge_fibers != Qfalse;
193
212
 
194
- for (i = 0; i &lt; RARRAY_LEN(exclude_threads); i++)
195
- {
196
- VALUE thread = rb_ary_entry(exclude_threads, i);
197
- VALUE thread_id = rb_obj_id(thread);
198
- st_insert(profile-&gt;exclude_threads_tbl, thread_id, Qtrue);
213
+ if (exclude_threads != Qnil) {
214
+ Check_Type(exclude_threads, T_ARRAY);
215
+ assert(profile-&gt;exclude_threads_tbl == NULL);
216
+ profile-&gt;exclude_threads_tbl = threads_table_create();
217
+ for (i = 0; i &lt; RARRAY_LEN(exclude_threads); i++) {
218
+ VALUE thread = rb_ary_entry(exclude_threads, i);
219
+ VALUE thread_id = rb_obj_id(thread);
220
+ st_insert(profile-&gt;exclude_threads_tbl, thread_id, Qtrue);
221
+ }
222
+ }
223
+
224
+ if (include_threads != Qnil) {
225
+ Check_Type(include_threads, T_ARRAY);
226
+ assert(profile-&gt;include_threads_tbl == NULL);
227
+ profile-&gt;include_threads_tbl = threads_table_create();
228
+ for (i = 0; i &lt; RARRAY_LEN(include_threads); i++) {
229
+ VALUE thread = rb_ary_entry(include_threads, i);
230
+ VALUE thread_id = rb_obj_id(thread);
231
+ st_insert(profile-&gt;include_threads_tbl, thread_id, Qtrue);
232
+ }
199
233
  }
200
234
 
201
235
  return self;
@@ -215,18 +249,27 @@ prof_initialize(int argc, VALUE *argv, VALUE self)
215
249
 
216
250
  <div class="method-heading">
217
251
  <span class="method-callseq">
218
- profile {block} &rarr; RubyProf::Result
252
+ profile(&amp;block) &rarr; self
219
253
  </span>
220
254
 
221
255
  <span class="method-click-advice">click to toggle source</span>
222
256
 
223
257
  </div>
224
258
 
259
+ <div class="method-heading">
260
+ <span class="method-callseq">
261
+ profile(options, &amp;block) &rarr; self
262
+ </span>
263
+
264
+ </div>
265
+
225
266
 
226
267
 
227
268
  <div class="method-description">
228
269
 
229
- <p>Profiles the specified block and returns a RubyProf::Result object.</p>
270
+ <p>Profiles the specified block and returns a <a
271
+ href="Profile.html">RubyProf::Profile</a> object. Arguments are passed to
272
+ <a href="Profile.html">Profile</a> initialize method.</p>
230
273
 
231
274
 
232
275
 
@@ -286,7 +329,7 @@ name of a file containing regexps.</p>
286
329
 
287
330
 
288
331
  <div class="method-source-code" id="eliminate_methods-21-source">
289
- <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 16</span>
332
+ <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 15</span>
290
333
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">eliminate_methods!</span>(<span class="ruby-identifier">matchers</span>)
291
334
  <span class="ruby-identifier">matchers</span> = <span class="ruby-identifier">read_regexps_from_file</span>(<span class="ruby-identifier">matchers</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">matchers</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
292
335
  <span class="ruby-identifier">eliminated</span> = []
@@ -310,7 +353,7 @@ name of a file containing regexps.</p>
310
353
 
311
354
  <div class="method-heading">
312
355
  <span class="method-callseq">
313
- pause &rarr; RubyProf
356
+ pause &rarr; self
314
357
  </span>
315
358
 
316
359
  <span class="method-click-advice">click to toggle source</span>
@@ -414,7 +457,7 @@ necessary post-processing on the call graph.</p>
414
457
 
415
458
 
416
459
  <div class="method-source-code" id="post_process-source">
417
- <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 8</span>
460
+ <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 7</span>
418
461
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">post_process</span>
419
462
  <span class="ruby-keyword">self</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>
420
463
  <span class="ruby-identifier">thread</span>.<span class="ruby-identifier">detect_recursion</span>
@@ -435,13 +478,20 @@ necessary post-processing on the call graph.</p>
435
478
 
436
479
  <div class="method-heading">
437
480
  <span class="method-callseq">
438
- resume {block} &rarr; RubyProf
481
+ resume &rarr; self
439
482
  </span>
440
483
 
441
484
  <span class="method-click-advice">click to toggle source</span>
442
485
 
443
486
  </div>
444
487
 
488
+ <div class="method-heading">
489
+ <span class="method-callseq">
490
+ resume(&amp;block) &rarr; self
491
+ </span>
492
+
493
+ </div>
494
+
445
495
 
446
496
 
447
497
  <div class="method-description">
@@ -523,7 +573,7 @@ prof_running(VALUE self)
523
573
 
524
574
  <div class="method-heading">
525
575
  <span class="method-callseq">
526
- start &rarr; RubyProf
576
+ start &rarr; self
527
577
  </span>
528
578
 
529
579
  <span class="method-click-advice">click to toggle source</span>
@@ -663,7 +713,7 @@ prof_stop(VALUE self)
663
713
 
664
714
  <div class="method-heading">
665
715
  <span class="method-callseq">
666
- threads &rarr; Array of RubyProf::Thread
716
+ threads &rarr; array of RubyProf::Thread
667
717
  </span>
668
718
 
669
719
  <span class="method-click-advice">click to toggle source</span>
@@ -684,7 +734,7 @@ that were executed while the the program was being run.</p>
684
734
  <pre>static VALUE
685
735
  prof_threads(VALUE self)
686
736
  {
687
- VALUE result = rb_ary_new();
737
+ VALUE result = rb_ary_new();
688
738
  prof_profile_t* profile = prof_get_profile(self);
689
739
  st_foreach(profile-&gt;threads_tbl, collect_threads, result);
690
740
  return result;
@@ -707,7 +757,7 @@ prof_threads(VALUE self)
707
757
 
708
758
  <footer id="validator-badges" role="contentinfo">
709
759
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
710
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
760
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
711
761
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
712
762
  </footer>
713
763
 
@@ -484,7 +484,7 @@ allows Test::Unit options to be passed to the test suite.</p>
484
484
 
485
485
  <footer id="validator-badges" role="contentinfo">
486
486
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
487
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
487
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
488
488
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
489
489
  </footer>
490
490
 
@@ -78,6 +78,8 @@
78
78
 
79
79
  <li ><a href="#method-i-total_time">#total_time</a>
80
80
 
81
+ <li ><a href="#method-i-wait_time">#wait_time</a>
82
+
81
83
  </ul>
82
84
  </div>
83
85
 
@@ -251,6 +253,46 @@ should be called only once for each thread</p>
251
253
 
252
254
 
253
255
 
256
+ </div>
257
+
258
+
259
+ <div id="method-i-wait_time" class="method-detail ">
260
+
261
+ <div class="method-heading">
262
+ <span class="method-name">wait_time</span><span
263
+ class="method-args">()</span>
264
+
265
+ <span class="method-click-advice">click to toggle source</span>
266
+
267
+ </div>
268
+
269
+
270
+ <div class="method-description">
271
+
272
+
273
+
274
+
275
+
276
+
277
+ <div class="method-source-code" id="wait_time-source">
278
+ <pre><span class="ruby-comment"># File lib/ruby-prof/thread.rb, line 30</span>
279
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">wait_time</span>
280
+ <span class="ruby-comment"># wait_time, like self:time, is always method local</span>
281
+ <span class="ruby-comment"># thus we need to sum over all methods and call infos</span>
282
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">inject</span>(<span class="ruby-value">0</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sum</span>, <span class="ruby-identifier">method_info</span><span class="ruby-operator">|</span>
283
+ <span class="ruby-identifier">method_info</span>.<span class="ruby-identifier">call_infos</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">call_info</span><span class="ruby-operator">|</span>
284
+ <span class="ruby-identifier">sum</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">call_info</span>.<span class="ruby-identifier">wait_time</span>
285
+ <span class="ruby-keyword">end</span>
286
+ <span class="ruby-identifier">sum</span>
287
+ <span class="ruby-keyword">end</span>
288
+ <span class="ruby-keyword">end</span></pre>
289
+ </div>
290
+
291
+ </div>
292
+
293
+
294
+
295
+
254
296
  </div>
255
297
 
256
298
 
@@ -262,7 +304,7 @@ should be called only once for each thread</p>
262
304
 
263
305
  <footer id="validator-badges" role="contentinfo">
264
306
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
265
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
307
+ <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
266
308
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
267
309
  </footer>
268
310