ruby-prof 0.16.2 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
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