ruby-prof 0.18.0-x64-mingw32

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 (108) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +500 -0
  3. data/LICENSE +25 -0
  4. data/README.rdoc +487 -0
  5. data/Rakefile +113 -0
  6. data/bin/ruby-prof +345 -0
  7. data/bin/ruby-prof-check-trace +45 -0
  8. data/examples/flat.txt +50 -0
  9. data/examples/graph.dot +84 -0
  10. data/examples/graph.html +823 -0
  11. data/examples/graph.txt +139 -0
  12. data/examples/multi.flat.txt +23 -0
  13. data/examples/multi.graph.html +760 -0
  14. data/examples/multi.grind.dat +114 -0
  15. data/examples/multi.stack.html +547 -0
  16. data/examples/stack.html +547 -0
  17. data/ext/ruby_prof/extconf.rb +68 -0
  18. data/ext/ruby_prof/rp_call_info.c +425 -0
  19. data/ext/ruby_prof/rp_call_info.h +53 -0
  20. data/ext/ruby_prof/rp_measure.c +40 -0
  21. data/ext/ruby_prof/rp_measure.h +45 -0
  22. data/ext/ruby_prof/rp_measure_allocations.c +76 -0
  23. data/ext/ruby_prof/rp_measure_cpu_time.c +136 -0
  24. data/ext/ruby_prof/rp_measure_gc_runs.c +73 -0
  25. data/ext/ruby_prof/rp_measure_gc_time.c +60 -0
  26. data/ext/ruby_prof/rp_measure_memory.c +77 -0
  27. data/ext/ruby_prof/rp_measure_process_time.c +71 -0
  28. data/ext/ruby_prof/rp_measure_wall_time.c +45 -0
  29. data/ext/ruby_prof/rp_method.c +630 -0
  30. data/ext/ruby_prof/rp_method.h +75 -0
  31. data/ext/ruby_prof/rp_stack.c +173 -0
  32. data/ext/ruby_prof/rp_stack.h +63 -0
  33. data/ext/ruby_prof/rp_thread.c +277 -0
  34. data/ext/ruby_prof/rp_thread.h +27 -0
  35. data/ext/ruby_prof/ruby_prof.c +794 -0
  36. data/ext/ruby_prof/ruby_prof.h +60 -0
  37. data/ext/ruby_prof/vc/ruby_prof.sln +31 -0
  38. data/ext/ruby_prof/vc/ruby_prof.vcxproj +141 -0
  39. data/lib/2.6.3/ruby_prof.so +0 -0
  40. data/lib/ruby-prof.rb +68 -0
  41. data/lib/ruby-prof/aggregate_call_info.rb +76 -0
  42. data/lib/ruby-prof/assets/call_stack_printer.css.html +117 -0
  43. data/lib/ruby-prof/assets/call_stack_printer.js.html +385 -0
  44. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  45. data/lib/ruby-prof/call_info.rb +115 -0
  46. data/lib/ruby-prof/call_info_visitor.rb +40 -0
  47. data/lib/ruby-prof/compatibility.rb +179 -0
  48. data/lib/ruby-prof/method_info.rb +121 -0
  49. data/lib/ruby-prof/printers/abstract_printer.rb +104 -0
  50. data/lib/ruby-prof/printers/call_info_printer.rb +41 -0
  51. data/lib/ruby-prof/printers/call_stack_printer.rb +265 -0
  52. data/lib/ruby-prof/printers/call_tree_printer.rb +143 -0
  53. data/lib/ruby-prof/printers/dot_printer.rb +132 -0
  54. data/lib/ruby-prof/printers/flat_printer.rb +70 -0
  55. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +83 -0
  56. data/lib/ruby-prof/printers/graph_html_printer.rb +249 -0
  57. data/lib/ruby-prof/printers/graph_printer.rb +116 -0
  58. data/lib/ruby-prof/printers/multi_printer.rb +84 -0
  59. data/lib/ruby-prof/profile.rb +26 -0
  60. data/lib/ruby-prof/profile/exclude_common_methods.rb +207 -0
  61. data/lib/ruby-prof/profile/legacy_method_elimination.rb +50 -0
  62. data/lib/ruby-prof/rack.rb +174 -0
  63. data/lib/ruby-prof/task.rb +147 -0
  64. data/lib/ruby-prof/thread.rb +35 -0
  65. data/lib/ruby-prof/version.rb +3 -0
  66. data/lib/unprof.rb +10 -0
  67. data/ruby-prof.gemspec +58 -0
  68. data/test/abstract_printer_test.rb +53 -0
  69. data/test/aggregate_test.rb +136 -0
  70. data/test/basic_test.rb +128 -0
  71. data/test/block_test.rb +74 -0
  72. data/test/call_info_test.rb +78 -0
  73. data/test/call_info_visitor_test.rb +31 -0
  74. data/test/duplicate_names_test.rb +32 -0
  75. data/test/dynamic_method_test.rb +55 -0
  76. data/test/enumerable_test.rb +21 -0
  77. data/test/exceptions_test.rb +24 -0
  78. data/test/exclude_methods_test.rb +146 -0
  79. data/test/exclude_threads_test.rb +53 -0
  80. data/test/fiber_test.rb +79 -0
  81. data/test/issue137_test.rb +63 -0
  82. data/test/line_number_test.rb +80 -0
  83. data/test/measure_allocations_test.rb +26 -0
  84. data/test/measure_cpu_time_test.rb +212 -0
  85. data/test/measure_gc_runs_test.rb +32 -0
  86. data/test/measure_gc_time_test.rb +36 -0
  87. data/test/measure_memory_test.rb +33 -0
  88. data/test/measure_process_time_test.rb +61 -0
  89. data/test/measure_wall_time_test.rb +255 -0
  90. data/test/method_elimination_test.rb +84 -0
  91. data/test/module_test.rb +45 -0
  92. data/test/multi_printer_test.rb +104 -0
  93. data/test/no_method_class_test.rb +15 -0
  94. data/test/pause_resume_test.rb +166 -0
  95. data/test/prime.rb +54 -0
  96. data/test/printers_test.rb +275 -0
  97. data/test/printing_recursive_graph_test.rb +127 -0
  98. data/test/rack_test.rb +157 -0
  99. data/test/recursive_test.rb +215 -0
  100. data/test/singleton_test.rb +38 -0
  101. data/test/stack_printer_test.rb +77 -0
  102. data/test/stack_test.rb +138 -0
  103. data/test/start_stop_test.rb +112 -0
  104. data/test/test_helper.rb +267 -0
  105. data/test/thread_test.rb +187 -0
  106. data/test/unique_call_path_test.rb +202 -0
  107. data/test/yarv_test.rb +55 -0
  108. metadata +199 -0
@@ -0,0 +1,139 @@
1
+ = Graph Profiles
2
+
3
+ Graph profiles show how long each method runs, which methods call it and which
4
+ methods it calls.
5
+
6
+ As an example, here is the output from running printers_test.rb:
7
+
8
+ Measure Mode: wall_time
9
+ Thread ID: 70310439543100
10
+ Fiber ID: 70310456289620
11
+ Total Time: 0.05264616012573242
12
+ Sort by: total_time
13
+
14
+ %total %self total self wait child calls name
15
+ --------------------------------------------------------------------------------
16
+ 100.00% 0.01% 0.053 0.000 0.000 0.053 1 PrintersTest#setup
17
+ 0.053 0.000 0.000 0.053 1/1 Object#run_primes
18
+ --------------------------------------------------------------------------------
19
+ 0.053 0.000 0.000 0.053 1/1 PrintersTest#setup
20
+ 99.99% 0.01% 0.053 0.000 0.000 0.053 1 Object#run_primes
21
+ 0.052 0.000 0.000 0.052 1/1 Object#find_primes
22
+ 0.001 0.000 0.000 0.001 1/1 Object#make_random_array
23
+ 0.000 0.000 0.000 0.000 1/1 Object#find_largest
24
+ --------------------------------------------------------------------------------
25
+ 0.052 0.000 0.000 0.052 1/1 Object#run_primes
26
+ 98.35% 0.00% 0.052 0.000 0.000 0.052 1 Object#find_primes
27
+ 0.052 0.000 0.000 0.051 1/1 Array#select
28
+ --------------------------------------------------------------------------------
29
+ 0.052 0.000 0.000 0.051 1/1 Object#find_primes
30
+ 98.34% 0.61% 0.052 0.000 0.000 0.051 1 Array#select
31
+ 0.051 0.000 0.000 0.051 1000/1000 Object#is_prime
32
+ --------------------------------------------------------------------------------
33
+ 0.051 0.000 0.000 0.051 1000/1000 Array#select
34
+ 97.74% 0.93% 0.051 0.000 0.000 0.051 1000 Object#is_prime
35
+ 0.051 0.051 0.000 0.000 1000/1001 Integer#upto
36
+ --------------------------------------------------------------------------------
37
+ 0.000 0.000 0.000 0.000 1/1001 Object#find_largest
38
+ 0.051 0.051 0.000 0.000 1000/1001 Object#is_prime
39
+ 96.91% 96.91% 0.051 0.051 0.000 0.000 1001 Integer#upto
40
+ --------------------------------------------------------------------------------
41
+ 0.001 0.000 0.000 0.001 1/1 Object#run_primes
42
+ 1.51% 0.00% 0.001 0.000 0.000 0.001 1 Object#make_random_array
43
+ 0.001 0.000 0.000 0.000 1/1 Array#each_index
44
+ 0.000 0.000 0.000 0.000 1/1 Class#new
45
+ --------------------------------------------------------------------------------
46
+ 0.001 0.000 0.000 0.000 1/1 Object#make_random_array
47
+ 1.50% 0.56% 0.001 0.000 0.000 0.000 1 Array#each_index
48
+ 0.000 0.000 0.000 0.000 1000/1000 Kernel#rand
49
+ --------------------------------------------------------------------------------
50
+ 0.000 0.000 0.000 0.000 1000/1000 Array#each_index
51
+ 0.94% 0.72% 0.000 0.000 0.000 0.000 1000 Kernel#rand
52
+ 0.000 0.000 0.000 0.000 1000/1000 Kernel#respond_to_missing?
53
+ --------------------------------------------------------------------------------
54
+ 0.000 0.000 0.000 0.000 1000/1000 Kernel#rand
55
+ 0.22% 0.22% 0.000 0.000 0.000 0.000 1000 Kernel#respond_to_missing?
56
+ --------------------------------------------------------------------------------
57
+ 0.000 0.000 0.000 0.000 1/1 Object#run_primes
58
+ 0.12% 0.02% 0.000 0.000 0.000 0.000 1 Object#find_largest
59
+ 0.000 0.000 0.000 0.000 1/1001 Integer#upto
60
+ 0.000 0.000 0.000 0.000 1/1 Array#first
61
+ --------------------------------------------------------------------------------
62
+ 0.000 0.000 0.000 0.000 1/1 Object#make_random_array
63
+ 0.01% 0.00% 0.000 0.000 0.000 0.000 1 Class#new
64
+ 0.000 0.000 0.000 0.000 1/1 Array#initialize
65
+ --------------------------------------------------------------------------------
66
+ 0.000 0.000 0.000 0.000 1/1 Class#new
67
+ 0.01% 0.01% 0.000 0.000 0.000 0.000 1 Array#initialize
68
+ --------------------------------------------------------------------------------
69
+ 0.000 0.000 0.000 0.000 1/1 Object#find_largest
70
+ 0.00% 0.00% 0.000 0.000 0.000 0.000 1 Array#first
71
+
72
+
73
+ == Overview
74
+
75
+ Dashed lines divide the report into entries, with one entry per method. Entries
76
+ are sorted by total time which is the time spent in the method plus its
77
+ children.
78
+
79
+ Each entry has a primary line demarked by values in the %total and %self
80
+ columns. The primary line represents the method being profiled. Lines above it
81
+ are the methods that called this method (parents) while the lines below it are
82
+ the methods it called (children).
83
+
84
+ All values are in seconds. For the primary line, the columns represent:
85
+
86
+ %total - The percentage of time spent in this method and its children
87
+ %self - The percentage of time spent in this method
88
+ total - The time spent in this method and its children.
89
+ self - The time spent in this method.
90
+ wait - The time spent waiting for other threads in this method.
91
+ child - The time spent in this method's children.
92
+ calls - The number of times this method was called.
93
+ name - The name of the method.
94
+
95
+ The interpretation of method names is:
96
+ MyObject#test - An instance method "test" of the class "MyObject"
97
+ <Object:MyObject>#test - The <> characters indicate a singleton method on a singleton class.
98
+
99
+ For example, we see that 97.74% of the time was spent in Object#is_prime and its
100
+ children. Of that time, almost everything was contributed by Integer#upto.
101
+ Overall, Integer#upto was called 1001 times and 1000 of those calls were made
102
+ by Object#is_prime.
103
+
104
+
105
+ == Parents
106
+
107
+ In each entry, the lines above the primary line are the methods that called the
108
+ current method. If the current method is a root method then no parents are
109
+ shown.
110
+
111
+ For parent lines, the columns represent:
112
+
113
+ total - The time spent in the current method and its children on behalf of the parent method.
114
+ self - The time spent in this method on behalf of the parent method.
115
+ child - The time spent in this method's children on behalf of the parent.
116
+ wait - The time spent waiting for other threads in this method's children on behalf of the parent.
117
+ calls - The number of times the parent method called the current method vs. the total number of calls of the current method.
118
+
119
+ Looking at the main entry for Integer#upto, we see that it was called 1000 times
120
+ from Object#is_prime and 1 time from find_largest.
121
+
122
+
123
+ == Children
124
+
125
+ In each entry, the lines below the primary line are the methods that
126
+ the current method called. If the current method is a leaf method then
127
+ no children are shown.
128
+
129
+ For children lines, the columns represent:
130
+
131
+ total - The time spent in the child, and its descendants, on behalf of the current method
132
+ self - The time spent in the child on behalf of the current method.
133
+ wait - The time spent waiting for other threads in the child's and its descendants on behalf of the current method.
134
+ child - The time spent in the child's descendants on behalf of the current method.
135
+ calls - The number of times the child method was called by the current method vs. the total number of calls of the child method.
136
+
137
+ If we look at the main entry for Objext#run_primes, we see that it called three
138
+ other methods - Object#find_primes, Object#make_random_array and
139
+ Object#find_largest.
@@ -0,0 +1,23 @@
1
+ Measure Mode: wall_time
2
+ Thread ID: 70140045951280
3
+ Fiber ID: 70140054192180
4
+ Total: 0.002968
5
+ Sort by: self_time
6
+
7
+ %self total self wait child calls name
8
+ 86.99 0.003 0.003 0.000 0.000 201 Integer#upto
9
+ 3.11 0.003 0.000 0.000 0.003 200 Object#is_prime
10
+ 2.94 0.000 0.000 0.000 0.000 200 Kernel#rand
11
+ 2.82 0.003 0.000 0.000 0.003 1 Array#select
12
+ 2.37 0.000 0.000 0.000 0.000 1 Array#each_index
13
+ 1.02 0.000 0.000 0.000 0.000 200 Kernel#respond_to_missing?
14
+ 0.18 0.003 0.000 0.000 0.003 1 PrintersTest#setup
15
+ 0.14 0.000 0.000 0.000 0.000 1 Class#new
16
+ 0.10 0.000 0.000 0.000 0.000 1 Object#find_largest
17
+ 0.10 0.000 0.000 0.000 0.000 1 Object#make_random_array
18
+ 0.06 0.003 0.000 0.000 0.003 1 Object#find_primes
19
+ 0.06 0.000 0.000 0.000 0.000 1 Array#initialize
20
+ 0.06 0.003 0.000 0.000 0.003 1 Object#run_primes
21
+ 0.03 0.000 0.000 0.000 0.000 1 Array#first
22
+
23
+ * indicates recursively called methods
@@ -0,0 +1,760 @@
1
+
2
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3
+ <html>
4
+ <head>
5
+ <style media="all" type="text/css">
6
+ table {
7
+ border-collapse: collapse;
8
+ border: 1px solid #CCC;
9
+ font-family: Verdana, Arial, Helvetica, sans-serif;
10
+ font-size: 9pt;
11
+ line-height: normal;
12
+ width: 100%;
13
+ }
14
+
15
+ th {
16
+ text-align: center;
17
+ border-top: 1px solid #FB7A31;
18
+ border-bottom: 1px solid #FB7A31;
19
+ background: #FFC;
20
+ padding: 0.3em;
21
+ border-left: 1px solid silver;
22
+ }
23
+
24
+ tr.break td {
25
+ border: 0;
26
+ border-top: 1px solid #FB7A31;
27
+ padding: 0;
28
+ margin: 0;
29
+ }
30
+
31
+ tr.method td {
32
+ font-weight: bold;
33
+ }
34
+
35
+ td {
36
+ padding: 0.3em;
37
+ }
38
+
39
+ td:first-child {
40
+ width: 190px;
41
+ }
42
+
43
+ td {
44
+ border-left: 1px solid #CCC;
45
+ text-align: center;
46
+ }
47
+
48
+ .method_name {
49
+ text-align: left;
50
+ }
51
+
52
+ tfoot td {
53
+ text-align: left;
54
+ }
55
+ </style>
56
+ </head>
57
+ <body>
58
+ <h1>Profile Report: wall_time</h1>
59
+ <!-- Threads Table -->
60
+ <table>
61
+ <tr>
62
+ <th>Thread ID</th>
63
+ <th>Fiber ID</th>
64
+ <th>Total Time</th>
65
+ </tr>
66
+
67
+ <tr>
68
+ <td>70140045951280</td>
69
+ <td><a href="#70140054192180">70140054192180</a></td>
70
+ <td>0.0029680728912353516</td>
71
+ </tr>
72
+
73
+ </table>
74
+ <!-- Methods Tables -->
75
+
76
+ <h2><a name="70140054192180">Thread 70140045951280, Fiber: 70140054192180</a></h2>
77
+ <table>
78
+ <thead>
79
+ <tr>
80
+ <th>%Total</th>
81
+ <th>%Self</th>
82
+ <th>Total</th>
83
+ <th>Self</th>
84
+ <th>Wait</th>
85
+ <th>Child</th>
86
+ <th>Calls</th>
87
+ <th class="method_name">Name</th>
88
+ <th>Line</th>
89
+ </tr>
90
+ </thead>
91
+ <tbody>
92
+
93
+ <!-- Parents -->
94
+
95
+ <tr class="method">
96
+ <td>100.00%</td>
97
+ <td>0.18%</td>
98
+ <td>0.00</td>
99
+ <td>0.00</td>
100
+ <td>0.00</td>
101
+ <td>0.00</td>
102
+ <td>1</td>
103
+ <td class="method_name">
104
+ <a name="PrintersTest_setup_70140054192180">
105
+ PrintersTest#setup
106
+ </a>
107
+ </td>
108
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/printers_test.rb&line=14" title="/Users/stefan.kaes/src/ruby-prof/test/printers_test.rb:14">14</a></td>
109
+ </tr>
110
+ <!-- Children -->
111
+
112
+ <tr>
113
+ <td>&nbsp;</td>
114
+ <td>&nbsp;</td>
115
+ <td>0.00</td>
116
+ <td>0.00</td>
117
+ <td>0.00</td>
118
+ <td>0.00</td>
119
+ <td>1/1</td>
120
+ <td class="method_name"><a href="#Object_run_primes_70140054192180">Object#run_primes</a></td>
121
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/printers_test.rb&line=14" title="/Users/stefan.kaes/src/ruby-prof/test/printers_test.rb:14">14</a></td>
122
+ </tr>
123
+
124
+ <!-- Create divider row -->
125
+ <tr class="break"><td colspan="9"></td></tr>
126
+
127
+
128
+ <!-- Parents -->
129
+
130
+ <tr>
131
+ <td>&nbsp;</td>
132
+ <td>&nbsp;</td>
133
+ <td>0.00</td>
134
+ <td>0.00</td>
135
+ <td>0.00</td>
136
+ <td>0.00</td>
137
+ <td>1/1</td>
138
+ <td class="method_name"><a href="#PrintersTest_setup_70140054192180">PrintersTest#setup</a></td>
139
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/printers_test.rb&line=14" title="/Users/stefan.kaes/src/ruby-prof/test/printers_test.rb:14">14</a></td>
140
+ </tr>
141
+
142
+ <tr class="method">
143
+ <td>99.82%</td>
144
+ <td>0.06%</td>
145
+ <td>0.00</td>
146
+ <td>0.00</td>
147
+ <td>0.00</td>
148
+ <td>0.00</td>
149
+ <td>1</td>
150
+ <td class="method_name">
151
+ <a name="Object_run_primes_70140054192180">
152
+ Object#run_primes
153
+ </a>
154
+ </td>
155
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=45" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:45">45</a></td>
156
+ </tr>
157
+ <!-- Children -->
158
+
159
+ <tr>
160
+ <td>&nbsp;</td>
161
+ <td>&nbsp;</td>
162
+ <td>0.00</td>
163
+ <td>0.00</td>
164
+ <td>0.00</td>
165
+ <td>0.00</td>
166
+ <td>1/1</td>
167
+ <td class="method_name"><a href="#Object_find_primes_70140054192180">Object#find_primes</a></td>
168
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=50" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:50">50</a></td>
169
+ </tr>
170
+
171
+ <tr>
172
+ <td>&nbsp;</td>
173
+ <td>&nbsp;</td>
174
+ <td>0.00</td>
175
+ <td>0.00</td>
176
+ <td>0.00</td>
177
+ <td>0.00</td>
178
+ <td>1/1</td>
179
+ <td class="method_name"><a href="#Object_make_random_array_70140054192180">Object#make_random_array</a></td>
180
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=47" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:47">47</a></td>
181
+ </tr>
182
+
183
+ <tr>
184
+ <td>&nbsp;</td>
185
+ <td>&nbsp;</td>
186
+ <td>0.00</td>
187
+ <td>0.00</td>
188
+ <td>0.00</td>
189
+ <td>0.00</td>
190
+ <td>1/1</td>
191
+ <td class="method_name"><a href="#Object_find_largest_70140054192180">Object#find_largest</a></td>
192
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=53" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:53">53</a></td>
193
+ </tr>
194
+
195
+ <!-- Create divider row -->
196
+ <tr class="break"><td colspan="9"></td></tr>
197
+
198
+
199
+ <!-- Parents -->
200
+
201
+ <tr>
202
+ <td>&nbsp;</td>
203
+ <td>&nbsp;</td>
204
+ <td>0.00</td>
205
+ <td>0.00</td>
206
+ <td>0.00</td>
207
+ <td>0.00</td>
208
+ <td>1/1</td>
209
+ <td class="method_name"><a href="#Object_run_primes_70140054192180">Object#run_primes</a></td>
210
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=50" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:50">50</a></td>
211
+ </tr>
212
+
213
+ <tr class="method">
214
+ <td>92.62%</td>
215
+ <td>0.06%</td>
216
+ <td>0.00</td>
217
+ <td>0.00</td>
218
+ <td>0.00</td>
219
+ <td>0.00</td>
220
+ <td>1</td>
221
+ <td class="method_name">
222
+ <a name="Object_find_primes_70140054192180">
223
+ Object#find_primes
224
+ </a>
225
+ </td>
226
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=24" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:24">24</a></td>
227
+ </tr>
228
+ <!-- Children -->
229
+
230
+ <tr>
231
+ <td>&nbsp;</td>
232
+ <td>&nbsp;</td>
233
+ <td>0.00</td>
234
+ <td>0.00</td>
235
+ <td>0.00</td>
236
+ <td>0.00</td>
237
+ <td>1/1</td>
238
+ <td class="method_name"><a href="#Array_select_70140054192180">Array#select</a></td>
239
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=25" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:25">25</a></td>
240
+ </tr>
241
+
242
+ <!-- Create divider row -->
243
+ <tr class="break"><td colspan="9"></td></tr>
244
+
245
+
246
+ <!-- Parents -->
247
+
248
+ <tr>
249
+ <td>&nbsp;</td>
250
+ <td>&nbsp;</td>
251
+ <td>0.00</td>
252
+ <td>0.00</td>
253
+ <td>0.00</td>
254
+ <td>0.00</td>
255
+ <td>1/1</td>
256
+ <td class="method_name"><a href="#Object_find_primes_70140054192180">Object#find_primes</a></td>
257
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=25" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:25">25</a></td>
258
+ </tr>
259
+
260
+ <tr class="method">
261
+ <td>92.55%</td>
262
+ <td>2.82%</td>
263
+ <td>0.00</td>
264
+ <td>0.00</td>
265
+ <td>0.00</td>
266
+ <td>0.00</td>
267
+ <td>1</td>
268
+ <td class="method_name">
269
+ <a name="Array_select_70140054192180">
270
+ Array#select
271
+ </a>
272
+ </td>
273
+ <td></td>
274
+ </tr>
275
+ <!-- Children -->
276
+
277
+ <tr>
278
+ <td>&nbsp;</td>
279
+ <td>&nbsp;</td>
280
+ <td>0.00</td>
281
+ <td>0.00</td>
282
+ <td>0.00</td>
283
+ <td>0.00</td>
284
+ <td>200/200</td>
285
+ <td class="method_name"><a href="#Object_is_prime_70140054192180">Object#is_prime</a></td>
286
+ <td></td>
287
+ </tr>
288
+
289
+ <!-- Create divider row -->
290
+ <tr class="break"><td colspan="9"></td></tr>
291
+
292
+
293
+ <!-- Parents -->
294
+
295
+ <tr>
296
+ <td>&nbsp;</td>
297
+ <td>&nbsp;</td>
298
+ <td>0.00</td>
299
+ <td>0.00</td>
300
+ <td>0.00</td>
301
+ <td>0.00</td>
302
+ <td>200/200</td>
303
+ <td class="method_name"><a href="#Array_select_70140054192180">Array#select</a></td>
304
+ <td></td>
305
+ </tr>
306
+
307
+ <tr class="method">
308
+ <td>89.73%</td>
309
+ <td>3.11%</td>
310
+ <td>0.00</td>
311
+ <td>0.00</td>
312
+ <td>0.00</td>
313
+ <td>0.00</td>
314
+ <td>200</td>
315
+ <td class="method_name">
316
+ <a name="Object_is_prime_70140054192180">
317
+ Object#is_prime
318
+ </a>
319
+ </td>
320
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=16" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:16">16</a></td>
321
+ </tr>
322
+ <!-- Children -->
323
+
324
+ <tr>
325
+ <td>&nbsp;</td>
326
+ <td>&nbsp;</td>
327
+ <td>0.00</td>
328
+ <td>0.00</td>
329
+ <td>0.00</td>
330
+ <td>0.00</td>
331
+ <td>200/201</td>
332
+ <td class="method_name"><a href="#Integer_upto_70140054192180">Integer#upto</a></td>
333
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=18" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:18">18</a></td>
334
+ </tr>
335
+
336
+ <!-- Create divider row -->
337
+ <tr class="break"><td colspan="9"></td></tr>
338
+
339
+
340
+ <!-- Parents -->
341
+
342
+ <tr>
343
+ <td>&nbsp;</td>
344
+ <td>&nbsp;</td>
345
+ <td>0.00</td>
346
+ <td>0.00</td>
347
+ <td>0.00</td>
348
+ <td>0.00</td>
349
+ <td>1/201</td>
350
+ <td class="method_name"><a href="#Object_find_largest_70140054192180">Object#find_largest</a></td>
351
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=36" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:36">36</a></td>
352
+ </tr>
353
+
354
+ <tr>
355
+ <td>&nbsp;</td>
356
+ <td>&nbsp;</td>
357
+ <td>0.00</td>
358
+ <td>0.00</td>
359
+ <td>0.00</td>
360
+ <td>0.00</td>
361
+ <td>200/201</td>
362
+ <td class="method_name"><a href="#Object_is_prime_70140054192180">Object#is_prime</a></td>
363
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=18" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:18">18</a></td>
364
+ </tr>
365
+
366
+ <tr class="method">
367
+ <td>86.99%</td>
368
+ <td>86.99%</td>
369
+ <td>0.00</td>
370
+ <td>0.00</td>
371
+ <td>0.00</td>
372
+ <td>0.00</td>
373
+ <td>201</td>
374
+ <td class="method_name">
375
+ <a name="Integer_upto_70140054192180">
376
+ Integer#upto
377
+ </a>
378
+ </td>
379
+ <td></td>
380
+ </tr>
381
+ <!-- Children -->
382
+
383
+ <!-- Create divider row -->
384
+ <tr class="break"><td colspan="9"></td></tr>
385
+
386
+
387
+ <!-- Parents -->
388
+
389
+ <tr>
390
+ <td>&nbsp;</td>
391
+ <td>&nbsp;</td>
392
+ <td>0.00</td>
393
+ <td>0.00</td>
394
+ <td>0.00</td>
395
+ <td>0.00</td>
396
+ <td>1/1</td>
397
+ <td class="method_name"><a href="#Object_run_primes_70140054192180">Object#run_primes</a></td>
398
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=47" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:47">47</a></td>
399
+ </tr>
400
+
401
+ <tr class="method">
402
+ <td>6.64%</td>
403
+ <td>0.10%</td>
404
+ <td>0.00</td>
405
+ <td>0.00</td>
406
+ <td>0.00</td>
407
+ <td>0.00</td>
408
+ <td>1</td>
409
+ <td class="method_name">
410
+ <a name="Object_make_random_array_70140054192180">
411
+ Object#make_random_array
412
+ </a>
413
+ </td>
414
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=7" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:7">7</a></td>
415
+ </tr>
416
+ <!-- Children -->
417
+
418
+ <tr>
419
+ <td>&nbsp;</td>
420
+ <td>&nbsp;</td>
421
+ <td>0.00</td>
422
+ <td>0.00</td>
423
+ <td>0.00</td>
424
+ <td>0.00</td>
425
+ <td>1/1</td>
426
+ <td class="method_name"><a href="#Array_each_index_70140054192180">Array#each_index</a></td>
427
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=9" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:9">9</a></td>
428
+ </tr>
429
+
430
+ <tr>
431
+ <td>&nbsp;</td>
432
+ <td>&nbsp;</td>
433
+ <td>0.00</td>
434
+ <td>0.00</td>
435
+ <td>0.00</td>
436
+ <td>0.00</td>
437
+ <td>1/1</td>
438
+ <td class="method_name"><a href="#Class_new_70140054192180">Class#new</a></td>
439
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=8" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:8">8</a></td>
440
+ </tr>
441
+
442
+ <!-- Create divider row -->
443
+ <tr class="break"><td colspan="9"></td></tr>
444
+
445
+
446
+ <!-- Parents -->
447
+
448
+ <tr>
449
+ <td>&nbsp;</td>
450
+ <td>&nbsp;</td>
451
+ <td>0.00</td>
452
+ <td>0.00</td>
453
+ <td>0.00</td>
454
+ <td>0.00</td>
455
+ <td>1/1</td>
456
+ <td class="method_name"><a href="#Object_make_random_array_70140054192180">Object#make_random_array</a></td>
457
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=9" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:9">9</a></td>
458
+ </tr>
459
+
460
+ <tr class="method">
461
+ <td>6.33%</td>
462
+ <td>2.37%</td>
463
+ <td>0.00</td>
464
+ <td>0.00</td>
465
+ <td>0.00</td>
466
+ <td>0.00</td>
467
+ <td>1</td>
468
+ <td class="method_name">
469
+ <a name="Array_each_index_70140054192180">
470
+ Array#each_index
471
+ </a>
472
+ </td>
473
+ <td></td>
474
+ </tr>
475
+ <!-- Children -->
476
+
477
+ <tr>
478
+ <td>&nbsp;</td>
479
+ <td>&nbsp;</td>
480
+ <td>0.00</td>
481
+ <td>0.00</td>
482
+ <td>0.00</td>
483
+ <td>0.00</td>
484
+ <td>200/200</td>
485
+ <td class="method_name"><a href="#Kernel_rand_70140054192180">Kernel#rand</a></td>
486
+ <td></td>
487
+ </tr>
488
+
489
+ <!-- Create divider row -->
490
+ <tr class="break"><td colspan="9"></td></tr>
491
+
492
+
493
+ <!-- Parents -->
494
+
495
+ <tr>
496
+ <td>&nbsp;</td>
497
+ <td>&nbsp;</td>
498
+ <td>0.00</td>
499
+ <td>0.00</td>
500
+ <td>0.00</td>
501
+ <td>0.00</td>
502
+ <td>200/200</td>
503
+ <td class="method_name"><a href="#Array_each_index_70140054192180">Array#each_index</a></td>
504
+ <td></td>
505
+ </tr>
506
+
507
+ <tr class="method">
508
+ <td>3.96%</td>
509
+ <td>2.94%</td>
510
+ <td>0.00</td>
511
+ <td>0.00</td>
512
+ <td>0.00</td>
513
+ <td>0.00</td>
514
+ <td>200</td>
515
+ <td class="method_name">
516
+ <a name="Kernel_rand_70140054192180">
517
+ Kernel#rand
518
+ </a>
519
+ </td>
520
+ <td></td>
521
+ </tr>
522
+ <!-- Children -->
523
+
524
+ <tr>
525
+ <td>&nbsp;</td>
526
+ <td>&nbsp;</td>
527
+ <td>0.00</td>
528
+ <td>0.00</td>
529
+ <td>0.00</td>
530
+ <td>0.00</td>
531
+ <td>200/200</td>
532
+ <td class="method_name"><a href="#Kernel_respond_to_missing__70140054192180">Kernel#respond_to_missing?</a></td>
533
+ <td></td>
534
+ </tr>
535
+
536
+ <!-- Create divider row -->
537
+ <tr class="break"><td colspan="9"></td></tr>
538
+
539
+
540
+ <!-- Parents -->
541
+
542
+ <tr>
543
+ <td>&nbsp;</td>
544
+ <td>&nbsp;</td>
545
+ <td>0.00</td>
546
+ <td>0.00</td>
547
+ <td>0.00</td>
548
+ <td>0.00</td>
549
+ <td>200/200</td>
550
+ <td class="method_name"><a href="#Kernel_rand_70140054192180">Kernel#rand</a></td>
551
+ <td></td>
552
+ </tr>
553
+
554
+ <tr class="method">
555
+ <td>1.02%</td>
556
+ <td>1.02%</td>
557
+ <td>0.00</td>
558
+ <td>0.00</td>
559
+ <td>0.00</td>
560
+ <td>0.00</td>
561
+ <td>200</td>
562
+ <td class="method_name">
563
+ <a name="Kernel_respond_to_missing__70140054192180">
564
+ Kernel#respond_to_missing?
565
+ </a>
566
+ </td>
567
+ <td></td>
568
+ </tr>
569
+ <!-- Children -->
570
+
571
+ <!-- Create divider row -->
572
+ <tr class="break"><td colspan="9"></td></tr>
573
+
574
+
575
+ <!-- Parents -->
576
+
577
+ <tr>
578
+ <td>&nbsp;</td>
579
+ <td>&nbsp;</td>
580
+ <td>0.00</td>
581
+ <td>0.00</td>
582
+ <td>0.00</td>
583
+ <td>0.00</td>
584
+ <td>1/1</td>
585
+ <td class="method_name"><a href="#Object_run_primes_70140054192180">Object#run_primes</a></td>
586
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=53" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:53">53</a></td>
587
+ </tr>
588
+
589
+ <tr class="method">
590
+ <td>0.51%</td>
591
+ <td>0.10%</td>
592
+ <td>0.00</td>
593
+ <td>0.00</td>
594
+ <td>0.00</td>
595
+ <td>0.00</td>
596
+ <td>1</td>
597
+ <td class="method_name">
598
+ <a name="Object_find_largest_70140054192180">
599
+ Object#find_largest
600
+ </a>
601
+ </td>
602
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=31" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:31">31</a></td>
603
+ </tr>
604
+ <!-- Children -->
605
+
606
+ <tr>
607
+ <td>&nbsp;</td>
608
+ <td>&nbsp;</td>
609
+ <td>0.00</td>
610
+ <td>0.00</td>
611
+ <td>0.00</td>
612
+ <td>0.00</td>
613
+ <td>1/201</td>
614
+ <td class="method_name"><a href="#Integer_upto_70140054192180">Integer#upto</a></td>
615
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=36" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:36">36</a></td>
616
+ </tr>
617
+
618
+ <tr>
619
+ <td>&nbsp;</td>
620
+ <td>&nbsp;</td>
621
+ <td>0.00</td>
622
+ <td>0.00</td>
623
+ <td>0.00</td>
624
+ <td>0.00</td>
625
+ <td>1/1</td>
626
+ <td class="method_name"><a href="#Array_first_70140054192180">Array#first</a></td>
627
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=32" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:32">32</a></td>
628
+ </tr>
629
+
630
+ <!-- Create divider row -->
631
+ <tr class="break"><td colspan="9"></td></tr>
632
+
633
+
634
+ <!-- Parents -->
635
+
636
+ <tr>
637
+ <td>&nbsp;</td>
638
+ <td>&nbsp;</td>
639
+ <td>0.00</td>
640
+ <td>0.00</td>
641
+ <td>0.00</td>
642
+ <td>0.00</td>
643
+ <td>1/1</td>
644
+ <td class="method_name"><a href="#Object_make_random_array_70140054192180">Object#make_random_array</a></td>
645
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=8" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:8">8</a></td>
646
+ </tr>
647
+
648
+ <tr class="method">
649
+ <td>0.20%</td>
650
+ <td>0.14%</td>
651
+ <td>0.00</td>
652
+ <td>0.00</td>
653
+ <td>0.00</td>
654
+ <td>0.00</td>
655
+ <td>1</td>
656
+ <td class="method_name">
657
+ <a name="Class_new_70140054192180">
658
+ Class#new
659
+ </a>
660
+ </td>
661
+ <td></td>
662
+ </tr>
663
+ <!-- Children -->
664
+
665
+ <tr>
666
+ <td>&nbsp;</td>
667
+ <td>&nbsp;</td>
668
+ <td>0.00</td>
669
+ <td>0.00</td>
670
+ <td>0.00</td>
671
+ <td>0.00</td>
672
+ <td>1/1</td>
673
+ <td class="method_name"><a href="#Array_initialize_70140054192180">Array#initialize</a></td>
674
+ <td></td>
675
+ </tr>
676
+
677
+ <!-- Create divider row -->
678
+ <tr class="break"><td colspan="9"></td></tr>
679
+
680
+
681
+ <!-- Parents -->
682
+
683
+ <tr>
684
+ <td>&nbsp;</td>
685
+ <td>&nbsp;</td>
686
+ <td>0.00</td>
687
+ <td>0.00</td>
688
+ <td>0.00</td>
689
+ <td>0.00</td>
690
+ <td>1/1</td>
691
+ <td class="method_name"><a href="#Class_new_70140054192180">Class#new</a></td>
692
+ <td></td>
693
+ </tr>
694
+
695
+ <tr class="method">
696
+ <td>0.06%</td>
697
+ <td>0.06%</td>
698
+ <td>0.00</td>
699
+ <td>0.00</td>
700
+ <td>0.00</td>
701
+ <td>0.00</td>
702
+ <td>1</td>
703
+ <td class="method_name">
704
+ <a name="Array_initialize_70140054192180">
705
+ Array#initialize
706
+ </a>
707
+ </td>
708
+ <td></td>
709
+ </tr>
710
+ <!-- Children -->
711
+
712
+ <!-- Create divider row -->
713
+ <tr class="break"><td colspan="9"></td></tr>
714
+
715
+
716
+ <!-- Parents -->
717
+
718
+ <tr>
719
+ <td>&nbsp;</td>
720
+ <td>&nbsp;</td>
721
+ <td>0.00</td>
722
+ <td>0.00</td>
723
+ <td>0.00</td>
724
+ <td>0.00</td>
725
+ <td>1/1</td>
726
+ <td class="method_name"><a href="#Object_find_largest_70140054192180">Object#find_largest</a></td>
727
+ <td><a href="txmt://open?url=file:///Users/stefan.kaes/src/ruby-prof/test/prime.rb&line=32" title="/Users/stefan.kaes/src/ruby-prof/test/prime.rb:32">32</a></td>
728
+ </tr>
729
+
730
+ <tr class="method">
731
+ <td>0.03%</td>
732
+ <td>0.03%</td>
733
+ <td>0.00</td>
734
+ <td>0.00</td>
735
+ <td>0.00</td>
736
+ <td>0.00</td>
737
+ <td>1</td>
738
+ <td class="method_name">
739
+ <a name="Array_first_70140054192180">
740
+ Array#first
741
+ </a>
742
+ </td>
743
+ <td></td>
744
+ </tr>
745
+ <!-- Children -->
746
+
747
+ <!-- Create divider row -->
748
+ <tr class="break"><td colspan="9"></td></tr>
749
+
750
+
751
+ </tbody>
752
+ <tfoot>
753
+ <tr>
754
+ <td colspan="9">* indicates recursively called methods</td>
755
+ </tr>
756
+ </tfoot>
757
+ </table>
758
+
759
+ </body>
760
+ </html>