ruby-prof 0.16.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +532 -467
  3. data/LICENSE +24 -24
  4. data/README.rdoc +5 -454
  5. data/Rakefile +110 -113
  6. data/bin/ruby-prof +380 -340
  7. data/bin/ruby-prof-check-trace +45 -45
  8. data/ext/ruby_prof/extconf.rb +36 -64
  9. data/ext/ruby_prof/rp_allocation.c +279 -0
  10. data/ext/ruby_prof/rp_allocation.h +31 -0
  11. data/ext/ruby_prof/rp_call_info.c +271 -407
  12. data/ext/ruby_prof/rp_call_info.h +35 -48
  13. data/ext/ruby_prof/rp_measure_allocations.c +52 -76
  14. data/ext/ruby_prof/rp_measure_memory.c +42 -77
  15. data/ext/ruby_prof/rp_measure_process_time.c +67 -71
  16. data/ext/ruby_prof/rp_measure_wall_time.c +62 -45
  17. data/ext/ruby_prof/rp_measurement.c +230 -0
  18. data/ext/ruby_prof/rp_measurement.h +50 -0
  19. data/ext/ruby_prof/rp_method.c +630 -411
  20. data/ext/ruby_prof/rp_method.h +70 -52
  21. data/ext/ruby_prof/rp_profile.c +895 -0
  22. data/ext/ruby_prof/rp_profile.h +37 -0
  23. data/ext/ruby_prof/rp_stack.c +196 -128
  24. data/ext/ruby_prof/rp_stack.h +56 -51
  25. data/ext/ruby_prof/rp_thread.c +337 -273
  26. data/ext/ruby_prof/rp_thread.h +36 -27
  27. data/ext/ruby_prof/ruby_prof.c +48 -671
  28. data/ext/ruby_prof/ruby_prof.h +17 -56
  29. data/ext/ruby_prof/vc/ruby_prof.sln +20 -21
  30. data/ext/ruby_prof/vc/{ruby_prof_20.vcxproj → ruby_prof.vcxproj} +38 -5
  31. data/lib/ruby-prof.rb +52 -58
  32. data/lib/ruby-prof/assets/call_stack_printer.html.erb +713 -0
  33. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  34. data/lib/ruby-prof/assets/graph_printer.html.erb +356 -0
  35. data/lib/ruby-prof/call_info.rb +57 -126
  36. data/lib/ruby-prof/call_info_visitor.rb +38 -40
  37. data/lib/ruby-prof/compatibility.rb +109 -178
  38. data/lib/ruby-prof/exclude_common_methods.rb +198 -0
  39. data/lib/ruby-prof/measurement.rb +14 -0
  40. data/lib/ruby-prof/method_info.rb +90 -129
  41. data/lib/ruby-prof/printers/abstract_printer.rb +127 -85
  42. data/lib/ruby-prof/printers/call_info_printer.rb +51 -41
  43. data/lib/ruby-prof/printers/call_stack_printer.rb +182 -260
  44. data/lib/ruby-prof/printers/call_tree_printer.rb +151 -130
  45. data/lib/ruby-prof/printers/dot_printer.rb +132 -132
  46. data/lib/ruby-prof/printers/flat_printer.rb +52 -70
  47. data/lib/ruby-prof/printers/graph_html_printer.rb +63 -244
  48. data/lib/ruby-prof/printers/graph_printer.rb +114 -116
  49. data/lib/ruby-prof/printers/multi_printer.rb +127 -58
  50. data/lib/ruby-prof/profile.rb +33 -55
  51. data/lib/ruby-prof/rack.rb +171 -95
  52. data/lib/ruby-prof/task.rb +147 -147
  53. data/lib/ruby-prof/thread.rb +35 -41
  54. data/lib/ruby-prof/version.rb +3 -3
  55. data/lib/unprof.rb +10 -10
  56. data/ruby-prof.gemspec +58 -57
  57. data/test/abstract_printer_test.rb +26 -0
  58. data/test/alias_test.rb +129 -0
  59. data/test/basic_test.rb +129 -128
  60. data/test/call_info_visitor_test.rb +31 -31
  61. data/test/duplicate_names_test.rb +32 -32
  62. data/test/dynamic_method_test.rb +53 -55
  63. data/test/enumerable_test.rb +21 -21
  64. data/test/exceptions_test.rb +24 -16
  65. data/test/exclude_methods_test.rb +146 -0
  66. data/test/exclude_threads_test.rb +53 -53
  67. data/test/fiber_test.rb +73 -79
  68. data/test/gc_test.rb +96 -0
  69. data/test/line_number_test.rb +161 -71
  70. data/test/marshal_test.rb +119 -0
  71. data/test/measure_allocations.rb +30 -0
  72. data/test/measure_allocations_test.rb +385 -26
  73. data/test/measure_allocations_trace_test.rb +385 -0
  74. data/test/measure_memory_trace_test.rb +756 -0
  75. data/test/measure_process_time_test.rb +849 -63
  76. data/test/measure_times.rb +54 -0
  77. data/test/measure_wall_time_test.rb +459 -255
  78. data/test/multi_printer_test.rb +71 -83
  79. data/test/no_method_class_test.rb +15 -15
  80. data/test/parser_timings.rb +24 -0
  81. data/test/pause_resume_test.rb +166 -166
  82. data/test/prime.rb +56 -54
  83. data/test/printer_call_stack_test.rb +28 -0
  84. data/test/printer_call_tree_test.rb +31 -0
  85. data/test/printer_flat_test.rb +68 -0
  86. data/test/printer_graph_html_test.rb +60 -0
  87. data/test/printer_graph_test.rb +41 -0
  88. data/test/printers_test.rb +141 -255
  89. data/test/printing_recursive_graph_test.rb +81 -127
  90. data/test/rack_test.rb +157 -93
  91. data/test/recursive_test.rb +210 -215
  92. data/test/singleton_test.rb +38 -38
  93. data/test/stack_printer_test.rb +64 -78
  94. data/test/start_stop_test.rb +109 -112
  95. data/test/test_helper.rb +24 -264
  96. data/test/thread_test.rb +144 -187
  97. data/test/unique_call_path_test.rb +190 -202
  98. data/test/yarv_test.rb +56 -55
  99. metadata +34 -114
  100. data/doc/LICENSE.html +0 -114
  101. data/doc/README_rdoc.html +0 -603
  102. data/doc/Rack.html +0 -95
  103. data/doc/Rack/RubyProf.html +0 -226
  104. data/doc/RubyProf.html +0 -962
  105. data/doc/RubyProf/AbstractPrinter.html +0 -546
  106. data/doc/RubyProf/AggregateCallInfo.html +0 -551
  107. data/doc/RubyProf/CallInfo.html +0 -639
  108. data/doc/RubyProf/CallInfoPrinter.html +0 -120
  109. data/doc/RubyProf/CallInfoVisitor.html +0 -198
  110. data/doc/RubyProf/CallStackPrinter.html +0 -1121
  111. data/doc/RubyProf/CallTreePrinter.html +0 -641
  112. data/doc/RubyProf/Cmd.html +0 -631
  113. data/doc/RubyProf/DotPrinter.html +0 -257
  114. data/doc/RubyProf/FlatPrinter.html +0 -163
  115. data/doc/RubyProf/FlatPrinterWithLineNumbers.html +0 -208
  116. data/doc/RubyProf/GraphHtmlPrinter.html +0 -552
  117. data/doc/RubyProf/GraphPrinter.html +0 -139
  118. data/doc/RubyProf/MethodInfo.html +0 -745
  119. data/doc/RubyProf/MultiPrinter.html +0 -360
  120. data/doc/RubyProf/Profile.html +0 -763
  121. data/doc/RubyProf/ProfileTask.html +0 -490
  122. data/doc/RubyProf/Thread.html +0 -310
  123. data/doc/created.rid +0 -31
  124. data/doc/css/fonts.css +0 -167
  125. data/doc/css/rdoc.css +0 -590
  126. data/doc/examples/flat_txt.html +0 -138
  127. data/doc/examples/graph_html.html +0 -909
  128. data/doc/examples/graph_txt.html +0 -247
  129. data/doc/fonts/Lato-Light.ttf +0 -0
  130. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  131. data/doc/fonts/Lato-Regular.ttf +0 -0
  132. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  133. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  134. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  135. data/doc/images/add.png +0 -0
  136. data/doc/images/arrow_up.png +0 -0
  137. data/doc/images/brick.png +0 -0
  138. data/doc/images/brick_link.png +0 -0
  139. data/doc/images/bug.png +0 -0
  140. data/doc/images/bullet_black.png +0 -0
  141. data/doc/images/bullet_toggle_minus.png +0 -0
  142. data/doc/images/bullet_toggle_plus.png +0 -0
  143. data/doc/images/date.png +0 -0
  144. data/doc/images/delete.png +0 -0
  145. data/doc/images/find.png +0 -0
  146. data/doc/images/loadingAnimation.gif +0 -0
  147. data/doc/images/macFFBgHack.png +0 -0
  148. data/doc/images/package.png +0 -0
  149. data/doc/images/page_green.png +0 -0
  150. data/doc/images/page_white_text.png +0 -0
  151. data/doc/images/page_white_width.png +0 -0
  152. data/doc/images/plugin.png +0 -0
  153. data/doc/images/ruby.png +0 -0
  154. data/doc/images/tag_blue.png +0 -0
  155. data/doc/images/tag_green.png +0 -0
  156. data/doc/images/transparent.png +0 -0
  157. data/doc/images/wrench.png +0 -0
  158. data/doc/images/wrench_orange.png +0 -0
  159. data/doc/images/zoom.png +0 -0
  160. data/doc/index.html +0 -626
  161. data/doc/js/darkfish.js +0 -161
  162. data/doc/js/jquery.js +0 -4
  163. data/doc/js/navigation.js +0 -142
  164. data/doc/js/navigation.js.gz +0 -0
  165. data/doc/js/search.js +0 -109
  166. data/doc/js/search_index.js +0 -1
  167. data/doc/js/search_index.js.gz +0 -0
  168. data/doc/js/searcher.js +0 -228
  169. data/doc/js/searcher.js.gz +0 -0
  170. data/doc/table_of_contents.html +0 -942
  171. data/examples/cachegrind.out.1 +0 -114
  172. data/examples/cachegrind.out.1.32313213 +0 -114
  173. data/examples/flat.txt +0 -50
  174. data/examples/graph.dot +0 -84
  175. data/examples/graph.html +0 -823
  176. data/examples/graph.txt +0 -139
  177. data/examples/multi.flat.txt +0 -23
  178. data/examples/multi.graph.html +0 -760
  179. data/examples/multi.grind.dat +0 -114
  180. data/examples/multi.stack.html +0 -547
  181. data/examples/stack.html +0 -547
  182. data/ext/ruby_prof/rp_measure.c +0 -40
  183. data/ext/ruby_prof/rp_measure.h +0 -45
  184. data/ext/ruby_prof/rp_measure_cpu_time.c +0 -136
  185. data/ext/ruby_prof/rp_measure_gc_runs.c +0 -73
  186. data/ext/ruby_prof/rp_measure_gc_time.c +0 -60
  187. data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +0 -108
  188. data/ext/ruby_prof/vc/ruby_prof_19.vcxproj +0 -110
  189. data/lib/ruby-prof/aggregate_call_info.rb +0 -76
  190. data/lib/ruby-prof/assets/call_stack_printer.css.html +0 -117
  191. data/lib/ruby-prof/assets/call_stack_printer.js.html +0 -385
  192. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +0 -64
  193. data/test/aggregate_test.rb +0 -136
  194. data/test/block_test.rb +0 -74
  195. data/test/call_info_test.rb +0 -78
  196. data/test/issue137_test.rb +0 -63
  197. data/test/measure_cpu_time_test.rb +0 -213
  198. data/test/measure_gc_runs_test.rb +0 -32
  199. data/test/measure_gc_time_test.rb +0 -36
  200. data/test/measure_memory_test.rb +0 -33
  201. data/test/method_elimination_test.rb +0 -84
  202. data/test/module_test.rb +0 -45
  203. data/test/stack_test.rb +0 -138
@@ -0,0 +1,385 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+ require_relative './measure_allocations'
6
+
7
+ class MeasureAllocationsTraceTest < TestCase
8
+ def setup
9
+ RubyProf::measure_mode = RubyProf::ALLOCATIONS
10
+ end
11
+
12
+ def test_allocations_mode
13
+ RubyProf::measure_mode = RubyProf::ALLOCATIONS
14
+ assert_equal(RubyProf::ALLOCATIONS, RubyProf::measure_mode)
15
+ end
16
+
17
+ def test_allocations
18
+ result = RubyProf.profile(:track_allocations => true) do
19
+ allocator = Allocator.new
20
+ allocator.run
21
+ end
22
+
23
+ thread = result.threads.first
24
+ assert_in_delta(20, thread.total_time, 1)
25
+
26
+ root_methods = thread.root_methods
27
+ assert_equal(1, root_methods.count)
28
+ assert_equal("MeasureAllocationsTraceTest#test_allocations", root_methods[0].full_name)
29
+
30
+ methods = result.threads.first.methods.sort.reverse
31
+ assert_equal(13, methods.length)
32
+
33
+ # Method 0
34
+ method = methods[0]
35
+ assert_equal('MeasureAllocationsTraceTest#test_allocations', method.full_name)
36
+ assert_in_delta(20, method.total_time, 1)
37
+ assert_equal(0, method.wait_time)
38
+ assert_equal(0, method.self_time)
39
+ assert_in_delta(20, method.children_time, 1)
40
+
41
+ assert_equal(1, method.callers.length)
42
+ call_info = method.callers[0]
43
+ assert_nil(call_info.parent)
44
+ assert_equal(20, call_info.total_time)
45
+ assert_equal(0, call_info.wait_time)
46
+ assert_equal(0, call_info.self_time)
47
+ assert_equal(20, call_info.children_time)
48
+
49
+ assert_equal(2, method.callees.length)
50
+ call_info = method.callees[0]
51
+ assert_equal('Class#new', call_info.target.full_name)
52
+ assert_equal(1, call_info.total_time)
53
+ assert_equal(0, call_info.wait_time)
54
+ assert_equal(1, call_info.self_time)
55
+ assert_equal(0, call_info.children_time)
56
+
57
+ call_info = method.callees[1]
58
+ assert_equal('Allocator#run', call_info.target.full_name)
59
+ assert_equal(19, call_info.total_time)
60
+ assert_equal(0, call_info.wait_time)
61
+ assert_equal(0, call_info.self_time)
62
+ assert_equal(19, call_info.children_time)
63
+
64
+ # Method 1
65
+ method = methods[1]
66
+ assert_equal('Allocator#run',method.full_name)
67
+ assert_equal(19, method.total_time)
68
+ assert_equal(0, method.wait_time)
69
+ assert_equal(0, method.self_time)
70
+ assert_equal(19, method.children_time)
71
+
72
+ assert_equal(1, method.callers.length)
73
+ call_info = method.callers[0]
74
+ assert_equal('MeasureAllocationsTraceTest#test_allocations', call_info.parent.full_name)
75
+ assert_equal(19, call_info.total_time)
76
+ assert_equal(0, call_info.wait_time)
77
+ assert_equal(0, call_info.self_time)
78
+ assert_equal(19, call_info.children_time)
79
+
80
+ assert_equal(1, method.callees.length)
81
+ call_info = method.callees[0]
82
+ assert_equal('Allocator#internal_run', call_info.target.full_name)
83
+ assert_equal(19, call_info.total_time)
84
+ assert_equal(0, call_info.wait_time)
85
+ assert_equal(0, call_info.self_time)
86
+ assert_equal(19, call_info.children_time)
87
+
88
+ # Method 2
89
+ method = methods[2]
90
+ assert_equal('Allocator#internal_run', method.full_name)
91
+ assert_equal(19, method.total_time)
92
+ assert_equal(0, method.wait_time)
93
+ assert_equal(0, method.self_time)
94
+ assert_equal(19, method.children_time)
95
+
96
+ assert_equal(1, method.callers.length)
97
+ call_info = method.callers[0]
98
+ assert_equal('Allocator#run', call_info.parent.full_name)
99
+ assert_equal(19, call_info.total_time)
100
+ assert_equal(0, call_info.wait_time)
101
+ assert_equal(0, call_info.self_time)
102
+ assert_equal(19, call_info.children_time)
103
+
104
+ assert_equal(3, method.callees.length)
105
+ call_info = method.callees[0]
106
+ assert_equal('Allocator#make_arrays', call_info.target.full_name)
107
+ assert_equal(10, call_info.total_time)
108
+ assert_equal(0, call_info.wait_time)
109
+ assert_equal(0, call_info.self_time)
110
+ assert_equal(10, call_info.children_time)
111
+
112
+ call_info = method.callees[1]
113
+ assert_equal('Allocator#make_hashes', call_info.target.full_name)
114
+ assert_equal(5, call_info.total_time)
115
+ assert_equal(0, call_info.wait_time)
116
+ assert_equal(0, call_info.self_time)
117
+ assert_equal(5, call_info.children_time)
118
+
119
+ call_info = method.callees[2]
120
+ assert_equal('Allocator#make_strings', call_info.target.full_name)
121
+ assert_equal(4, call_info.total_time)
122
+ assert_equal(0, call_info.wait_time)
123
+ assert_equal(1, call_info.self_time)
124
+ assert_equal(3, call_info.children_time)
125
+
126
+ # Method 3
127
+ method = methods[3]
128
+ assert_equal('Class#new', method.full_name)
129
+ assert_equal(18, method.total_time)
130
+ assert_equal(0, method.wait_time)
131
+ assert_equal(17, method.self_time)
132
+ assert_equal(1, method.children_time)
133
+
134
+ assert_equal(4, method.callers.length)
135
+ call_info = method.callers[0]
136
+ assert_equal('MeasureAllocationsTraceTest#test_allocations', call_info.parent.full_name)
137
+ assert_equal(1, call_info.total_time)
138
+ assert_equal(0, call_info.wait_time)
139
+ assert_equal(1, call_info.self_time)
140
+ assert_equal(0, call_info.children_time)
141
+
142
+ call_info = method.callers[1]
143
+ assert_equal('Integer#times', call_info.parent.full_name)
144
+ assert_equal(10, call_info.total_time)
145
+ assert_equal(0, call_info.wait_time)
146
+ assert_equal(10, call_info.self_time)
147
+ assert_equal(0, call_info.children_time)
148
+
149
+ call_info = method.callers[2]
150
+ assert_equal('Allocator#make_hashes', call_info.parent.full_name)
151
+ assert_equal(5, call_info.total_time)
152
+ assert_equal(0, call_info.wait_time)
153
+ assert_equal(5, call_info.self_time)
154
+ assert_equal(0, call_info.children_time)
155
+
156
+ call_info = method.callers[3]
157
+ assert_equal('Allocator#make_strings', call_info.parent.full_name)
158
+ assert_equal(2, call_info.total_time)
159
+ assert_equal(0, call_info.wait_time)
160
+ assert_equal(1, call_info.self_time)
161
+ assert_equal(1, call_info.children_time)
162
+
163
+ assert_equal(4, method.callees.length)
164
+ call_info = method.callees[0]
165
+ assert_equal('BasicObject#initialize', call_info.target.full_name)
166
+ assert_equal(0, call_info.total_time)
167
+ assert_equal(0, call_info.wait_time)
168
+ assert_equal(0, call_info.self_time)
169
+ assert_equal(0, call_info.children_time)
170
+
171
+ call_info = method.callees[1]
172
+ assert_equal('Array#initialize', call_info.target.full_name)
173
+ assert_equal(0, call_info.total_time)
174
+ assert_equal(0, call_info.wait_time)
175
+ assert_equal(0, call_info.self_time)
176
+ assert_equal(0, call_info.children_time)
177
+
178
+ call_info = method.callees[2]
179
+ assert_equal('Hash#initialize', call_info.target.full_name)
180
+ assert_equal(0, call_info.total_time)
181
+ assert_equal(0, call_info.wait_time)
182
+ assert_equal(0, call_info.self_time)
183
+ assert_equal(0, call_info.children_time)
184
+
185
+ call_info = method.callees[3]
186
+ assert_equal('String#initialize', call_info.target.full_name)
187
+ assert_equal(1, call_info.total_time)
188
+ assert_equal(0, call_info.wait_time)
189
+ assert_equal(1, call_info.self_time)
190
+ assert_equal(0, call_info.children_time)
191
+
192
+ # Method 4
193
+ method = methods[4]
194
+ assert_equal('Allocator#make_arrays', method.full_name)
195
+ assert_equal(10, method.total_time)
196
+ assert_equal(0, method.wait_time)
197
+ assert_equal(0, method.self_time)
198
+ assert_equal(10, method.children_time)
199
+
200
+ assert_equal(1, method.callers.length)
201
+ call_info = method.callers[0]
202
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
203
+ assert_equal(10, call_info.total_time)
204
+ assert_equal(0, call_info.wait_time)
205
+ assert_equal(0, call_info.self_time)
206
+ assert_equal(10, call_info.children_time)
207
+
208
+ assert_equal(1, method.callees.length)
209
+ call_info = method.callees[0]
210
+ assert_equal('Integer#times', call_info.target.full_name)
211
+ assert_equal(10, call_info.total_time)
212
+ assert_equal(0, call_info.wait_time)
213
+ assert_equal(0, call_info.self_time)
214
+ assert_equal(10, call_info.children_time)
215
+
216
+ # Method 5
217
+ method = methods[5]
218
+ assert_equal('Integer#times', method.full_name)
219
+ assert_equal(10, method.total_time)
220
+ assert_equal(0, method.wait_time)
221
+ assert_equal(0, method.self_time)
222
+ assert_equal(10, method.children_time)
223
+
224
+ assert_equal(1, method.callers.length)
225
+ call_info = method.callers[0]
226
+ assert_equal('Allocator#make_arrays', call_info.parent.full_name)
227
+ assert_equal(10, call_info.total_time)
228
+ assert_equal(0, call_info.wait_time)
229
+ assert_equal(0, call_info.self_time)
230
+ assert_equal(10, call_info.children_time)
231
+
232
+ assert_equal(1, method.callees.length)
233
+ call_info = method.callees[0]
234
+ assert_equal('Class#new', call_info.target.full_name)
235
+ assert_equal(10, call_info.total_time)
236
+ assert_equal(0, call_info.wait_time)
237
+ assert_equal(10, call_info.self_time)
238
+ assert_equal(0, call_info.children_time)
239
+
240
+ # Method 6
241
+ method = methods[6]
242
+ assert_equal('Allocator#make_hashes', method.full_name)
243
+ assert_equal(5, method.total_time)
244
+ assert_equal(0, method.wait_time)
245
+ assert_equal(0, method.self_time)
246
+ assert_equal(5, method.children_time)
247
+
248
+ assert_equal(1, method.callers.length)
249
+ call_info = method.callers[0]
250
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
251
+ assert_equal(5, call_info.total_time)
252
+ assert_equal(0, call_info.wait_time)
253
+ assert_equal(0, call_info.self_time)
254
+ assert_equal(5, call_info.children_time)
255
+
256
+ assert_equal(1, method.callees.length)
257
+ call_info = method.callees[0]
258
+ assert_equal('Class#new', call_info.target.full_name)
259
+ assert_equal(5, call_info.total_time)
260
+ assert_equal(0, call_info.wait_time)
261
+ assert_equal(5, call_info.self_time)
262
+ assert_equal(0, call_info.children_time)
263
+
264
+ # Method 7
265
+ method = methods[7]
266
+ assert_equal('Allocator#make_strings', method.full_name)
267
+ assert_equal(4, method.total_time)
268
+ assert_equal(0, method.wait_time)
269
+ assert_equal(1, method.self_time)
270
+ assert_equal(3, method.children_time)
271
+
272
+ assert_equal(1, method.callers.length)
273
+ call_info = method.callers[0]
274
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
275
+ assert_equal(4, call_info.total_time)
276
+ assert_equal(0, call_info.wait_time)
277
+ assert_equal(1, call_info.self_time)
278
+ assert_equal(3, call_info.children_time)
279
+
280
+ assert_equal(2, method.callees.length)
281
+ call_info = method.callees[0]
282
+ assert_equal('String#*', call_info.target.full_name)
283
+ assert_equal(1, call_info.total_time)
284
+ assert_equal(0, call_info.wait_time)
285
+ assert_equal(1, call_info.self_time)
286
+ assert_equal(0, call_info.children_time)
287
+
288
+ call_info = method.callees[1]
289
+ assert_equal('Class#new', call_info.target.full_name)
290
+ assert_equal(2, call_info.total_time)
291
+ assert_equal(0, call_info.wait_time)
292
+ assert_equal(1, call_info.self_time)
293
+ assert_equal(1, call_info.children_time)
294
+
295
+ # Method 8
296
+ method = methods[8]
297
+ assert_equal('String#*', method.full_name)
298
+ assert_equal(1, method.total_time)
299
+ assert_equal(0, method.wait_time)
300
+ assert_equal(1, method.self_time)
301
+ assert_equal(0, method.children_time)
302
+
303
+ assert_equal(1, method.callers.length)
304
+ call_info = method.callers[0]
305
+ assert_equal('Allocator#make_strings', call_info.parent.full_name)
306
+ assert_equal(1, call_info.total_time)
307
+ assert_equal(0, call_info.wait_time)
308
+ assert_equal(1, call_info.self_time)
309
+ assert_equal(0, call_info.children_time)
310
+
311
+ assert_equal(0, method.callees.length)
312
+
313
+ # Method 9
314
+ method = methods[9]
315
+ assert_equal('String#initialize', method.full_name)
316
+ assert_equal(1, method.total_time)
317
+ assert_equal(0, method.wait_time)
318
+ assert_equal(1, method.self_time)
319
+ assert_equal(0, method.children_time)
320
+
321
+ assert_equal(1, method.callers.length)
322
+ call_info = method.callers[0]
323
+ assert_equal('Class#new', call_info.parent.full_name)
324
+ assert_equal(1, call_info.total_time)
325
+ assert_equal(0, call_info.wait_time)
326
+ assert_equal(1, call_info.self_time)
327
+ assert_equal(0, call_info.children_time)
328
+
329
+ assert_equal(0, method.callees.length)
330
+
331
+ # Method 10
332
+ method = methods[10]
333
+ assert_equal('BasicObject#initialize', method.full_name)
334
+ assert_equal(0, method.total_time)
335
+ assert_equal(0, method.wait_time)
336
+ assert_equal(0, method.self_time)
337
+ assert_equal(0, method.children_time)
338
+
339
+ assert_equal(1, method.callers.length)
340
+ call_info = method.callers[0]
341
+ assert_equal('Class#new', call_info.parent.full_name)
342
+ assert_equal(0, call_info.total_time)
343
+ assert_equal(0, call_info.wait_time)
344
+ assert_equal(0, call_info.self_time)
345
+ assert_equal(0, call_info.children_time)
346
+
347
+ assert_equal(0, method.callees.length)
348
+
349
+ # Method 11
350
+ method = methods[11]
351
+ assert_equal('Hash#initialize', method.full_name)
352
+ assert_equal(0, method.total_time)
353
+ assert_equal(0, method.wait_time)
354
+ assert_equal(0, method.self_time)
355
+ assert_equal(0, method.children_time)
356
+
357
+ assert_equal(1, method.callers.length)
358
+ call_info = method.callers[0]
359
+ assert_equal('Class#new', call_info.parent.full_name)
360
+ assert_equal(0, call_info.total_time)
361
+ assert_equal(0, call_info.wait_time)
362
+ assert_equal(0, call_info.self_time)
363
+ assert_equal(0, call_info.children_time)
364
+
365
+ assert_equal(0, method.callees.length)
366
+
367
+ # Method 12
368
+ method = methods[12]
369
+ assert_equal('Array#initialize', method.full_name)
370
+ assert_equal(0, method.total_time)
371
+ assert_equal(0, method.wait_time)
372
+ assert_equal(0, method.self_time)
373
+ assert_equal(0, method.children_time)
374
+
375
+ assert_equal(1, method.callers.length)
376
+ call_info = method.callers[0]
377
+ assert_equal('Class#new', call_info.parent.full_name)
378
+ assert_equal(0, call_info.total_time)
379
+ assert_equal(0, call_info.wait_time)
380
+ assert_equal(0, call_info.self_time)
381
+ assert_equal(0, call_info.children_time)
382
+
383
+ assert_equal(0, method.callees.length)
384
+ end
385
+ end
@@ -0,0 +1,756 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+ require_relative './measure_allocations'
6
+
7
+ class MeasureMemoryTraceTest < TestCase
8
+ def setup
9
+ RubyProf::measure_mode = RubyProf::MEMORY
10
+ end
11
+
12
+ def test_memory_mode
13
+ RubyProf::measure_mode = RubyProf::MEMORY
14
+ assert_equal(RubyProf::MEMORY, RubyProf::measure_mode)
15
+ end
16
+
17
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.6')
18
+ def test_memory
19
+ result = RubyProf.profile do
20
+ allocator = Allocator.new
21
+ allocator.run
22
+ end
23
+
24
+ thread = result.threads.first
25
+ assert_in_delta(800, thread.total_time, 1)
26
+
27
+ root_methods = thread.root_methods
28
+ assert_equal(1, root_methods.count)
29
+ assert_equal("MeasureMemoryTraceTest#test_memory", root_methods[0].full_name)
30
+
31
+ methods = result.threads.first.methods.sort.reverse
32
+ assert_equal(13, methods.length)
33
+
34
+ # Method 0
35
+ method = methods[0]
36
+ assert_equal('MeasureMemoryTraceTest#test_memory', method.full_name)
37
+ assert_in_delta(800, method.total_time, 1)
38
+ assert_equal(0.0, method.wait_time)
39
+ assert_equal(0.0, method.self_time)
40
+ assert_in_delta(800, method.children_time, 1)
41
+
42
+ assert_equal(1, method.callers.length)
43
+ call_info = method.callers[0]
44
+ assert_nil(call_info.parent)
45
+ assert_equal(800, call_info.total_time)
46
+ assert_equal(0.0, call_info.wait_time)
47
+ assert_equal(0.0, call_info.self_time)
48
+ assert_equal(800, call_info.children_time)
49
+
50
+ assert_equal(2, method.callees.length)
51
+ call_info = method.callees[0]
52
+ assert_equal('Class#new', call_info.target.full_name)
53
+ assert_equal(40.0, call_info.total_time)
54
+ assert_equal(0.0, call_info.wait_time)
55
+ assert_equal(40.0, call_info.self_time)
56
+ assert_equal(0.0, call_info.children_time)
57
+
58
+ call_info = method.callees[1]
59
+ assert_equal('Allocator#run', call_info.target.full_name)
60
+ assert_equal(760.0, call_info.total_time)
61
+ assert_equal(0.0, call_info.wait_time)
62
+ assert_equal(0.0, call_info.self_time)
63
+ assert_equal(760.0, call_info.children_time)
64
+
65
+ # Method 1
66
+ method = methods[1]
67
+ assert_equal('Allocator#run',method.full_name)
68
+ assert_equal(760.0, method.total_time)
69
+ assert_equal(0.0, method.wait_time)
70
+ assert_equal(0.0, method.self_time)
71
+ assert_equal(760.0, method.children_time)
72
+
73
+ assert_equal(1, method.callers.length)
74
+ call_info = method.callers[0]
75
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_info.parent.full_name)
76
+ assert_equal(760.0, call_info.total_time)
77
+ assert_equal(0.0, call_info.wait_time)
78
+ assert_equal(0.0, call_info.self_time)
79
+ assert_equal(760.0, call_info.children_time)
80
+
81
+ assert_equal(1, method.callees.length)
82
+ call_info = method.callees[0]
83
+ assert_equal('Allocator#internal_run', call_info.target.full_name)
84
+ assert_equal(760.0, call_info.total_time)
85
+ assert_equal(0.0, call_info.wait_time)
86
+ assert_equal(0.0, call_info.self_time)
87
+ assert_equal(760.0, call_info.children_time)
88
+
89
+ # Method 2
90
+ method = methods[2]
91
+ assert_equal('Allocator#internal_run', method.full_name)
92
+ assert_equal(760.0, method.total_time)
93
+ assert_equal(0.0, method.wait_time)
94
+ assert_equal(0.0, method.self_time)
95
+ assert_equal(760.0, method.children_time)
96
+
97
+ assert_equal(1, method.callers.length)
98
+ call_info = method.callers[0]
99
+ assert_equal('Allocator#run', call_info.parent.full_name)
100
+ assert_equal(760.0, call_info.total_time)
101
+ assert_equal(0.0, call_info.wait_time)
102
+ assert_equal(0.0, call_info.self_time)
103
+ assert_equal(760.0, call_info.children_time)
104
+
105
+ assert_equal(3, method.callees.length)
106
+ call_info = method.callees[0]
107
+ assert_equal('Allocator#make_arrays', call_info.target.full_name)
108
+ assert_equal(400.0, call_info.total_time)
109
+ assert_equal(0.0, call_info.wait_time)
110
+ assert_equal(0.0, call_info.self_time)
111
+ assert_equal(400.0, call_info.children_time)
112
+
113
+ call_info = method.callees[1]
114
+ assert_equal('Allocator#make_hashes', call_info.target.full_name)
115
+ assert_equal(200.0, call_info.total_time)
116
+ assert_equal(0.0, call_info.wait_time)
117
+ assert_equal(0.0, call_info.self_time)
118
+ assert_equal(200.0, call_info.children_time)
119
+
120
+ call_info = method.callees[2]
121
+ assert_equal('Allocator#make_strings', call_info.target.full_name)
122
+ assert_equal(160.0, call_info.total_time)
123
+ assert_equal(0.0, call_info.wait_time)
124
+ assert_equal(40, call_info.self_time)
125
+ assert_equal(120.0, call_info.children_time)
126
+
127
+ # Method 3
128
+ method = methods[3]
129
+ assert_equal('Class#new', method.full_name)
130
+ assert_equal(720.0, method.total_time)
131
+ assert_equal(0.0, method.wait_time)
132
+ assert_equal(680.0, method.self_time)
133
+ assert_equal(40.0, method.children_time)
134
+
135
+ assert_equal(4, method.callers.length)
136
+ call_info = method.callers[0]
137
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_info.parent.full_name)
138
+ assert_equal(40.0, call_info.total_time)
139
+ assert_equal(0.0, call_info.wait_time)
140
+ assert_equal(40.0, call_info.self_time)
141
+ assert_equal(0.0, call_info.children_time)
142
+
143
+ call_info = method.callers[1]
144
+ assert_equal('Integer#times', call_info.parent.full_name)
145
+ assert_equal(400.0, call_info.total_time)
146
+ assert_equal(0.0, call_info.wait_time)
147
+ assert_equal(400.0, call_info.self_time)
148
+ assert_equal(0.0, call_info.children_time)
149
+
150
+ call_info = method.callers[2]
151
+ assert_equal('Allocator#make_hashes', call_info.parent.full_name)
152
+ assert_equal(200.0, call_info.total_time)
153
+ assert_equal(0.0, call_info.wait_time)
154
+ assert_equal(200.0, call_info.self_time)
155
+ assert_equal(0.0, call_info.children_time)
156
+
157
+ call_info = method.callers[3]
158
+ assert_equal('Allocator#make_strings', call_info.parent.full_name)
159
+ assert_equal(80.0, call_info.total_time)
160
+ assert_equal(0.0, call_info.wait_time)
161
+ assert_equal(40.0, call_info.self_time)
162
+ assert_equal(40.0, call_info.children_time)
163
+
164
+ assert_equal(4, method.callees.length)
165
+ call_info = method.callees[0]
166
+ assert_equal('BasicObject#initialize', call_info.target.full_name)
167
+ assert_equal(0.0, call_info.total_time)
168
+ assert_equal(0.0, call_info.wait_time)
169
+ assert_equal(0.0, call_info.self_time)
170
+ assert_equal(0.0, call_info.children_time)
171
+
172
+ call_info = method.callees[1]
173
+ assert_equal('Array#initialize', call_info.target.full_name)
174
+ assert_equal(0.0, call_info.total_time)
175
+ assert_equal(0.0, call_info.wait_time)
176
+ assert_equal(0.0, call_info.self_time)
177
+ assert_equal(0.0, call_info.children_time)
178
+
179
+ call_info = method.callees[2]
180
+ assert_equal('Hash#initialize', call_info.target.full_name)
181
+ assert_equal(0.0, call_info.total_time)
182
+ assert_equal(0.0, call_info.wait_time)
183
+ assert_equal(0.0, call_info.self_time)
184
+ assert_equal(0.0, call_info.children_time)
185
+
186
+ call_info = method.callees[3]
187
+ assert_equal('String#initialize', call_info.target.full_name)
188
+ assert_equal(40.0, call_info.total_time)
189
+ assert_equal(0.0, call_info.wait_time)
190
+ assert_equal(40.0, call_info.self_time)
191
+ assert_equal(0.0, call_info.children_time)
192
+
193
+ # Method 4
194
+ method = methods[4]
195
+ assert_equal('Allocator#make_arrays', method.full_name)
196
+ assert_equal(400.0, method.total_time)
197
+ assert_equal(0.0, method.wait_time)
198
+ assert_equal(0.0, method.self_time)
199
+ assert_equal(400.0, method.children_time)
200
+
201
+ assert_equal(1, method.callers.length)
202
+ call_info = method.callers[0]
203
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
204
+ assert_equal(400.0, call_info.total_time)
205
+ assert_equal(0.0, call_info.wait_time)
206
+ assert_equal(0.0, call_info.self_time)
207
+ assert_equal(400.0, call_info.children_time)
208
+
209
+ assert_equal(1, method.callees.length)
210
+ call_info = method.callees[0]
211
+ assert_equal('Integer#times', call_info.target.full_name)
212
+ assert_equal(400.0, call_info.total_time)
213
+ assert_equal(0.0, call_info.wait_time)
214
+ assert_equal(0.0, call_info.self_time)
215
+ assert_equal(400.0, call_info.children_time)
216
+
217
+ # Method 5
218
+ method = methods[5]
219
+ assert_equal('Integer#times', method.full_name)
220
+ assert_equal(400.0, method.total_time)
221
+ assert_equal(0.0, method.wait_time)
222
+ assert_equal(0.0, method.self_time)
223
+ assert_equal(400.0, method.children_time)
224
+
225
+ assert_equal(1, method.callers.length)
226
+ call_info = method.callers[0]
227
+ assert_equal('Allocator#make_arrays', call_info.parent.full_name)
228
+ assert_equal(400.0, call_info.total_time)
229
+ assert_equal(0.0, call_info.wait_time)
230
+ assert_equal(0.0, call_info.self_time)
231
+ assert_equal(400.0, call_info.children_time)
232
+
233
+ assert_equal(1, method.callees.length)
234
+ call_info = method.callees[0]
235
+ assert_equal('Class#new', call_info.target.full_name)
236
+ assert_equal(400.0, call_info.total_time)
237
+ assert_equal(0.0, call_info.wait_time)
238
+ assert_equal(400.0, call_info.self_time)
239
+ assert_equal(0.0, call_info.children_time)
240
+
241
+ # Method 6
242
+ method = methods[6]
243
+ assert_equal('Allocator#make_hashes', method.full_name)
244
+ assert_equal(200.0, method.total_time)
245
+ assert_equal(0.0, method.wait_time)
246
+ assert_equal(0.0, method.self_time)
247
+ assert_equal(200.0, method.children_time)
248
+
249
+ assert_equal(1, method.callers.length)
250
+ call_info = method.callers[0]
251
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
252
+ assert_equal(200.0, call_info.total_time)
253
+ assert_equal(0.0, call_info.wait_time)
254
+ assert_equal(0.0, call_info.self_time)
255
+ assert_equal(200.0, call_info.children_time)
256
+
257
+ assert_equal(1, method.callees.length)
258
+ call_info = method.callees[0]
259
+ assert_equal('Class#new', call_info.target.full_name)
260
+ assert_equal(200.0, call_info.total_time)
261
+ assert_equal(0.0, call_info.wait_time)
262
+ assert_equal(200.0, call_info.self_time)
263
+ assert_equal(0.0, call_info.children_time)
264
+
265
+ # Method 7
266
+ method = methods[7]
267
+ assert_equal('Allocator#make_strings', method.full_name)
268
+ assert_equal(160.0, method.total_time)
269
+ assert_equal(0.0, method.wait_time)
270
+ assert_equal(40.0, method.self_time)
271
+ assert_equal(120.0, method.children_time)
272
+
273
+ assert_equal(1, method.callers.length)
274
+ call_info = method.callers[0]
275
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
276
+ assert_equal(160.0, call_info.total_time)
277
+ assert_equal(0.0, call_info.wait_time)
278
+ assert_equal(40.0, call_info.self_time)
279
+ assert_equal(120.0, call_info.children_time)
280
+
281
+ assert_equal(2, method.callees.length)
282
+ call_info = method.callees[0]
283
+ assert_equal('String#*', call_info.target.full_name)
284
+ assert_equal(40.0, call_info.total_time)
285
+ assert_equal(0.0, call_info.wait_time)
286
+ assert_equal(40.0, call_info.self_time)
287
+ assert_equal(0.0, call_info.children_time)
288
+
289
+ call_info = method.callees[1]
290
+ assert_equal('Class#new', call_info.target.full_name)
291
+ assert_equal(80.0, call_info.total_time)
292
+ assert_equal(0.0, call_info.wait_time)
293
+ assert_equal(40.0, call_info.self_time)
294
+ assert_equal(40.0, call_info.children_time)
295
+
296
+ # Method 8
297
+ method = methods[8]
298
+ assert_equal('String#*', method.full_name)
299
+ assert_equal(40.0, method.total_time)
300
+ assert_equal(0.0, method.wait_time)
301
+ assert_equal(40.0, method.self_time)
302
+ assert_equal(0.0, method.children_time)
303
+
304
+ assert_equal(1, method.callers.length)
305
+ call_info = method.callers[0]
306
+ assert_equal('Allocator#make_strings', call_info.parent.full_name)
307
+ assert_equal(40.0, call_info.total_time)
308
+ assert_equal(0.0, call_info.wait_time)
309
+ assert_equal(40.0, call_info.self_time)
310
+ assert_equal(0.0, call_info.children_time)
311
+
312
+ assert_equal(0.0, method.callees.length)
313
+
314
+ # Method 9
315
+ method = methods[9]
316
+ assert_equal('String#initialize', method.full_name)
317
+ assert_equal(40.0, method.total_time)
318
+ assert_equal(0.0, method.wait_time)
319
+ assert_equal(40.0, method.self_time)
320
+ assert_equal(0.0, method.children_time)
321
+
322
+ assert_equal(1, method.callers.length)
323
+ call_info = method.callers[0]
324
+ assert_equal('Class#new', call_info.parent.full_name)
325
+ assert_equal(40.0, call_info.total_time)
326
+ assert_equal(0.0, call_info.wait_time)
327
+ assert_equal(40.0, call_info.self_time)
328
+ assert_equal(0.0, call_info.children_time)
329
+
330
+ assert_equal(0.0, method.callees.length)
331
+
332
+ # Method 10
333
+ method = methods[10]
334
+ assert_equal('BasicObject#initialize', method.full_name)
335
+ assert_equal(0.0, method.total_time)
336
+ assert_equal(0.0, method.wait_time)
337
+ assert_equal(0.0, method.self_time)
338
+ assert_equal(0.0, method.children_time)
339
+
340
+ assert_equal(1, method.callers.length)
341
+ call_info = method.callers[0]
342
+ assert_equal('Class#new', call_info.parent.full_name)
343
+ assert_equal(0.0, call_info.total_time)
344
+ assert_equal(0.0, call_info.wait_time)
345
+ assert_equal(0.0, call_info.self_time)
346
+ assert_equal(0.0, call_info.children_time)
347
+
348
+ assert_equal(0.0, method.callees.length)
349
+
350
+ # Method 11
351
+ method = methods[11]
352
+ assert_equal('Hash#initialize', method.full_name)
353
+ assert_equal(0.0, method.total_time)
354
+ assert_equal(0.0, method.wait_time)
355
+ assert_equal(0.0, method.self_time)
356
+ assert_equal(0.0, method.children_time)
357
+
358
+ assert_equal(1, method.callers.length)
359
+ call_info = method.callers[0]
360
+ assert_equal('Class#new', call_info.parent.full_name)
361
+ assert_equal(0.0, call_info.total_time)
362
+ assert_equal(0.0, call_info.wait_time)
363
+ assert_equal(0.0, call_info.self_time)
364
+ assert_equal(0.0, call_info.children_time)
365
+
366
+ assert_equal(0.0, method.callees.length)
367
+
368
+ # Method 12
369
+ method = methods[12]
370
+ assert_equal('Array#initialize', method.full_name)
371
+ assert_equal(0.0, method.total_time)
372
+ assert_equal(0.0, method.wait_time)
373
+ assert_equal(0.0, method.self_time)
374
+ assert_equal(0.0, method.children_time)
375
+
376
+ assert_equal(1, method.callers.length)
377
+ call_info = method.callers[0]
378
+ assert_equal('Class#new', call_info.parent.full_name)
379
+ assert_equal(0.0, call_info.total_time)
380
+ assert_equal(0.0, call_info.wait_time)
381
+ assert_equal(0.0, call_info.self_time)
382
+ assert_equal(0.0, call_info.children_time)
383
+
384
+ assert_equal(0.0, method.callees.length)
385
+ end
386
+ else
387
+ def test_memory
388
+ result = RubyProf.profile do
389
+ allocator = Allocator.new
390
+ allocator.run
391
+ end
392
+
393
+ thread = result.threads.first
394
+ assert_in_delta(1760, thread.total_time, 1)
395
+
396
+ root_methods = thread.root_methods
397
+ assert_equal(1, root_methods.count)
398
+ assert_equal("MeasureMemoryTraceTest#test_memory", root_methods[0].full_name)
399
+
400
+ methods = result.threads.first.methods.sort.reverse
401
+ assert_equal(13, methods.length)
402
+
403
+ # Method 0
404
+ method = methods[0]
405
+ assert_equal('MeasureMemoryTraceTest#test_memory', method.full_name)
406
+ assert_in_delta(1760, method.total_time, 1)
407
+ assert_equal(0.0, method.wait_time)
408
+ assert_equal(0.0, method.self_time)
409
+ assert_in_delta(1760, method.children_time, 1)
410
+
411
+ assert_equal(1, method.callers.length)
412
+ call_info = method.callers[0]
413
+ assert_nil(call_info.parent)
414
+ assert_equal(1760, call_info.total_time)
415
+ assert_equal(0.0, call_info.wait_time)
416
+ assert_equal(0.0, call_info.self_time)
417
+ assert_equal(1760, call_info.children_time)
418
+
419
+ assert_equal(2, method.callees.length)
420
+ call_info = method.callees[0]
421
+ assert_equal('Class#new', call_info.target.full_name)
422
+ assert_equal(40.0, call_info.total_time)
423
+ assert_equal(0.0, call_info.wait_time)
424
+ assert_equal(40.0, call_info.self_time)
425
+ assert_equal(0.0, call_info.children_time)
426
+
427
+ call_info = method.callees[1]
428
+ assert_equal('Allocator#run', call_info.target.full_name)
429
+ assert_equal(1720.0, call_info.total_time)
430
+ assert_equal(0.0, call_info.wait_time)
431
+ assert_equal(0.0, call_info.self_time)
432
+ assert_equal(1720.0, call_info.children_time)
433
+
434
+ # Method 1
435
+ method = methods[1]
436
+ assert_equal('Allocator#run',method.full_name)
437
+ assert_equal(1720.0, method.total_time)
438
+ assert_equal(0.0, method.wait_time)
439
+ assert_equal(0.0, method.self_time)
440
+ assert_equal(1720.0, method.children_time)
441
+
442
+ assert_equal(1, method.callers.length)
443
+ call_info = method.callers[0]
444
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_info.parent.full_name)
445
+ assert_equal(1720.0, call_info.total_time)
446
+ assert_equal(0.0, call_info.wait_time)
447
+ assert_equal(0.0, call_info.self_time)
448
+ assert_equal(1720.0, call_info.children_time)
449
+
450
+ assert_equal(1, method.callees.length)
451
+ call_info = method.callees[0]
452
+ assert_equal('Allocator#internal_run', call_info.target.full_name)
453
+ assert_equal(1720.0, call_info.total_time)
454
+ assert_equal(0.0, call_info.wait_time)
455
+ assert_equal(0.0, call_info.self_time)
456
+ assert_equal(1720.0, call_info.children_time)
457
+
458
+ # Method 2
459
+ method = methods[2]
460
+ assert_equal('Allocator#internal_run', method.full_name)
461
+ assert_equal(1720.0, method.total_time)
462
+ assert_equal(0.0, method.wait_time)
463
+ assert_equal(0.0, method.self_time)
464
+ assert_equal(1720.0, method.children_time)
465
+
466
+ assert_equal(1, method.callers.length)
467
+ call_info = method.callers[0]
468
+ assert_equal('Allocator#run', call_info.parent.full_name)
469
+ assert_equal(1720.0, call_info.total_time)
470
+ assert_equal(0.0, call_info.wait_time)
471
+ assert_equal(0.0, call_info.self_time)
472
+ assert_equal(1720.0, call_info.children_time)
473
+
474
+ assert_equal(3, method.callees.length)
475
+ call_info = method.callees[0]
476
+ assert_equal('Allocator#make_arrays', call_info.target.full_name)
477
+ assert_equal(400.0, call_info.total_time)
478
+ assert_equal(0.0, call_info.wait_time)
479
+ assert_equal(0.0, call_info.self_time)
480
+ assert_equal(400.0, call_info.children_time)
481
+
482
+ call_info = method.callees[1]
483
+ assert_equal('Allocator#make_hashes', call_info.target.full_name)
484
+ assert_equal(1160.0, call_info.total_time)
485
+ assert_equal(0.0, call_info.wait_time)
486
+ assert_equal(0.0, call_info.self_time)
487
+ assert_equal(1160.0, call_info.children_time)
488
+
489
+ call_info = method.callees[2]
490
+ assert_equal('Allocator#make_strings', call_info.target.full_name)
491
+ assert_equal(160.0, call_info.total_time)
492
+ assert_equal(0.0, call_info.wait_time)
493
+ assert_equal(40, call_info.self_time)
494
+ assert_equal(120.0, call_info.children_time)
495
+
496
+ # Method 3
497
+ method = methods[3]
498
+ assert_equal('Class#new', method.full_name)
499
+ assert_equal(1680.0, method.total_time)
500
+ assert_equal(0.0, method.wait_time)
501
+ assert_equal(1640.0, method.self_time)
502
+ assert_equal(40.0, method.children_time)
503
+
504
+ assert_equal(4, method.callers.length)
505
+ call_info = method.callers[0]
506
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_info.parent.full_name)
507
+ assert_equal(40.0, call_info.total_time)
508
+ assert_equal(0.0, call_info.wait_time)
509
+ assert_equal(40.0, call_info.self_time)
510
+ assert_equal(0.0, call_info.children_time)
511
+
512
+ call_info = method.callers[1]
513
+ assert_equal('Integer#times', call_info.parent.full_name)
514
+ assert_equal(400.0, call_info.total_time)
515
+ assert_equal(0.0, call_info.wait_time)
516
+ assert_equal(400.0, call_info.self_time)
517
+ assert_equal(0.0, call_info.children_time)
518
+
519
+ call_info = method.callers[2]
520
+ assert_equal('Allocator#make_hashes', call_info.parent.full_name)
521
+ assert_equal(1160.0, call_info.total_time)
522
+ assert_equal(0.0, call_info.wait_time)
523
+ assert_equal(1160.0, call_info.self_time)
524
+ assert_equal(0.0, call_info.children_time)
525
+
526
+ call_info = method.callers[3]
527
+ assert_equal('Allocator#make_strings', call_info.parent.full_name)
528
+ assert_equal(80.0, call_info.total_time)
529
+ assert_equal(0.0, call_info.wait_time)
530
+ assert_equal(40.0, call_info.self_time)
531
+ assert_equal(40.0, call_info.children_time)
532
+
533
+ assert_equal(4, method.callees.length)
534
+ call_info = method.callees[0]
535
+ assert_equal('BasicObject#initialize', call_info.target.full_name)
536
+ assert_equal(0.0, call_info.total_time)
537
+ assert_equal(0.0, call_info.wait_time)
538
+ assert_equal(0.0, call_info.self_time)
539
+ assert_equal(0.0, call_info.children_time)
540
+
541
+ call_info = method.callees[1]
542
+ assert_equal('Array#initialize', call_info.target.full_name)
543
+ assert_equal(0.0, call_info.total_time)
544
+ assert_equal(0.0, call_info.wait_time)
545
+ assert_equal(0.0, call_info.self_time)
546
+ assert_equal(0.0, call_info.children_time)
547
+
548
+ call_info = method.callees[2]
549
+ assert_equal('Hash#initialize', call_info.target.full_name)
550
+ assert_equal(0.0, call_info.total_time)
551
+ assert_equal(0.0, call_info.wait_time)
552
+ assert_equal(0.0, call_info.self_time)
553
+ assert_equal(0.0, call_info.children_time)
554
+
555
+ call_info = method.callees[3]
556
+ assert_equal('String#initialize', call_info.target.full_name)
557
+ assert_equal(40.0, call_info.total_time)
558
+ assert_equal(0.0, call_info.wait_time)
559
+ assert_equal(40.0, call_info.self_time)
560
+ assert_equal(0.0, call_info.children_time)
561
+
562
+ # Method 4
563
+ method = methods[4]
564
+ assert_equal('Allocator#make_hashes', method.full_name)
565
+ assert_equal(1160.0, method.total_time)
566
+ assert_equal(0.0, method.wait_time)
567
+ assert_equal(0.0, method.self_time)
568
+ assert_equal(1160.0, method.children_time)
569
+
570
+ assert_equal(1, method.callers.length)
571
+ call_info = method.callers[0]
572
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
573
+ assert_equal(1160.0, call_info.total_time)
574
+ assert_equal(0.0, call_info.wait_time)
575
+ assert_equal(0.0, call_info.self_time)
576
+ assert_equal(1160.0, call_info.children_time)
577
+
578
+ assert_equal(1, method.callees.length)
579
+ call_info = method.callees[0]
580
+ assert_equal('Class#new', call_info.target.full_name)
581
+ assert_equal(1160.0, call_info.total_time)
582
+ assert_equal(0.0, call_info.wait_time)
583
+ assert_equal(1160.0, call_info.self_time)
584
+ assert_equal(0.0, call_info.children_time)
585
+
586
+ # Method 5
587
+ method = methods[5]
588
+ assert_equal('Allocator#make_arrays', method.full_name)
589
+ assert_equal(400.0, method.total_time)
590
+ assert_equal(0.0, method.wait_time)
591
+ assert_equal(0.0, method.self_time)
592
+ assert_equal(400.0, method.children_time)
593
+
594
+ assert_equal(1, method.callers.length)
595
+ call_info = method.callers[0]
596
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
597
+ assert_equal(400.0, call_info.total_time)
598
+ assert_equal(0.0, call_info.wait_time)
599
+ assert_equal(0.0, call_info.self_time)
600
+ assert_equal(400.0, call_info.children_time)
601
+
602
+ assert_equal(1, method.callees.length)
603
+ call_info = method.callees[0]
604
+ assert_equal('Integer#times', call_info.target.full_name)
605
+ assert_equal(400.0, call_info.total_time)
606
+ assert_equal(0.0, call_info.wait_time)
607
+ assert_equal(0.0, call_info.self_time)
608
+ assert_equal(400.0, call_info.children_time)
609
+
610
+ # Method 6
611
+ method = methods[6]
612
+ assert_equal('Integer#times', method.full_name)
613
+ assert_equal(400.0, method.total_time)
614
+ assert_equal(0.0, method.wait_time)
615
+ assert_equal(0.0, method.self_time)
616
+ assert_equal(400.0, method.children_time)
617
+
618
+ assert_equal(1, method.callers.length)
619
+ call_info = method.callers[0]
620
+ assert_equal('Allocator#make_arrays', call_info.parent.full_name)
621
+ assert_equal(400.0, call_info.total_time)
622
+ assert_equal(0.0, call_info.wait_time)
623
+ assert_equal(0.0, call_info.self_time)
624
+ assert_equal(400.0, call_info.children_time)
625
+
626
+ assert_equal(1, method.callees.length)
627
+ call_info = method.callees[0]
628
+ assert_equal('Class#new', call_info.target.full_name)
629
+ assert_equal(400.0, call_info.total_time)
630
+ assert_equal(0.0, call_info.wait_time)
631
+ assert_equal(400.0, call_info.self_time)
632
+ assert_equal(0.0, call_info.children_time)
633
+
634
+ # Method 7
635
+ method = methods[7]
636
+ assert_equal('Allocator#make_strings', method.full_name)
637
+ assert_equal(160.0, method.total_time)
638
+ assert_equal(0.0, method.wait_time)
639
+ assert_equal(40.0, method.self_time)
640
+ assert_equal(120.0, method.children_time)
641
+
642
+ assert_equal(1, method.callers.length)
643
+ call_info = method.callers[0]
644
+ assert_equal('Allocator#internal_run', call_info.parent.full_name)
645
+ assert_equal(160.0, call_info.total_time)
646
+ assert_equal(0.0, call_info.wait_time)
647
+ assert_equal(40.0, call_info.self_time)
648
+ assert_equal(120.0, call_info.children_time)
649
+
650
+ assert_equal(2, method.callees.length)
651
+ call_info = method.callees[0]
652
+ assert_equal('String#*', call_info.target.full_name)
653
+ assert_equal(40.0, call_info.total_time)
654
+ assert_equal(0.0, call_info.wait_time)
655
+ assert_equal(40.0, call_info.self_time)
656
+ assert_equal(0.0, call_info.children_time)
657
+
658
+ call_info = method.callees[1]
659
+ assert_equal('Class#new', call_info.target.full_name)
660
+ assert_equal(80.0, call_info.total_time)
661
+ assert_equal(0.0, call_info.wait_time)
662
+ assert_equal(40.0, call_info.self_time)
663
+ assert_equal(40.0, call_info.children_time)
664
+
665
+ # Method 8
666
+ method = methods[8]
667
+ assert_equal('String#*', method.full_name)
668
+ assert_equal(40.0, method.total_time)
669
+ assert_equal(0.0, method.wait_time)
670
+ assert_equal(40.0, method.self_time)
671
+ assert_equal(0.0, method.children_time)
672
+
673
+ assert_equal(1, method.callers.length)
674
+ call_info = method.callers[0]
675
+ assert_equal('Allocator#make_strings', call_info.parent.full_name)
676
+ assert_equal(40.0, call_info.total_time)
677
+ assert_equal(0.0, call_info.wait_time)
678
+ assert_equal(40.0, call_info.self_time)
679
+ assert_equal(0.0, call_info.children_time)
680
+
681
+ assert_equal(0.0, method.callees.length)
682
+
683
+ # Method 9
684
+ method = methods[9]
685
+ assert_equal('String#initialize', method.full_name)
686
+ assert_equal(40.0, method.total_time)
687
+ assert_equal(0.0, method.wait_time)
688
+ assert_equal(40.0, method.self_time)
689
+ assert_equal(0.0, method.children_time)
690
+
691
+ assert_equal(1, method.callers.length)
692
+ call_info = method.callers[0]
693
+ assert_equal('Class#new', call_info.parent.full_name)
694
+ assert_equal(40.0, call_info.total_time)
695
+ assert_equal(0.0, call_info.wait_time)
696
+ assert_equal(40.0, call_info.self_time)
697
+ assert_equal(0.0, call_info.children_time)
698
+
699
+ assert_equal(0.0, method.callees.length)
700
+
701
+ # Method 10
702
+ method = methods[10]
703
+ assert_equal('BasicObject#initialize', method.full_name)
704
+ assert_equal(0.0, method.total_time)
705
+ assert_equal(0.0, method.wait_time)
706
+ assert_equal(0.0, method.self_time)
707
+ assert_equal(0.0, method.children_time)
708
+
709
+ assert_equal(1, method.callers.length)
710
+ call_info = method.callers[0]
711
+ assert_equal('Class#new', call_info.parent.full_name)
712
+ assert_equal(0.0, call_info.total_time)
713
+ assert_equal(0.0, call_info.wait_time)
714
+ assert_equal(0.0, call_info.self_time)
715
+ assert_equal(0.0, call_info.children_time)
716
+
717
+ assert_equal(0.0, method.callees.length)
718
+
719
+ # Method 11
720
+ method = methods[11]
721
+ assert_equal('Hash#initialize', method.full_name)
722
+ assert_equal(0.0, method.total_time)
723
+ assert_equal(0.0, method.wait_time)
724
+ assert_equal(0.0, method.self_time)
725
+ assert_equal(0.0, method.children_time)
726
+
727
+ assert_equal(1, method.callers.length)
728
+ call_info = method.callers[0]
729
+ assert_equal('Class#new', call_info.parent.full_name)
730
+ assert_equal(0.0, call_info.total_time)
731
+ assert_equal(0.0, call_info.wait_time)
732
+ assert_equal(0.0, call_info.self_time)
733
+ assert_equal(0.0, call_info.children_time)
734
+
735
+ assert_equal(0.0, method.callees.length)
736
+
737
+ # Method 12
738
+ method = methods[12]
739
+ assert_equal('Array#initialize', method.full_name)
740
+ assert_equal(0.0, method.total_time)
741
+ assert_equal(0.0, method.wait_time)
742
+ assert_equal(0.0, method.self_time)
743
+ assert_equal(0.0, method.children_time)
744
+
745
+ assert_equal(1, method.callers.length)
746
+ call_info = method.callers[0]
747
+ assert_equal('Class#new', call_info.parent.full_name)
748
+ assert_equal(0.0, call_info.total_time)
749
+ assert_equal(0.0, call_info.wait_time)
750
+ assert_equal(0.0, call_info.self_time)
751
+ assert_equal(0.0, call_info.children_time)
752
+
753
+ assert_equal(0.0, method.callees.length)
754
+ end
755
+ end
756
+ end