ruby-prof 0.16.2 → 0.17.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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +15 -0
  3. data/README.rdoc +36 -5
  4. data/bin/ruby-prof +7 -2
  5. data/doc/LICENSE.html +2 -1
  6. data/doc/README_rdoc.html +42 -8
  7. data/doc/Rack.html +2 -1
  8. data/doc/Rack/RubyProf.html +25 -18
  9. data/doc/Rack/RubyProf/RackProfiler.html +343 -0
  10. data/doc/RubyProf.html +14 -2
  11. data/doc/RubyProf/AbstractPrinter.html +91 -12
  12. data/doc/RubyProf/AggregateCallInfo.html +2 -1
  13. data/doc/RubyProf/CallInfo.html +18 -78
  14. data/doc/RubyProf/CallInfoPrinter.html +2 -1
  15. data/doc/RubyProf/CallInfoVisitor.html +2 -1
  16. data/doc/RubyProf/CallStackPrinter.html +35 -29
  17. data/doc/RubyProf/CallTreePrinter.html +98 -14
  18. data/doc/RubyProf/Cmd.html +11 -5
  19. data/doc/RubyProf/DeprecationWarnings.html +148 -0
  20. data/doc/RubyProf/DotPrinter.html +2 -1
  21. data/doc/RubyProf/FlatPrinter.html +2 -1
  22. data/doc/RubyProf/FlatPrinterWithLineNumbers.html +7 -5
  23. data/doc/RubyProf/GraphHtmlPrinter.html +18 -12
  24. data/doc/RubyProf/GraphPrinter.html +2 -1
  25. data/doc/RubyProf/MethodInfo.html +19 -88
  26. data/doc/RubyProf/MultiPrinter.html +231 -17
  27. data/doc/RubyProf/Profile.html +184 -39
  28. data/doc/RubyProf/Profile/ExcludeCommonMethods.html +411 -0
  29. data/doc/RubyProf/Profile/LegacyMethodElimination.html +158 -0
  30. data/doc/RubyProf/ProfileTask.html +2 -1
  31. data/doc/RubyProf/Thread.html +4 -39
  32. data/doc/created.rid +21 -19
  33. data/doc/css/fonts.css +6 -6
  34. data/doc/examples/flat_txt.html +2 -1
  35. data/doc/examples/graph_html.html +2 -1
  36. data/doc/examples/graph_txt.html +2 -1
  37. data/doc/index.html +47 -7
  38. data/doc/js/darkfish.js +7 -7
  39. data/doc/js/search_index.js +1 -1
  40. data/doc/js/search_index.js.gz +0 -0
  41. data/doc/js/searcher.js +1 -0
  42. data/doc/js/searcher.js.gz +0 -0
  43. data/doc/table_of_contents.html +190 -80
  44. data/ext/ruby_prof/extconf.rb +4 -0
  45. data/ext/ruby_prof/rp_call_info.c +19 -1
  46. data/ext/ruby_prof/rp_call_info.h +8 -3
  47. data/ext/ruby_prof/rp_method.c +282 -57
  48. data/ext/ruby_prof/rp_method.h +28 -5
  49. data/ext/ruby_prof/rp_stack.c +69 -24
  50. data/ext/ruby_prof/rp_stack.h +21 -9
  51. data/ext/ruby_prof/rp_thread.c +4 -1
  52. data/ext/ruby_prof/ruby_prof.c +142 -39
  53. data/ext/ruby_prof/ruby_prof.h +3 -0
  54. data/lib/ruby-prof.rb +10 -0
  55. data/lib/ruby-prof/call_info.rb +0 -11
  56. data/lib/ruby-prof/method_info.rb +4 -12
  57. data/lib/ruby-prof/printers/abstract_printer.rb +19 -1
  58. data/lib/ruby-prof/printers/call_info_printer.rb +1 -1
  59. data/lib/ruby-prof/printers/call_stack_printer.rb +9 -4
  60. data/lib/ruby-prof/printers/call_tree_printer.rb +15 -2
  61. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +23 -4
  62. data/lib/ruby-prof/printers/graph_html_printer.rb +10 -5
  63. data/lib/ruby-prof/printers/graph_printer.rb +2 -2
  64. data/lib/ruby-prof/printers/multi_printer.rb +44 -18
  65. data/lib/ruby-prof/profile.rb +13 -42
  66. data/lib/ruby-prof/profile/exclude_common_methods.rb +201 -0
  67. data/lib/ruby-prof/profile/legacy_method_elimination.rb +49 -0
  68. data/lib/ruby-prof/rack.rb +130 -51
  69. data/lib/ruby-prof/thread.rb +0 -6
  70. data/lib/ruby-prof/version.rb +1 -1
  71. data/ruby-prof.gemspec +4 -3
  72. data/test/aggregate_test.rb +1 -1
  73. data/test/exclude_methods_test.rb +146 -0
  74. data/test/line_number_test.rb +12 -3
  75. data/test/multi_printer_test.rb +23 -2
  76. data/test/no_method_class_test.rb +1 -1
  77. data/test/printers_test.rb +21 -1
  78. data/test/rack_test.rb +64 -0
  79. data/test/recursive_test.rb +15 -15
  80. data/test/test_helper.rb +11 -0
  81. metadata +20 -13
@@ -8,6 +8,7 @@
8
8
 
9
9
  <script type="text/javascript">
10
10
  var rdoc_rel_prefix = "../";
11
+ var index_rel_prefix = "../";
11
12
  </script>
12
13
 
13
14
  <script src="../js/jquery.js"></script>
@@ -70,6 +71,8 @@
70
71
 
71
72
  <ul class="link-list" role="directory">
72
73
 
74
+ <li ><a href="#method-c-needs_dir-3F">::needs_dir?</a>
75
+
73
76
  <li ><a href="#method-c-new">::new</a>
74
77
 
75
78
  <li ><a href="#method-i-flat_profile">#flat_profile</a>
@@ -78,10 +81,20 @@
78
81
 
79
82
  <li ><a href="#method-i-print">#print</a>
80
83
 
84
+ <li ><a href="#method-i-print_to_flat">#print_to_flat</a>
85
+
86
+ <li ><a href="#method-i-print_to_graph">#print_to_graph</a>
87
+
88
+ <li ><a href="#method-i-print_to_stack">#print_to_stack</a>
89
+
90
+ <li ><a href="#method-i-print_to_tree">#print_to_tree</a>
91
+
81
92
  <li ><a href="#method-i-stack_profile">#stack_profile</a>
82
93
 
83
94
  <li ><a href="#method-i-tree_profile">#tree_profile</a>
84
95
 
96
+ <li ><a href="#method-i-validate_print_params">#validate_print_params</a>
97
+
85
98
  </ul>
86
99
  </div>
87
100
 
@@ -120,11 +133,44 @@ stack profile and a graph profile.</p>
120
133
  </header>
121
134
 
122
135
 
136
+ <div id="method-c-needs_dir-3F" class="method-detail ">
137
+
138
+ <div class="method-heading">
139
+ <span class="method-name">needs_dir?</span><span
140
+ class="method-args">()</span>
141
+
142
+ <span class="method-click-advice">click to toggle source</span>
143
+
144
+ </div>
145
+
146
+
147
+ <div class="method-description">
148
+
149
+
150
+
151
+
152
+
153
+
154
+ <div class="method-source-code" id="needs_dir-3F-source">
155
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 14</span>
156
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">needs_dir?</span>
157
+ <span class="ruby-keyword">true</span>
158
+ <span class="ruby-keyword">end</span></pre>
159
+ </div>
160
+
161
+ </div>
162
+
163
+
164
+
165
+
166
+ </div>
167
+
168
+
123
169
  <div id="method-c-new" class="method-detail ">
124
170
 
125
171
  <div class="method-heading">
126
172
  <span class="method-name">new</span><span
127
- class="method-args">(result)</span>
173
+ class="method-args">(result, printers = [:stack, :graph, :tree, :flat])</span>
128
174
 
129
175
  <span class="method-click-advice">click to toggle source</span>
130
176
 
@@ -140,11 +186,11 @@ stack profile and a graph profile.</p>
140
186
 
141
187
  <div class="method-source-code" id="new-source">
142
188
  <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 7</span>
143
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">result</span>)
144
- <span class="ruby-ivar">@stack_printer</span> = <span class="ruby-constant">CallStackPrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>)
145
- <span class="ruby-ivar">@graph_printer</span> = <span class="ruby-constant">GraphHtmlPrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>)
146
- <span class="ruby-ivar">@tree_printer</span> = <span class="ruby-constant">CallTreePrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>)
147
- <span class="ruby-ivar">@flat_printer</span> = <span class="ruby-constant">FlatPrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>)
189
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">result</span>, <span class="ruby-identifier">printers</span> = [<span class="ruby-value">:stack</span>, <span class="ruby-value">:graph</span>, <span class="ruby-value">:tree</span>, <span class="ruby-value">:flat</span>])
190
+ <span class="ruby-ivar">@stack_printer</span> = <span class="ruby-constant">CallStackPrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">printers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:stack</span>)
191
+ <span class="ruby-ivar">@graph_printer</span> = <span class="ruby-constant">GraphHtmlPrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">printers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:graph</span>)
192
+ <span class="ruby-ivar">@tree_printer</span> = <span class="ruby-constant">CallTreePrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">printers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:tree</span>)
193
+ <span class="ruby-ivar">@flat_printer</span> = <span class="ruby-constant">FlatPrinter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">result</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">printers</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:flat</span>)
148
194
  <span class="ruby-keyword">end</span></pre>
149
195
  </div>
150
196
 
@@ -183,7 +229,7 @@ stack profile and a graph profile.</p>
183
229
 
184
230
 
185
231
  <div class="method-source-code" id="flat_profile-source">
186
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 52</span>
232
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 49</span>
187
233
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">flat_profile</span>
188
234
  <span class="ruby-node">&quot;#{@directory}/#{@profile}.flat.txt&quot;</span>
189
235
  <span class="ruby-keyword">end</span></pre>
@@ -216,7 +262,7 @@ stack profile and a graph profile.</p>
216
262
 
217
263
 
218
264
  <div class="method-source-code" id="graph_profile-source">
219
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 42</span>
265
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 39</span>
220
266
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">graph_profile</span>
221
267
  <span class="ruby-node">&quot;#{@directory}/#{@profile}.graph.html&quot;</span>
222
268
  <span class="ruby-keyword">end</span></pre>
@@ -251,23 +297,121 @@ pofile file, defaults to “profile”.</p>
251
297
 
252
298
 
253
299
  <div class="method-source-code" id="print-source">
254
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 17</span>
300
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 21</span>
255
301
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">print</span>(<span class="ruby-identifier">options</span>)
302
+ <span class="ruby-identifier">validate_print_params</span>(<span class="ruby-identifier">options</span>)
303
+
256
304
  <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
305
  <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
306
 
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>
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>))
307
+ <span class="ruby-identifier">print_to_stack</span>(<span class="ruby-identifier">options</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@stack_printer</span>
308
+ <span class="ruby-identifier">print_to_graph</span>(<span class="ruby-identifier">options</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@graph_printer</span>
309
+ <span class="ruby-identifier">print_to_tree</span>(<span class="ruby-identifier">options</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@tree_printer</span>
310
+ <span class="ruby-identifier">print_to_flat</span>(<span class="ruby-identifier">options</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@flat_printer</span>
311
+ <span class="ruby-keyword">end</span></pre>
312
+ </div>
313
+
314
+ </div>
315
+
316
+
317
+
318
+
319
+ </div>
320
+
321
+
322
+ <div id="method-i-print_to_flat" class="method-detail ">
323
+
324
+ <div class="method-heading">
325
+ <span class="method-name">print_to_flat</span><span
326
+ class="method-args">(options)</span>
327
+
328
+ <span class="method-click-advice">click to toggle source</span>
329
+
330
+ </div>
331
+
332
+
333
+ <div class="method-description">
334
+
335
+
336
+
337
+
338
+
339
+
340
+ <div class="method-source-code" id="print_to_flat-source">
341
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 69</span>
342
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_to_flat</span>(<span class="ruby-identifier">options</span>)
343
+ <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>
344
+ <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>)
261
345
  <span class="ruby-keyword">end</span>
346
+ <span class="ruby-keyword">end</span></pre>
347
+ </div>
348
+
349
+ </div>
350
+
351
+
352
+
353
+
354
+ </div>
355
+
356
+
357
+ <div id="method-i-print_to_graph" class="method-detail ">
358
+
359
+ <div class="method-heading">
360
+ <span class="method-name">print_to_graph</span><span
361
+ class="method-args">(options)</span>
362
+
363
+ <span class="method-click-advice">click to toggle source</span>
364
+
365
+ </div>
366
+
262
367
 
368
+ <div class="method-description">
369
+
370
+
371
+
372
+
373
+
374
+
375
+ <div class="method-source-code" id="print_to_graph-source">
376
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 59</span>
377
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_to_graph</span>(<span class="ruby-identifier">options</span>)
263
378
  <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>
264
379
  <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>)
265
380
  <span class="ruby-keyword">end</span>
381
+ <span class="ruby-keyword">end</span></pre>
382
+ </div>
383
+
384
+ </div>
266
385
 
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>))
386
+
268
387
 
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>
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>)
388
+
389
+ </div>
390
+
391
+
392
+ <div id="method-i-print_to_stack" class="method-detail ">
393
+
394
+ <div class="method-heading">
395
+ <span class="method-name">print_to_stack</span><span
396
+ class="method-args">(options)</span>
397
+
398
+ <span class="method-click-advice">click to toggle source</span>
399
+
400
+ </div>
401
+
402
+
403
+ <div class="method-description">
404
+
405
+
406
+
407
+
408
+
409
+
410
+ <div class="method-source-code" id="print_to_stack-source">
411
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 53</span>
412
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_to_stack</span>(<span class="ruby-identifier">options</span>)
413
+ <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>
414
+ <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>))
271
415
  <span class="ruby-keyword">end</span>
272
416
  <span class="ruby-keyword">end</span></pre>
273
417
  </div>
@@ -277,6 +421,39 @@ pofile file, defaults to “profile”.</p>
277
421
 
278
422
 
279
423
 
424
+ </div>
425
+
426
+
427
+ <div id="method-i-print_to_tree" class="method-detail ">
428
+
429
+ <div class="method-heading">
430
+ <span class="method-name">print_to_tree</span><span
431
+ class="method-args">(options)</span>
432
+
433
+ <span class="method-click-advice">click to toggle source</span>
434
+
435
+ </div>
436
+
437
+
438
+ <div class="method-description">
439
+
440
+
441
+
442
+
443
+
444
+
445
+ <div class="method-source-code" id="print_to_tree-source">
446
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 65</span>
447
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">print_to_tree</span>(<span class="ruby-identifier">options</span>)
448
+ <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>))
449
+ <span class="ruby-keyword">end</span></pre>
450
+ </div>
451
+
452
+ </div>
453
+
454
+
455
+
456
+
280
457
  </div>
281
458
 
282
459
 
@@ -299,7 +476,7 @@ pofile file, defaults to “profile”.</p>
299
476
 
300
477
 
301
478
  <div class="method-source-code" id="stack_profile-source">
302
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 37</span>
479
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 34</span>
303
480
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">stack_profile</span>
304
481
  <span class="ruby-node">&quot;#{@directory}/#{@profile}.stack.html&quot;</span>
305
482
  <span class="ruby-keyword">end</span></pre>
@@ -332,7 +509,7 @@ pofile file, defaults to “profile”.</p>
332
509
 
333
510
 
334
511
  <div class="method-source-code" id="tree_profile-source">
335
- <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 47</span>
512
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 44</span>
336
513
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">tree_profile</span>
337
514
  <span class="ruby-node">&quot;#{@directory}/#{@profile}.callgrind.out.#{$$}&quot;</span>
338
515
  <span class="ruby-keyword">end</span></pre>
@@ -343,6 +520,43 @@ pofile file, defaults to “profile”.</p>
343
520
 
344
521
 
345
522
 
523
+ </div>
524
+
525
+
526
+ <div id="method-i-validate_print_params" class="method-detail ">
527
+
528
+ <div class="method-heading">
529
+ <span class="method-name">validate_print_params</span><span
530
+ class="method-args">(options)</span>
531
+
532
+ <span class="method-click-advice">click to toggle source</span>
533
+
534
+ </div>
535
+
536
+
537
+ <div class="method-description">
538
+
539
+
540
+
541
+
542
+
543
+
544
+ <div class="method-source-code" id="validate_print_params-source">
545
+ <pre><span class="ruby-comment"># File lib/ruby-prof/printers/multi_printer.rb, line 75</span>
546
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">validate_print_params</span>(<span class="ruby-identifier">options</span>)
547
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">IO</span>)
548
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;#{self.class.name}#print cannot print to IO objects&quot;</span>
549
+ <span class="ruby-keyword">elsif</span> <span class="ruby-operator">!</span><span class="ruby-identifier">options</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
550
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;#{self.class.name}#print requires an options hash&quot;</span>
551
+ <span class="ruby-keyword">end</span>
552
+ <span class="ruby-keyword">end</span></pre>
553
+ </div>
554
+
555
+ </div>
556
+
557
+
558
+
559
+
346
560
  </div>
347
561
 
348
562
 
@@ -354,7 +568,7 @@ pofile file, defaults to “profile”.</p>
354
568
 
355
569
  <footer id="validator-badges" role="contentinfo">
356
570
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
357
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
571
+ <p>Generated by <a href="https://rdoc.github.io/rdoc">RDoc</a> 5.1.0.
358
572
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
359
573
  </footer>
360
574
 
@@ -8,6 +8,7 @@
8
8
 
9
9
  <script type="text/javascript">
10
10
  var rdoc_rel_prefix = "../";
11
+ var index_rel_prefix = "../";
11
12
  </script>
12
13
 
13
14
  <script src="../js/jquery.js"></script>
@@ -62,7 +63,18 @@
62
63
 
63
64
  </div>
64
65
 
65
-
66
+ <div id="includes-section" class="nav-section">
67
+ <h3>Included Modules</h3>
68
+
69
+ <ul class="link-list">
70
+
71
+
72
+ <li><a class="include" href="Profile/LegacyMethodElimination.html">RubyProf::Profile::LegacyMethodElimination</a>
73
+
74
+
75
+ </ul>
76
+ </div>
77
+
66
78
 
67
79
  <!-- Method Quickref -->
68
80
  <div id="method-list-section" class="nav-section">
@@ -74,13 +86,19 @@
74
86
 
75
87
  <li ><a href="#method-c-profile">::profile</a>
76
88
 
77
- <li ><a href="#method-i-eliminate_methods-21">#eliminate_methods!</a>
89
+ <li ><a href="#method-i-exclude_common_methods-21">#exclude_common_methods!</a>
90
+
91
+ <li ><a href="#method-i-exclude_method-21">#exclude_method!</a>
92
+
93
+ <li ><a href="#method-i-exclude_methods-21">#exclude_methods!</a>
94
+
95
+ <li ><a href="#method-i-exclude_singleton_methods-21">#exclude_singleton_methods!</a>
78
96
 
79
97
  <li ><a href="#method-i-pause">#pause</a>
80
98
 
81
99
  <li ><a href="#method-i-paused-3F">#paused?</a>
82
100
 
83
- <li ><a href="#method-i-post_process">#post_process</a>
101
+ <li ><a href="#method-i-profile">#profile</a>
84
102
 
85
103
  <li ><a href="#method-i-resume">#resume</a>
86
104
 
@@ -180,6 +198,7 @@ prof_initialize(int argc, VALUE *argv, VALUE self)
180
198
  VALUE exclude_threads = Qnil;
181
199
  VALUE include_threads = Qnil;
182
200
  VALUE merge_fibers = Qnil;
201
+ VALUE exclude_common = Qnil;
183
202
  int i;
184
203
 
185
204
  switch (rb_scan_args(argc, argv, &quot;02&quot;, &amp;mode_or_options, &amp;exclude_threads)) {
@@ -193,6 +212,7 @@ prof_initialize(int argc, VALUE *argv, VALUE self)
193
212
  Check_Type(mode_or_options, T_HASH);
194
213
  mode = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;measure_mode&quot;)));
195
214
  merge_fibers = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;merge_fibers&quot;)));
215
+ exclude_common = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;exclude_common&quot;)));
196
216
  exclude_threads = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;exclude_threads&quot;)));
197
217
  include_threads = rb_hash_aref(mode_or_options, ID2SYM(rb_intern(&quot;include_threads&quot;)));
198
218
  }
@@ -232,6 +252,10 @@ prof_initialize(int argc, VALUE *argv, VALUE self)
232
252
  }
233
253
  }
234
254
 
255
+ if (RTEST(exclude_common)) {
256
+ prof_exclude_common_methods(self);
257
+ }
258
+
235
259
  return self;
236
260
  }</pre>
237
261
  </div>
@@ -276,7 +300,7 @@ href="Profile.html">RubyProf::Profile</a> object. Arguments are passed to
276
300
 
277
301
  <div class="method-source-code" id="profile-source">
278
302
  <pre>static VALUE
279
- prof_profile(int argc, VALUE *argv, VALUE klass)
303
+ prof_profile_class(int argc, VALUE *argv, VALUE klass)
280
304
  {
281
305
  int result;
282
306
  VALUE profile = rb_class_new_instance(argc, argv, cProfile);
@@ -308,11 +332,98 @@ prof_profile(int argc, VALUE *argv, VALUE klass)
308
332
  </header>
309
333
 
310
334
 
311
- <div id="method-i-eliminate_methods-21" class="method-detail ">
335
+ <div id="method-i-exclude_common_methods-21" class="method-detail ">
336
+
337
+ <div class="method-heading">
338
+ <span class="method-name">exclude_common_methods!</span><span
339
+ class="method-args">()</span>
340
+
341
+ <span class="method-click-advice">click to toggle source</span>
342
+
343
+ </div>
344
+
345
+
346
+ <div class="method-description">
347
+
348
+ <p>Hides methods that, when represented as a call graph, have extremely large
349
+ in and out degrees and make navigation impossible.</p>
350
+
351
+
352
+
353
+
354
+ <div class="method-source-code" id="exclude_common_methods-21-source">
355
+ <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 11</span>
356
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">exclude_common_methods!</span>
357
+ <span class="ruby-constant">ExcludeCommonMethods</span>.<span class="ruby-identifier">apply!</span>(<span class="ruby-keyword">self</span>)
358
+ <span class="ruby-keyword">end</span></pre>
359
+ </div>
360
+
361
+ </div>
362
+
363
+
364
+
365
+
366
+ </div>
367
+
368
+
369
+ <div id="method-i-exclude_method-21" class="method-detail ">
370
+
371
+ <div class="method-heading">
372
+ <span class="method-name">exclude_method!</span><span
373
+ class="method-args">(p1, p2)</span>
374
+
375
+ <span class="method-click-advice">click to toggle source</span>
376
+
377
+ </div>
378
+
379
+
380
+ <div class="method-description">
381
+
382
+
383
+
384
+
385
+
386
+
387
+ <div class="method-source-code" id="exclude_method-21-source">
388
+ <pre>static VALUE
389
+ prof_exclude_method(VALUE self, VALUE klass, VALUE sym)
390
+ {
391
+ prof_profile_t* profile = prof_get_profile(self);
392
+ ID mid = SYM2ID(sym);
393
+
394
+ prof_method_key_t key;
395
+ prof_method_t *method;
396
+
397
+ if (profile-&gt;running == Qtrue)
398
+ {
399
+ rb_raise(rb_eRuntimeError, &quot;RubyProf.start was already called&quot;);
400
+ }
401
+
402
+ method_key(&amp;key, klass, mid);
403
+ method = method_table_lookup(profile-&gt;exclude_methods_tbl, &amp;key);
404
+
405
+ if (!method) {
406
+ method = prof_method_create_excluded(klass, mid);
407
+ method_table_insert(profile-&gt;exclude_methods_tbl, method-&gt;key, method);
408
+ }
409
+
410
+ return self;
411
+ }</pre>
412
+ </div>
413
+
414
+ </div>
415
+
416
+
417
+
418
+
419
+ </div>
420
+
421
+
422
+ <div id="method-i-exclude_methods-21" class="method-detail ">
312
423
 
313
424
  <div class="method-heading">
314
- <span class="method-name">eliminate_methods!</span><span
315
- class="method-args">(matchers)</span>
425
+ <span class="method-name">exclude_methods!</span><span
426
+ class="method-args">(mod, *method_or_methods)</span>
316
427
 
317
428
  <span class="method-click-advice">click to toggle source</span>
318
429
 
@@ -321,22 +432,50 @@ prof_profile(int argc, VALUE *argv, VALUE klass)
321
432
 
322
433
  <div class="method-description">
323
434
 
324
- <p>eliminate some calls from the graph by merging the information into
325
- callers. matchers can be a list of strings or regular expressions or the
326
- name of a file containing regexps.</p>
435
+
327
436
 
328
437
 
329
438
 
330
439
 
331
- <div class="method-source-code" id="eliminate_methods-21-source">
440
+ <div class="method-source-code" id="exclude_methods-21-source">
332
441
  <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 15</span>
333
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">eliminate_methods!</span>(<span class="ruby-identifier">matchers</span>)
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>)
335
- <span class="ruby-identifier">eliminated</span> = []
336
- <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>
337
- <span class="ruby-identifier">matchers</span>.<span class="ruby-identifier">each</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">matcher</span><span class="ruby-operator">|</span> <span class="ruby-identifier">eliminated</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">eliminate_methods</span>(<span class="ruby-identifier">thread</span>.<span class="ruby-identifier">methods</span>, <span class="ruby-identifier">matcher</span>)) }
442
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">exclude_methods!</span>(<span class="ruby-identifier">mod</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">method_or_methods</span>)
443
+ [<span class="ruby-identifier">method_or_methods</span>].<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span>
444
+ <span class="ruby-identifier">exclude_method!</span>(<span class="ruby-identifier">mod</span>, <span class="ruby-identifier">name</span>)
338
445
  <span class="ruby-keyword">end</span>
339
- <span class="ruby-identifier">eliminated</span>
446
+ <span class="ruby-keyword">end</span></pre>
447
+ </div>
448
+
449
+ </div>
450
+
451
+
452
+
453
+
454
+ </div>
455
+
456
+
457
+ <div id="method-i-exclude_singleton_methods-21" class="method-detail ">
458
+
459
+ <div class="method-heading">
460
+ <span class="method-name">exclude_singleton_methods!</span><span
461
+ class="method-args">(mod, *method_or_methods)</span>
462
+
463
+ <span class="method-click-advice">click to toggle source</span>
464
+
465
+ </div>
466
+
467
+
468
+ <div class="method-description">
469
+
470
+
471
+
472
+
473
+
474
+
475
+ <div class="method-source-code" id="exclude_singleton_methods-21-source">
476
+ <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 21</span>
477
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">exclude_singleton_methods!</span>(<span class="ruby-identifier">mod</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">method_or_methods</span>)
478
+ <span class="ruby-identifier">exclude_methods!</span>(<span class="ruby-identifier">mod</span>.<span class="ruby-identifier">singleton_class</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">method_or_methods</span>)
340
479
  <span class="ruby-keyword">end</span></pre>
341
480
  </div>
342
481
 
@@ -436,33 +575,42 @@ prof_paused(VALUE self)
436
575
  </div>
437
576
 
438
577
 
439
- <div id="method-i-post_process" class="method-detail ">
578
+ <div id="method-i-profile" class="method-detail ">
579
+
440
580
 
441
581
  <div class="method-heading">
442
- <span class="method-name">post_process</span><span
443
- class="method-args">()</span>
582
+ <span class="method-callseq">
583
+ profile {block} &rarr; RubyProf::Result
584
+ </span>
444
585
 
445
586
  <span class="method-click-advice">click to toggle source</span>
446
587
 
447
588
  </div>
448
589
 
590
+
449
591
 
450
592
  <div class="method-description">
451
593
 
452
- <p>This method gets called once profiling has been completed but before
453
- results are returned to the user. Thus it provides a hook to do any
454
- necessary post-processing on the call graph.</p>
594
+ <p>Profiles the specified block and returns a RubyProf::Result object.</p>
455
595
 
456
596
 
457
597
 
458
598
 
459
- <div class="method-source-code" id="post_process-source">
460
- <pre><span class="ruby-comment"># File lib/ruby-prof/profile.rb, line 7</span>
461
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">post_process</span>
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>
463
- <span class="ruby-identifier">thread</span>.<span class="ruby-identifier">detect_recursion</span>
464
- <span class="ruby-keyword">end</span>
465
- <span class="ruby-keyword">end</span></pre>
599
+ <div class="method-source-code" id="profile-source">
600
+ <pre>static VALUE
601
+ prof_profile_object(VALUE self)
602
+ {
603
+ int result;
604
+ if (!rb_block_given_p())
605
+ {
606
+ rb_raise(rb_eArgError, &quot;A block must be provided to the profile method.&quot;);
607
+ }
608
+
609
+ prof_start(self);
610
+ rb_protect(rb_yield, self, &amp;result);
611
+ return prof_stop(self);
612
+
613
+ }</pre>
466
614
  </div>
467
615
 
468
616
  </div>
@@ -669,11 +817,11 @@ prof_stop(VALUE self)
669
817
  {
670
818
  rb_raise(rb_eRuntimeError, &quot;RubyProf.start was not yet called&quot;);
671
819
  }
672
-
673
- prof_remove_hook();
820
+
821
+ prof_remove_hook(self);
674
822
 
675
823
  /* close trace file if open */
676
- if (trace_file != NULL)
824
+ if (trace_file != NULL)
677
825
  {
678
826
  if (trace_file !=stderr &amp;&amp; trace_file != stdout)
679
827
  {
@@ -685,7 +833,7 @@ prof_stop(VALUE self)
685
833
  }
686
834
  trace_file = NULL;
687
835
  }
688
-
836
+
689
837
  prof_pop_threads(profile);
690
838
 
691
839
  /* Unset the last_thread_data (very important!)
@@ -693,9 +841,6 @@ prof_stop(VALUE self)
693
841
  profile-&gt;running = profile-&gt;paused = Qfalse;
694
842
  profile-&gt;last_thread_data = NULL;
695
843
 
696
- /* Post process result */
697
- rb_funcall(self, rb_intern(&quot;post_process&quot;) , 0);
698
-
699
844
  return self;
700
845
  }</pre>
701
846
  </div>
@@ -713,7 +858,7 @@ prof_stop(VALUE self)
713
858
 
714
859
  <div class="method-heading">
715
860
  <span class="method-callseq">
716
- threads &rarr; array of RubyProf::Thread
861
+ threads &rarr; Array of RubyProf::Thread
717
862
  </span>
718
863
 
719
864
  <span class="method-click-advice">click to toggle source</span>
@@ -757,7 +902,7 @@ prof_threads(VALUE self)
757
902
 
758
903
  <footer id="validator-badges" role="contentinfo">
759
904
  <p><a href="http://validator.w3.org/check/referer">Validate</a>
760
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
905
+ <p>Generated by <a href="https://rdoc.github.io/rdoc">RDoc</a> 5.1.0.
761
906
  <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
762
907
  </footer>
763
908