ruby-prof 0.18.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +44 -1
  3. data/LICENSE +2 -2
  4. data/README.rdoc +1 -483
  5. data/Rakefile +3 -6
  6. data/bin/ruby-prof +111 -128
  7. data/ext/ruby_prof/extconf.rb +6 -38
  8. data/ext/ruby_prof/rp_aggregate_call_tree.c +41 -0
  9. data/ext/ruby_prof/rp_aggregate_call_tree.h +13 -0
  10. data/ext/ruby_prof/rp_allocation.c +259 -0
  11. data/ext/ruby_prof/rp_allocation.h +31 -0
  12. data/ext/ruby_prof/rp_call_tree.c +353 -0
  13. data/ext/ruby_prof/rp_call_tree.h +43 -0
  14. data/ext/ruby_prof/rp_call_trees.c +266 -0
  15. data/ext/ruby_prof/rp_call_trees.h +29 -0
  16. data/ext/ruby_prof/rp_measure_allocations.c +25 -51
  17. data/ext/ruby_prof/rp_measure_memory.c +21 -56
  18. data/ext/ruby_prof/rp_measure_process_time.c +37 -43
  19. data/ext/ruby_prof/rp_measure_wall_time.c +40 -21
  20. data/ext/ruby_prof/rp_measurement.c +221 -0
  21. data/ext/ruby_prof/rp_measurement.h +50 -0
  22. data/ext/ruby_prof/rp_method.c +279 -439
  23. data/ext/ruby_prof/rp_method.h +33 -45
  24. data/ext/ruby_prof/rp_profile.c +902 -0
  25. data/ext/ruby_prof/rp_profile.h +36 -0
  26. data/ext/ruby_prof/rp_stack.c +163 -132
  27. data/ext/ruby_prof/rp_stack.h +18 -28
  28. data/ext/ruby_prof/rp_thread.c +192 -124
  29. data/ext/ruby_prof/rp_thread.h +18 -8
  30. data/ext/ruby_prof/ruby_prof.c +36 -778
  31. data/ext/ruby_prof/ruby_prof.h +11 -45
  32. data/ext/ruby_prof/vc/ruby_prof.vcxproj +18 -12
  33. data/lib/ruby-prof.rb +4 -21
  34. data/lib/ruby-prof/assets/call_stack_printer.html.erb +710 -0
  35. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  36. data/lib/ruby-prof/assets/graph_printer.html.erb +355 -0
  37. data/lib/ruby-prof/call_tree.rb +57 -0
  38. data/lib/ruby-prof/call_tree_visitor.rb +36 -0
  39. data/lib/ruby-prof/compatibility.rb +37 -107
  40. data/lib/ruby-prof/exclude_common_methods.rb +198 -0
  41. data/lib/ruby-prof/measurement.rb +17 -0
  42. data/lib/ruby-prof/method_info.rb +47 -90
  43. data/lib/ruby-prof/printers/abstract_printer.rb +73 -50
  44. data/lib/ruby-prof/printers/call_info_printer.rb +24 -12
  45. data/lib/ruby-prof/printers/call_stack_printer.rb +66 -152
  46. data/lib/ruby-prof/printers/call_tree_printer.rb +20 -12
  47. data/lib/ruby-prof/printers/dot_printer.rb +5 -5
  48. data/lib/ruby-prof/printers/flat_printer.rb +6 -24
  49. data/lib/ruby-prof/printers/graph_html_printer.rb +6 -192
  50. data/lib/ruby-prof/printers/graph_printer.rb +11 -14
  51. data/lib/ruby-prof/printers/multi_printer.rb +66 -23
  52. data/lib/ruby-prof/profile.rb +10 -3
  53. data/lib/ruby-prof/thread.rb +5 -20
  54. data/lib/ruby-prof/version.rb +1 -1
  55. data/ruby-prof.gemspec +9 -2
  56. data/test/abstract_printer_test.rb +0 -27
  57. data/test/alias_test.rb +126 -0
  58. data/test/basic_test.rb +1 -86
  59. data/test/call_tree_visitor_test.rb +32 -0
  60. data/test/call_trees_test.rb +66 -0
  61. data/test/dynamic_method_test.rb +0 -2
  62. data/test/exclude_methods_test.rb +17 -12
  63. data/test/fiber_test.rb +214 -23
  64. data/test/gc_test.rb +105 -0
  65. data/test/inverse_call_tree_test.rb +175 -0
  66. data/test/line_number_test.rb +118 -40
  67. data/test/marshal_test.rb +115 -0
  68. data/test/measure_allocations.rb +30 -0
  69. data/test/measure_allocations_test.rb +361 -12
  70. data/test/measure_allocations_trace_test.rb +375 -0
  71. data/test/measure_memory_trace_test.rb +1101 -0
  72. data/test/measure_process_time_test.rb +757 -33
  73. data/test/measure_times.rb +56 -0
  74. data/test/measure_wall_time_test.rb +329 -149
  75. data/test/multi_printer_test.rb +1 -34
  76. data/test/pause_resume_test.rb +24 -15
  77. data/test/prime.rb +1 -1
  78. data/test/prime_script.rb +6 -0
  79. data/test/printer_call_stack_test.rb +28 -0
  80. data/test/printer_call_tree_test.rb +31 -0
  81. data/test/printer_flat_test.rb +68 -0
  82. data/test/printer_graph_html_test.rb +60 -0
  83. data/test/printer_graph_test.rb +41 -0
  84. data/test/printers_test.rb +32 -166
  85. data/test/printing_recursive_graph_test.rb +26 -72
  86. data/test/recursive_test.rb +68 -77
  87. data/test/stack_printer_test.rb +2 -15
  88. data/test/start_stop_test.rb +22 -25
  89. data/test/test_helper.rb +6 -261
  90. data/test/thread_test.rb +11 -54
  91. data/test/unique_call_path_test.rb +25 -107
  92. data/test/yarv_test.rb +1 -0
  93. metadata +43 -41
  94. data/examples/flat.txt +0 -50
  95. data/examples/graph.dot +0 -84
  96. data/examples/graph.html +0 -823
  97. data/examples/graph.txt +0 -139
  98. data/examples/multi.flat.txt +0 -23
  99. data/examples/multi.graph.html +0 -760
  100. data/examples/multi.grind.dat +0 -114
  101. data/examples/multi.stack.html +0 -547
  102. data/examples/stack.html +0 -547
  103. data/ext/ruby_prof/rp_call_info.c +0 -425
  104. data/ext/ruby_prof/rp_call_info.h +0 -53
  105. data/ext/ruby_prof/rp_measure.c +0 -40
  106. data/ext/ruby_prof/rp_measure.h +0 -45
  107. data/ext/ruby_prof/rp_measure_cpu_time.c +0 -136
  108. data/ext/ruby_prof/rp_measure_gc_runs.c +0 -73
  109. data/ext/ruby_prof/rp_measure_gc_time.c +0 -60
  110. data/lib/ruby-prof/aggregate_call_info.rb +0 -76
  111. data/lib/ruby-prof/assets/call_stack_printer.css.html +0 -117
  112. data/lib/ruby-prof/assets/call_stack_printer.js.html +0 -385
  113. data/lib/ruby-prof/call_info.rb +0 -115
  114. data/lib/ruby-prof/call_info_visitor.rb +0 -40
  115. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +0 -83
  116. data/lib/ruby-prof/profile/exclude_common_methods.rb +0 -207
  117. data/lib/ruby-prof/profile/legacy_method_elimination.rb +0 -50
  118. data/test/aggregate_test.rb +0 -136
  119. data/test/block_test.rb +0 -74
  120. data/test/call_info_test.rb +0 -78
  121. data/test/call_info_visitor_test.rb +0 -31
  122. data/test/issue137_test.rb +0 -63
  123. data/test/measure_cpu_time_test.rb +0 -212
  124. data/test/measure_gc_runs_test.rb +0 -32
  125. data/test/measure_gc_time_test.rb +0 -36
  126. data/test/measure_memory_test.rb +0 -33
  127. data/test/method_elimination_test.rb +0 -84
  128. data/test/module_test.rb +0 -45
  129. data/test/stack_test.rb +0 -138
@@ -0,0 +1,375 @@
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
+ methods = result.threads.first.methods.sort.reverse
27
+ assert_equal(13, methods.length)
28
+
29
+ # Method 0
30
+ method = methods[0]
31
+ assert_equal('MeasureAllocationsTraceTest#test_allocations', method.full_name)
32
+ assert_in_delta(20, method.total_time, 1)
33
+ assert_equal(0, method.wait_time)
34
+ assert_equal(0, method.self_time)
35
+ assert_in_delta(20, method.children_time, 1)
36
+
37
+ assert_equal(0, method.call_trees.callers.length)
38
+
39
+ assert_equal(2, method.call_trees.callees.length)
40
+ call_tree = method.call_trees.callees[0]
41
+ assert_equal('Class#new', call_tree.target.full_name)
42
+ assert_equal(1, call_tree.total_time)
43
+ assert_equal(0, call_tree.wait_time)
44
+ assert_equal(1, call_tree.self_time)
45
+ assert_equal(0, call_tree.children_time)
46
+
47
+ call_tree = method.call_trees.callees[1]
48
+ assert_equal('Allocator#run', call_tree.target.full_name)
49
+ assert_equal(19, call_tree.total_time)
50
+ assert_equal(0, call_tree.wait_time)
51
+ assert_equal(0, call_tree.self_time)
52
+ assert_equal(19, call_tree.children_time)
53
+
54
+ # Method 1
55
+ method = methods[1]
56
+ assert_equal('Allocator#run',method.full_name)
57
+ assert_equal(19, method.total_time)
58
+ assert_equal(0, method.wait_time)
59
+ assert_equal(0, method.self_time)
60
+ assert_equal(19, method.children_time)
61
+
62
+ assert_equal(1, method.call_trees.callers.length)
63
+ call_tree = method.call_trees.callers[0]
64
+ assert_equal('MeasureAllocationsTraceTest#test_allocations', call_tree.parent.target.full_name)
65
+ assert_equal(19, call_tree.total_time)
66
+ assert_equal(0, call_tree.wait_time)
67
+ assert_equal(0, call_tree.self_time)
68
+ assert_equal(19, call_tree.children_time)
69
+
70
+ assert_equal(1, method.call_trees.callees.length)
71
+ call_tree = method.call_trees.callees[0]
72
+ assert_equal('Allocator#internal_run', call_tree.target.full_name)
73
+ assert_equal(19, call_tree.total_time)
74
+ assert_equal(0, call_tree.wait_time)
75
+ assert_equal(0, call_tree.self_time)
76
+ assert_equal(19, call_tree.children_time)
77
+
78
+ # Method 2
79
+ method = methods[2]
80
+ assert_equal('Allocator#internal_run', method.full_name)
81
+ assert_equal(19, method.total_time)
82
+ assert_equal(0, method.wait_time)
83
+ assert_equal(0, method.self_time)
84
+ assert_equal(19, method.children_time)
85
+
86
+ assert_equal(1, method.call_trees.callers.length)
87
+ call_tree = method.call_trees.callers[0]
88
+ assert_equal('Allocator#run', call_tree.parent.target.full_name)
89
+ assert_equal(19, call_tree.total_time)
90
+ assert_equal(0, call_tree.wait_time)
91
+ assert_equal(0, call_tree.self_time)
92
+ assert_equal(19, call_tree.children_time)
93
+
94
+ assert_equal(3, method.call_trees.callees.length)
95
+ call_tree = method.call_trees.callees[0]
96
+ assert_equal('Allocator#make_arrays', call_tree.target.full_name)
97
+ assert_equal(10, call_tree.total_time)
98
+ assert_equal(0, call_tree.wait_time)
99
+ assert_equal(0, call_tree.self_time)
100
+ assert_equal(10, call_tree.children_time)
101
+
102
+ call_tree = method.call_trees.callees[1]
103
+ assert_equal('Allocator#make_hashes', call_tree.target.full_name)
104
+ assert_equal(5, call_tree.total_time)
105
+ assert_equal(0, call_tree.wait_time)
106
+ assert_equal(0, call_tree.self_time)
107
+ assert_equal(5, call_tree.children_time)
108
+
109
+ call_tree = method.call_trees.callees[2]
110
+ assert_equal('Allocator#make_strings', call_tree.target.full_name)
111
+ assert_equal(4, call_tree.total_time)
112
+ assert_equal(0, call_tree.wait_time)
113
+ assert_equal(1, call_tree.self_time)
114
+ assert_equal(3, call_tree.children_time)
115
+
116
+ # Method 3
117
+ method = methods[3]
118
+ assert_equal('Class#new', method.full_name)
119
+ assert_equal(18, method.total_time)
120
+ assert_equal(0, method.wait_time)
121
+ assert_equal(17, method.self_time)
122
+ assert_equal(1, method.children_time)
123
+
124
+ assert_equal(4, method.call_trees.callers.length)
125
+ call_tree = method.call_trees.callers[0]
126
+ assert_equal('MeasureAllocationsTraceTest#test_allocations', call_tree.parent.target.full_name)
127
+ assert_equal(1, call_tree.total_time)
128
+ assert_equal(0, call_tree.wait_time)
129
+ assert_equal(1, call_tree.self_time)
130
+ assert_equal(0, call_tree.children_time)
131
+
132
+ call_tree = method.call_trees.callers[1]
133
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
134
+ assert_equal(10, call_tree.total_time)
135
+ assert_equal(0, call_tree.wait_time)
136
+ assert_equal(10, call_tree.self_time)
137
+ assert_equal(0, call_tree.children_time)
138
+
139
+ call_tree = method.call_trees.callers[2]
140
+ assert_equal('Allocator#make_hashes', call_tree.parent.target.full_name)
141
+ assert_equal(5, call_tree.total_time)
142
+ assert_equal(0, call_tree.wait_time)
143
+ assert_equal(5, call_tree.self_time)
144
+ assert_equal(0, call_tree.children_time)
145
+
146
+ call_tree = method.call_trees.callers[3]
147
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
148
+ assert_equal(2, call_tree.total_time)
149
+ assert_equal(0, call_tree.wait_time)
150
+ assert_equal(1, call_tree.self_time)
151
+ assert_equal(1, call_tree.children_time)
152
+
153
+ assert_equal(4, method.call_trees.callees.length)
154
+ call_tree = method.call_trees.callees[0]
155
+ assert_equal('BasicObject#initialize', call_tree.target.full_name)
156
+ assert_equal(0, call_tree.total_time)
157
+ assert_equal(0, call_tree.wait_time)
158
+ assert_equal(0, call_tree.self_time)
159
+ assert_equal(0, call_tree.children_time)
160
+
161
+ call_tree = method.call_trees.callees[1]
162
+ assert_equal('Array#initialize', call_tree.target.full_name)
163
+ assert_equal(0, call_tree.total_time)
164
+ assert_equal(0, call_tree.wait_time)
165
+ assert_equal(0, call_tree.self_time)
166
+ assert_equal(0, call_tree.children_time)
167
+
168
+ call_tree = method.call_trees.callees[2]
169
+ assert_equal('Hash#initialize', call_tree.target.full_name)
170
+ assert_equal(0, call_tree.total_time)
171
+ assert_equal(0, call_tree.wait_time)
172
+ assert_equal(0, call_tree.self_time)
173
+ assert_equal(0, call_tree.children_time)
174
+
175
+ call_tree = method.call_trees.callees[3]
176
+ assert_equal('String#initialize', call_tree.target.full_name)
177
+ assert_equal(1, call_tree.total_time)
178
+ assert_equal(0, call_tree.wait_time)
179
+ assert_equal(1, call_tree.self_time)
180
+ assert_equal(0, call_tree.children_time)
181
+
182
+ # Method 4
183
+ method = methods[4]
184
+ assert_equal('Allocator#make_arrays', method.full_name)
185
+ assert_equal(10, method.total_time)
186
+ assert_equal(0, method.wait_time)
187
+ assert_equal(0, method.self_time)
188
+ assert_equal(10, method.children_time)
189
+
190
+ assert_equal(1, method.call_trees.callers.length)
191
+ call_tree = method.call_trees.callers[0]
192
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
193
+ assert_equal(10, call_tree.total_time)
194
+ assert_equal(0, call_tree.wait_time)
195
+ assert_equal(0, call_tree.self_time)
196
+ assert_equal(10, call_tree.children_time)
197
+
198
+ assert_equal(1, method.call_trees.callees.length)
199
+ call_tree = method.call_trees.callees[0]
200
+ assert_equal('Integer#times', call_tree.target.full_name)
201
+ assert_equal(10, call_tree.total_time)
202
+ assert_equal(0, call_tree.wait_time)
203
+ assert_equal(0, call_tree.self_time)
204
+ assert_equal(10, call_tree.children_time)
205
+
206
+ # Method 5
207
+ method = methods[5]
208
+ assert_equal('Integer#times', method.full_name)
209
+ assert_equal(10, method.total_time)
210
+ assert_equal(0, method.wait_time)
211
+ assert_equal(0, method.self_time)
212
+ assert_equal(10, method.children_time)
213
+
214
+ assert_equal(1, method.call_trees.callers.length)
215
+ call_tree = method.call_trees.callers[0]
216
+ assert_equal('Allocator#make_arrays', call_tree.parent.target.full_name)
217
+ assert_equal(10, call_tree.total_time)
218
+ assert_equal(0, call_tree.wait_time)
219
+ assert_equal(0, call_tree.self_time)
220
+ assert_equal(10, call_tree.children_time)
221
+
222
+ assert_equal(1, method.call_trees.callees.length)
223
+ call_tree = method.call_trees.callees[0]
224
+ assert_equal('Class#new', call_tree.target.full_name)
225
+ assert_equal(10, call_tree.total_time)
226
+ assert_equal(0, call_tree.wait_time)
227
+ assert_equal(10, call_tree.self_time)
228
+ assert_equal(0, call_tree.children_time)
229
+
230
+ # Method 6
231
+ method = methods[6]
232
+ assert_equal('Allocator#make_hashes', method.full_name)
233
+ assert_equal(5, method.total_time)
234
+ assert_equal(0, method.wait_time)
235
+ assert_equal(0, method.self_time)
236
+ assert_equal(5, method.children_time)
237
+
238
+ assert_equal(1, method.call_trees.callers.length)
239
+ call_tree = method.call_trees.callers[0]
240
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
241
+ assert_equal(5, call_tree.total_time)
242
+ assert_equal(0, call_tree.wait_time)
243
+ assert_equal(0, call_tree.self_time)
244
+ assert_equal(5, call_tree.children_time)
245
+
246
+ assert_equal(1, method.call_trees.callees.length)
247
+ call_tree = method.call_trees.callees[0]
248
+ assert_equal('Class#new', call_tree.target.full_name)
249
+ assert_equal(5, call_tree.total_time)
250
+ assert_equal(0, call_tree.wait_time)
251
+ assert_equal(5, call_tree.self_time)
252
+ assert_equal(0, call_tree.children_time)
253
+
254
+ # Method 7
255
+ method = methods[7]
256
+ assert_equal('Allocator#make_strings', method.full_name)
257
+ assert_equal(4, method.total_time)
258
+ assert_equal(0, method.wait_time)
259
+ assert_equal(1, method.self_time)
260
+ assert_equal(3, method.children_time)
261
+
262
+ assert_equal(1, method.call_trees.callers.length)
263
+ call_tree = method.call_trees.callers[0]
264
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
265
+ assert_equal(4, call_tree.total_time)
266
+ assert_equal(0, call_tree.wait_time)
267
+ assert_equal(1, call_tree.self_time)
268
+ assert_equal(3, call_tree.children_time)
269
+
270
+ assert_equal(2, method.call_trees.callees.length)
271
+ call_tree = method.call_trees.callees[0]
272
+ assert_equal('String#*', call_tree.target.full_name)
273
+ assert_equal(1, call_tree.total_time)
274
+ assert_equal(0, call_tree.wait_time)
275
+ assert_equal(1, call_tree.self_time)
276
+ assert_equal(0, call_tree.children_time)
277
+
278
+ call_tree = method.call_trees.callees[1]
279
+ assert_equal('Class#new', call_tree.target.full_name)
280
+ assert_equal(2, call_tree.total_time)
281
+ assert_equal(0, call_tree.wait_time)
282
+ assert_equal(1, call_tree.self_time)
283
+ assert_equal(1, call_tree.children_time)
284
+
285
+ # Method 8
286
+ method = methods[8]
287
+ assert_equal('String#*', method.full_name)
288
+ assert_equal(1, method.total_time)
289
+ assert_equal(0, method.wait_time)
290
+ assert_equal(1, method.self_time)
291
+ assert_equal(0, method.children_time)
292
+
293
+ assert_equal(1, method.call_trees.callers.length)
294
+ call_tree = method.call_trees.callers[0]
295
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
296
+ assert_equal(1, call_tree.total_time)
297
+ assert_equal(0, call_tree.wait_time)
298
+ assert_equal(1, call_tree.self_time)
299
+ assert_equal(0, call_tree.children_time)
300
+
301
+ assert_equal(0, method.call_trees.callees.length)
302
+
303
+ # Method 9
304
+ method = methods[9]
305
+ assert_equal('String#initialize', method.full_name)
306
+ assert_equal(1, method.total_time)
307
+ assert_equal(0, method.wait_time)
308
+ assert_equal(1, method.self_time)
309
+ assert_equal(0, method.children_time)
310
+
311
+ assert_equal(1, method.call_trees.callers.length)
312
+ call_tree = method.call_trees.callers[0]
313
+ assert_equal('Class#new', call_tree.parent.target.full_name)
314
+ assert_equal(1, call_tree.total_time)
315
+ assert_equal(0, call_tree.wait_time)
316
+ assert_equal(1, call_tree.self_time)
317
+ assert_equal(0, call_tree.children_time)
318
+
319
+ assert_equal(0, method.call_trees.callees.length)
320
+
321
+ # Method 10
322
+ method = methods[10]
323
+ assert_equal('BasicObject#initialize', method.full_name)
324
+ assert_equal(0, method.total_time)
325
+ assert_equal(0, method.wait_time)
326
+ assert_equal(0, method.self_time)
327
+ assert_equal(0, method.children_time)
328
+
329
+ assert_equal(1, method.call_trees.callers.length)
330
+ call_tree = method.call_trees.callers[0]
331
+ assert_equal('Class#new', call_tree.parent.target.full_name)
332
+ assert_equal(0, call_tree.total_time)
333
+ assert_equal(0, call_tree.wait_time)
334
+ assert_equal(0, call_tree.self_time)
335
+ assert_equal(0, call_tree.children_time)
336
+
337
+ assert_equal(0, method.call_trees.callees.length)
338
+
339
+ # Method 11
340
+ method = methods[11]
341
+ assert_equal('Hash#initialize', method.full_name)
342
+ assert_equal(0, method.total_time)
343
+ assert_equal(0, method.wait_time)
344
+ assert_equal(0, method.self_time)
345
+ assert_equal(0, method.children_time)
346
+
347
+ assert_equal(1, method.call_trees.callers.length)
348
+ call_tree = method.call_trees.callers[0]
349
+ assert_equal('Class#new', call_tree.parent.target.full_name)
350
+ assert_equal(0, call_tree.total_time)
351
+ assert_equal(0, call_tree.wait_time)
352
+ assert_equal(0, call_tree.self_time)
353
+ assert_equal(0, call_tree.children_time)
354
+
355
+ assert_equal(0, method.call_trees.callees.length)
356
+
357
+ # Method 12
358
+ method = methods[12]
359
+ assert_equal('Array#initialize', method.full_name)
360
+ assert_equal(0, method.total_time)
361
+ assert_equal(0, method.wait_time)
362
+ assert_equal(0, method.self_time)
363
+ assert_equal(0, method.children_time)
364
+
365
+ assert_equal(1, method.call_trees.callers.length)
366
+ call_tree = method.call_trees.callers[0]
367
+ assert_equal('Class#new', call_tree.parent.target.full_name)
368
+ assert_equal(0, call_tree.total_time)
369
+ assert_equal(0, call_tree.wait_time)
370
+ assert_equal(0, call_tree.self_time)
371
+ assert_equal(0, call_tree.children_time)
372
+
373
+ assert_equal(0, method.call_trees.callees.length)
374
+ end
375
+ end
@@ -0,0 +1,1101 @@
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
+ methods = result.threads.first.methods.sort.reverse
28
+ assert_equal(13, methods.length)
29
+
30
+ # Method 0
31
+ method = methods[0]
32
+ assert_equal('MeasureMemoryTraceTest#test_memory', method.full_name)
33
+ assert_in_delta(800, method.total_time, 1)
34
+ assert_equal(0.0, method.wait_time)
35
+ assert_equal(0.0, method.self_time)
36
+ assert_in_delta(800, method.children_time, 1)
37
+
38
+ assert_equal(0, method.call_trees.callers.length)
39
+
40
+ assert_equal(2, method.call_trees.callees.length)
41
+ call_tree = method.call_trees.callees[0]
42
+ assert_equal('Class#new', call_tree.target.full_name)
43
+ assert_equal(40.0, call_tree.total_time)
44
+ assert_equal(0.0, call_tree.wait_time)
45
+ assert_equal(40.0, call_tree.self_time)
46
+ assert_equal(0.0, call_tree.children_time)
47
+
48
+ call_tree = method.call_trees.callees[1]
49
+ assert_equal('Allocator#run', call_tree.target.full_name)
50
+ assert_equal(760.0, call_tree.total_time)
51
+ assert_equal(0.0, call_tree.wait_time)
52
+ assert_equal(0.0, call_tree.self_time)
53
+ assert_equal(760.0, call_tree.children_time)
54
+
55
+ # Method 1
56
+ method = methods[1]
57
+ assert_equal('Allocator#run',method.full_name)
58
+ assert_equal(760.0, method.total_time)
59
+ assert_equal(0.0, method.wait_time)
60
+ assert_equal(0.0, method.self_time)
61
+ assert_equal(760.0, method.children_time)
62
+
63
+ assert_equal(1, method.call_trees.callers.length)
64
+ call_tree = method.call_trees.callers[0]
65
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_tree.parent.target.full_name)
66
+ assert_equal(760.0, call_tree.total_time)
67
+ assert_equal(0.0, call_tree.wait_time)
68
+ assert_equal(0.0, call_tree.self_time)
69
+ assert_equal(760.0, call_tree.children_time)
70
+
71
+ assert_equal(1, method.call_trees.callees.length)
72
+ call_tree = method.call_trees.callees[0]
73
+ assert_equal('Allocator#internal_run', call_tree.target.full_name)
74
+ assert_equal(760.0, call_tree.total_time)
75
+ assert_equal(0.0, call_tree.wait_time)
76
+ assert_equal(0.0, call_tree.self_time)
77
+ assert_equal(760.0, call_tree.children_time)
78
+
79
+ # Method 2
80
+ method = methods[2]
81
+ assert_equal('Allocator#internal_run', method.full_name)
82
+ assert_equal(760.0, method.total_time)
83
+ assert_equal(0.0, method.wait_time)
84
+ assert_equal(0.0, method.self_time)
85
+ assert_equal(760.0, method.children_time)
86
+
87
+ assert_equal(1, method.call_trees.callers.length)
88
+ call_tree = method.call_trees.callers[0]
89
+ assert_equal('Allocator#run', call_tree.parent.target.full_name)
90
+ assert_equal(760.0, call_tree.total_time)
91
+ assert_equal(0.0, call_tree.wait_time)
92
+ assert_equal(0.0, call_tree.self_time)
93
+ assert_equal(760.0, call_tree.children_time)
94
+
95
+ assert_equal(3, method.call_trees.callees.length)
96
+ call_tree = method.call_trees.callees[0]
97
+ assert_equal('Allocator#make_arrays', call_tree.target.full_name)
98
+ assert_equal(400.0, call_tree.total_time)
99
+ assert_equal(0.0, call_tree.wait_time)
100
+ assert_equal(0.0, call_tree.self_time)
101
+ assert_equal(400.0, call_tree.children_time)
102
+
103
+ call_tree = method.call_trees.callees[1]
104
+ assert_equal('Allocator#make_hashes', call_tree.target.full_name)
105
+ assert_equal(200.0, call_tree.total_time)
106
+ assert_equal(0.0, call_tree.wait_time)
107
+ assert_equal(0.0, call_tree.self_time)
108
+ assert_equal(200.0, call_tree.children_time)
109
+
110
+ call_tree = method.call_trees.callees[2]
111
+ assert_equal('Allocator#make_strings', call_tree.target.full_name)
112
+ assert_equal(160.0, call_tree.total_time)
113
+ assert_equal(0.0, call_tree.wait_time)
114
+ assert_equal(40, call_tree.self_time)
115
+ assert_equal(120.0, call_tree.children_time)
116
+
117
+ # Method 3
118
+ method = methods[3]
119
+ assert_equal('Class#new', method.full_name)
120
+ assert_equal(720.0, method.total_time)
121
+ assert_equal(0.0, method.wait_time)
122
+ assert_equal(680.0, method.self_time)
123
+ assert_equal(40.0, method.children_time)
124
+
125
+ assert_equal(4, method.call_trees.callers.length)
126
+ call_tree = method.call_trees.callers[0]
127
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_tree.parent.target.full_name)
128
+ assert_equal(40.0, call_tree.total_time)
129
+ assert_equal(0.0, call_tree.wait_time)
130
+ assert_equal(40.0, call_tree.self_time)
131
+ assert_equal(0.0, call_tree.children_time)
132
+
133
+ call_tree = method.call_trees.callers[1]
134
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
135
+ assert_equal(400.0, call_tree.total_time)
136
+ assert_equal(0.0, call_tree.wait_time)
137
+ assert_equal(400.0, call_tree.self_time)
138
+ assert_equal(0.0, call_tree.children_time)
139
+
140
+ call_tree = method.call_trees.callers[2]
141
+ assert_equal('Allocator#make_hashes', call_tree.parent.target.full_name)
142
+ assert_equal(200.0, call_tree.total_time)
143
+ assert_equal(0.0, call_tree.wait_time)
144
+ assert_equal(200.0, call_tree.self_time)
145
+ assert_equal(0.0, call_tree.children_time)
146
+
147
+ call_tree = method.call_trees.callers[3]
148
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
149
+ assert_equal(80.0, call_tree.total_time)
150
+ assert_equal(0.0, call_tree.wait_time)
151
+ assert_equal(40.0, call_tree.self_time)
152
+ assert_equal(40.0, call_tree.children_time)
153
+
154
+ assert_equal(4, method.call_trees.callees.length)
155
+ call_tree = method.call_trees.callees[0]
156
+ assert_equal('BasicObject#initialize', call_tree.target.full_name)
157
+ assert_equal(0.0, call_tree.total_time)
158
+ assert_equal(0.0, call_tree.wait_time)
159
+ assert_equal(0.0, call_tree.self_time)
160
+ assert_equal(0.0, call_tree.children_time)
161
+
162
+ call_tree = method.call_trees.callees[1]
163
+ assert_equal('Array#initialize', call_tree.target.full_name)
164
+ assert_equal(0.0, call_tree.total_time)
165
+ assert_equal(0.0, call_tree.wait_time)
166
+ assert_equal(0.0, call_tree.self_time)
167
+ assert_equal(0.0, call_tree.children_time)
168
+
169
+ call_tree = method.call_trees.callees[2]
170
+ assert_equal('Hash#initialize', call_tree.target.full_name)
171
+ assert_equal(0.0, call_tree.total_time)
172
+ assert_equal(0.0, call_tree.wait_time)
173
+ assert_equal(0.0, call_tree.self_time)
174
+ assert_equal(0.0, call_tree.children_time)
175
+
176
+ call_tree = method.call_trees.callees[3]
177
+ assert_equal('String#initialize', call_tree.target.full_name)
178
+ assert_equal(40.0, call_tree.total_time)
179
+ assert_equal(0.0, call_tree.wait_time)
180
+ assert_equal(40.0, call_tree.self_time)
181
+ assert_equal(0.0, call_tree.children_time)
182
+
183
+ # Method 4
184
+ method = methods[4]
185
+ assert_equal('Allocator#make_arrays', method.full_name)
186
+ assert_equal(400.0, method.total_time)
187
+ assert_equal(0.0, method.wait_time)
188
+ assert_equal(0.0, method.self_time)
189
+ assert_equal(400.0, method.children_time)
190
+
191
+ assert_equal(1, method.call_trees.callers.length)
192
+ call_tree = method.call_trees.callers[0]
193
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
194
+ assert_equal(400.0, call_tree.total_time)
195
+ assert_equal(0.0, call_tree.wait_time)
196
+ assert_equal(0.0, call_tree.self_time)
197
+ assert_equal(400.0, call_tree.children_time)
198
+
199
+ assert_equal(1, method.call_trees.callees.length)
200
+ call_tree = method.call_trees.callees[0]
201
+ assert_equal('Integer#times', call_tree.target.full_name)
202
+ assert_equal(400.0, call_tree.total_time)
203
+ assert_equal(0.0, call_tree.wait_time)
204
+ assert_equal(0.0, call_tree.self_time)
205
+ assert_equal(400.0, call_tree.children_time)
206
+
207
+ # Method 5
208
+ method = methods[5]
209
+ assert_equal('Integer#times', method.full_name)
210
+ assert_equal(400.0, method.total_time)
211
+ assert_equal(0.0, method.wait_time)
212
+ assert_equal(0.0, method.self_time)
213
+ assert_equal(400.0, method.children_time)
214
+
215
+ assert_equal(1, method.call_trees.callers.length)
216
+ call_tree = method.call_trees.callers[0]
217
+ assert_equal('Allocator#make_arrays', call_tree.parent.target.full_name)
218
+ assert_equal(400.0, call_tree.total_time)
219
+ assert_equal(0.0, call_tree.wait_time)
220
+ assert_equal(0.0, call_tree.self_time)
221
+ assert_equal(400.0, call_tree.children_time)
222
+
223
+ assert_equal(1, method.call_trees.callees.length)
224
+ call_tree = method.call_trees.callees[0]
225
+ assert_equal('Class#new', call_tree.target.full_name)
226
+ assert_equal(400.0, call_tree.total_time)
227
+ assert_equal(0.0, call_tree.wait_time)
228
+ assert_equal(400.0, call_tree.self_time)
229
+ assert_equal(0.0, call_tree.children_time)
230
+
231
+ # Method 6
232
+ method = methods[6]
233
+ assert_equal('Allocator#make_hashes', method.full_name)
234
+ assert_equal(200.0, method.total_time)
235
+ assert_equal(0.0, method.wait_time)
236
+ assert_equal(0.0, method.self_time)
237
+ assert_equal(200.0, method.children_time)
238
+
239
+ assert_equal(1, method.call_trees.callers.length)
240
+ call_tree = method.call_trees.callers[0]
241
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
242
+ assert_equal(200.0, call_tree.total_time)
243
+ assert_equal(0.0, call_tree.wait_time)
244
+ assert_equal(0.0, call_tree.self_time)
245
+ assert_equal(200.0, call_tree.children_time)
246
+
247
+ assert_equal(1, method.call_trees.callees.length)
248
+ call_tree = method.call_trees.callees[0]
249
+ assert_equal('Class#new', call_tree.target.full_name)
250
+ assert_equal(200.0, call_tree.total_time)
251
+ assert_equal(0.0, call_tree.wait_time)
252
+ assert_equal(200.0, call_tree.self_time)
253
+ assert_equal(0.0, call_tree.children_time)
254
+
255
+ # Method 7
256
+ method = methods[7]
257
+ assert_equal('Allocator#make_strings', method.full_name)
258
+ assert_equal(160.0, method.total_time)
259
+ assert_equal(0.0, method.wait_time)
260
+ assert_equal(40.0, method.self_time)
261
+ assert_equal(120.0, method.children_time)
262
+
263
+ assert_equal(1, method.call_trees.callers.length)
264
+ call_tree = method.call_trees.callers[0]
265
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
266
+ assert_equal(160.0, call_tree.total_time)
267
+ assert_equal(0.0, call_tree.wait_time)
268
+ assert_equal(40.0, call_tree.self_time)
269
+ assert_equal(120.0, call_tree.children_time)
270
+
271
+ assert_equal(2, method.call_trees.callees.length)
272
+ call_tree = method.call_trees.callees[0]
273
+ assert_equal('String#*', call_tree.target.full_name)
274
+ assert_equal(40.0, call_tree.total_time)
275
+ assert_equal(0.0, call_tree.wait_time)
276
+ assert_equal(40.0, call_tree.self_time)
277
+ assert_equal(0.0, call_tree.children_time)
278
+
279
+ call_tree = method.call_trees.callees[1]
280
+ assert_equal('Class#new', call_tree.target.full_name)
281
+ assert_equal(80.0, call_tree.total_time)
282
+ assert_equal(0.0, call_tree.wait_time)
283
+ assert_equal(40.0, call_tree.self_time)
284
+ assert_equal(40.0, call_tree.children_time)
285
+
286
+ # Method 8
287
+ method = methods[8]
288
+ assert_equal('String#*', method.full_name)
289
+ assert_equal(40.0, method.total_time)
290
+ assert_equal(0.0, method.wait_time)
291
+ assert_equal(40.0, method.self_time)
292
+ assert_equal(0.0, method.children_time)
293
+
294
+ assert_equal(1, method.call_trees.callers.length)
295
+ call_tree = method.call_trees.callers[0]
296
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
297
+ assert_equal(40.0, call_tree.total_time)
298
+ assert_equal(0.0, call_tree.wait_time)
299
+ assert_equal(40.0, call_tree.self_time)
300
+ assert_equal(0.0, call_tree.children_time)
301
+
302
+ assert_equal(0.0, method.call_trees.callees.length)
303
+
304
+ # Method 9
305
+ method = methods[9]
306
+ assert_equal('String#initialize', method.full_name)
307
+ assert_equal(40.0, method.total_time)
308
+ assert_equal(0.0, method.wait_time)
309
+ assert_equal(40.0, method.self_time)
310
+ assert_equal(0.0, method.children_time)
311
+
312
+ assert_equal(1, method.call_trees.callers.length)
313
+ call_tree = method.call_trees.callers[0]
314
+ assert_equal('Class#new', call_tree.parent.target.full_name)
315
+ assert_equal(40.0, call_tree.total_time)
316
+ assert_equal(0.0, call_tree.wait_time)
317
+ assert_equal(40.0, call_tree.self_time)
318
+ assert_equal(0.0, call_tree.children_time)
319
+
320
+ assert_equal(0.0, method.call_trees.callees.length)
321
+
322
+ # Method 10
323
+ method = methods[10]
324
+ assert_equal('BasicObject#initialize', method.full_name)
325
+ assert_equal(0.0, method.total_time)
326
+ assert_equal(0.0, method.wait_time)
327
+ assert_equal(0.0, method.self_time)
328
+ assert_equal(0.0, method.children_time)
329
+
330
+ assert_equal(1, method.call_trees.callers.length)
331
+ call_tree = method.call_trees.callers[0]
332
+ assert_equal('Class#new', call_tree.parent.target.full_name)
333
+ assert_equal(0.0, call_tree.total_time)
334
+ assert_equal(0.0, call_tree.wait_time)
335
+ assert_equal(0.0, call_tree.self_time)
336
+ assert_equal(0.0, call_tree.children_time)
337
+
338
+ assert_equal(0.0, method.call_trees.callees.length)
339
+
340
+ # Method 11
341
+ method = methods[11]
342
+ assert_equal('Hash#initialize', method.full_name)
343
+ assert_equal(0.0, method.total_time)
344
+ assert_equal(0.0, method.wait_time)
345
+ assert_equal(0.0, method.self_time)
346
+ assert_equal(0.0, method.children_time)
347
+
348
+ assert_equal(1, method.call_trees.callers.length)
349
+ call_tree = method.call_trees.callers[0]
350
+ assert_equal('Class#new', call_tree.parent.target.full_name)
351
+ assert_equal(0.0, call_tree.total_time)
352
+ assert_equal(0.0, call_tree.wait_time)
353
+ assert_equal(0.0, call_tree.self_time)
354
+ assert_equal(0.0, call_tree.children_time)
355
+
356
+ assert_equal(0.0, method.call_trees.callees.length)
357
+
358
+ # Method 12
359
+ method = methods[12]
360
+ assert_equal('Array#initialize', method.full_name)
361
+ assert_equal(0.0, method.total_time)
362
+ assert_equal(0.0, method.wait_time)
363
+ assert_equal(0.0, method.self_time)
364
+ assert_equal(0.0, method.children_time)
365
+
366
+ assert_equal(1, method.call_trees.callers.length)
367
+ call_tree = method.call_trees.callers[0]
368
+ assert_equal('Class#new', call_tree.parent.target.full_name)
369
+ assert_equal(0.0, call_tree.total_time)
370
+ assert_equal(0.0, call_tree.wait_time)
371
+ assert_equal(0.0, call_tree.self_time)
372
+ assert_equal(0.0, call_tree.children_time)
373
+
374
+ assert_equal(0.0, method.call_trees.callees.length)
375
+ end
376
+ elsif Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7')
377
+ def test_memory
378
+ result = RubyProf.profile do
379
+ allocator = Allocator.new
380
+ allocator.run
381
+ end
382
+
383
+ thread = result.threads.first
384
+
385
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
386
+ assert_in_delta(800, thread.total_time, 1)
387
+ else
388
+ assert_in_delta(1760, thread.total_time, 1)
389
+ end
390
+
391
+ methods = result.threads.first.methods.sort.reverse
392
+ assert_equal(13, methods.length)
393
+
394
+ # Method 0
395
+ method = methods[0]
396
+ assert_equal('MeasureMemoryTraceTest#test_memory', method.full_name)
397
+ assert_in_delta(1760, method.total_time, 1)
398
+
399
+ assert_equal(0.0, method.wait_time)
400
+ assert_equal(0.0, method.self_time)
401
+ assert_in_delta(1760, method.children_time, 1)
402
+
403
+ assert_equal(0, method.call_trees.callers.length)
404
+
405
+ assert_equal(2, method.call_trees.callees.length)
406
+ call_tree = method.call_trees.callees[0]
407
+ assert_equal('Class#new', call_tree.target.full_name)
408
+ assert_equal(40.0, call_tree.total_time)
409
+ assert_equal(0.0, call_tree.wait_time)
410
+ assert_equal(40.0, call_tree.self_time)
411
+ assert_equal(0.0, call_tree.children_time)
412
+
413
+ call_tree = method.call_trees.callees[1]
414
+ assert_equal('Allocator#run', call_tree.target.full_name)
415
+ assert_equal(1720.0, call_tree.total_time)
416
+ assert_equal(0.0, call_tree.wait_time)
417
+ assert_equal(0.0, call_tree.self_time)
418
+ assert_equal(1720.0, call_tree.children_time)
419
+
420
+ # Method 1
421
+ method = methods[1]
422
+ assert_equal('Allocator#run',method.full_name)
423
+ assert_equal(1720.0, method.total_time)
424
+ assert_equal(0.0, method.wait_time)
425
+ assert_equal(0.0, method.self_time)
426
+ assert_equal(1720.0, method.children_time)
427
+
428
+ assert_equal(1, method.call_trees.callers.length)
429
+ call_tree = method.call_trees.callers[0]
430
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_tree.parent.target.full_name)
431
+ assert_equal(1720.0, call_tree.total_time)
432
+ assert_equal(0.0, call_tree.wait_time)
433
+ assert_equal(0.0, call_tree.self_time)
434
+ assert_equal(1720.0, call_tree.children_time)
435
+
436
+ assert_equal(1, method.call_trees.callees.length)
437
+ call_tree = method.call_trees.callees[0]
438
+ assert_equal('Allocator#internal_run', call_tree.target.full_name)
439
+ assert_equal(1720.0, call_tree.total_time)
440
+ assert_equal(0.0, call_tree.wait_time)
441
+ assert_equal(0.0, call_tree.self_time)
442
+ assert_equal(1720.0, call_tree.children_time)
443
+
444
+ # Method 2
445
+ method = methods[2]
446
+ assert_equal('Allocator#internal_run', method.full_name)
447
+ assert_equal(1720.0, method.total_time)
448
+ assert_equal(0.0, method.wait_time)
449
+ assert_equal(0.0, method.self_time)
450
+ assert_equal(1720.0, method.children_time)
451
+
452
+ assert_equal(1, method.call_trees.callers.length)
453
+ call_tree = method.call_trees.callers[0]
454
+ assert_equal('Allocator#run', call_tree.parent.target.full_name)
455
+ assert_equal(1720.0, call_tree.total_time)
456
+ assert_equal(0.0, call_tree.wait_time)
457
+ assert_equal(0.0, call_tree.self_time)
458
+ assert_equal(1720.0, call_tree.children_time)
459
+
460
+ assert_equal(3, method.call_trees.callees.length)
461
+ call_tree = method.call_trees.callees[0]
462
+ assert_equal('Allocator#make_arrays', call_tree.target.full_name)
463
+ assert_equal(400.0, call_tree.total_time)
464
+ assert_equal(0.0, call_tree.wait_time)
465
+ assert_equal(0.0, call_tree.self_time)
466
+ assert_equal(400.0, call_tree.children_time)
467
+
468
+ call_tree = method.call_trees.callees[1]
469
+ assert_equal('Allocator#make_hashes', call_tree.target.full_name)
470
+ assert_equal(1160.0, call_tree.total_time)
471
+ assert_equal(0.0, call_tree.wait_time)
472
+ assert_equal(0.0, call_tree.self_time)
473
+ assert_equal(1160.0, call_tree.children_time)
474
+
475
+ call_tree = method.call_trees.callees[2]
476
+ assert_equal('Allocator#make_strings', call_tree.target.full_name)
477
+ assert_equal(160.0, call_tree.total_time)
478
+ assert_equal(0.0, call_tree.wait_time)
479
+ assert_equal(40, call_tree.self_time)
480
+ assert_equal(120.0, call_tree.children_time)
481
+
482
+ # Method 3
483
+ method = methods[3]
484
+ assert_equal('Class#new', method.full_name)
485
+ assert_equal(1680.0, method.total_time)
486
+ assert_equal(0.0, method.wait_time)
487
+ assert_equal(1640.0, method.self_time)
488
+ assert_equal(40.0, method.children_time)
489
+
490
+ assert_equal(4, method.call_trees.callers.length)
491
+ call_tree = method.call_trees.callers[0]
492
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_tree.parent.target.full_name)
493
+ assert_equal(40.0, call_tree.total_time)
494
+ assert_equal(0.0, call_tree.wait_time)
495
+ assert_equal(40.0, call_tree.self_time)
496
+ assert_equal(0.0, call_tree.children_time)
497
+
498
+ call_tree = method.call_trees.callers[1]
499
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
500
+ assert_equal(400.0, call_tree.total_time)
501
+ assert_equal(0.0, call_tree.wait_time)
502
+ assert_equal(400.0, call_tree.self_time)
503
+ assert_equal(0.0, call_tree.children_time)
504
+
505
+ call_tree = method.call_trees.callers[2]
506
+ assert_equal('Allocator#make_hashes', call_tree.parent.target.full_name)
507
+ assert_equal(1160.0, call_tree.total_time)
508
+ assert_equal(0.0, call_tree.wait_time)
509
+ assert_equal(1160.0, call_tree.self_time)
510
+ assert_equal(0.0, call_tree.children_time)
511
+
512
+ call_tree = method.call_trees.callers[3]
513
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
514
+ assert_equal(80.0, call_tree.total_time)
515
+ assert_equal(0.0, call_tree.wait_time)
516
+ assert_equal(40.0, call_tree.self_time)
517
+ assert_equal(40.0, call_tree.children_time)
518
+
519
+ assert_equal(4, method.call_trees.callees.length)
520
+ call_tree = method.call_trees.callees[0]
521
+ assert_equal('BasicObject#initialize', call_tree.target.full_name)
522
+ assert_equal(0.0, call_tree.total_time)
523
+ assert_equal(0.0, call_tree.wait_time)
524
+ assert_equal(0.0, call_tree.self_time)
525
+ assert_equal(0.0, call_tree.children_time)
526
+
527
+ call_tree = method.call_trees.callees[1]
528
+ assert_equal('Array#initialize', call_tree.target.full_name)
529
+ assert_equal(0.0, call_tree.total_time)
530
+ assert_equal(0.0, call_tree.wait_time)
531
+ assert_equal(0.0, call_tree.self_time)
532
+ assert_equal(0.0, call_tree.children_time)
533
+
534
+ call_tree = method.call_trees.callees[2]
535
+ assert_equal('Hash#initialize', call_tree.target.full_name)
536
+ assert_equal(0.0, call_tree.total_time)
537
+ assert_equal(0.0, call_tree.wait_time)
538
+ assert_equal(0.0, call_tree.self_time)
539
+ assert_equal(0.0, call_tree.children_time)
540
+
541
+ call_tree = method.call_trees.callees[3]
542
+ assert_equal('String#initialize', call_tree.target.full_name)
543
+ assert_equal(40.0, call_tree.total_time)
544
+ assert_equal(0.0, call_tree.wait_time)
545
+ assert_equal(40.0, call_tree.self_time)
546
+ assert_equal(0.0, call_tree.children_time)
547
+
548
+ # Method 4
549
+ method = methods[4]
550
+ assert_equal('Allocator#make_hashes', method.full_name)
551
+ assert_equal(1160.0, method.total_time)
552
+ assert_equal(0.0, method.wait_time)
553
+ assert_equal(0.0, method.self_time)
554
+ assert_equal(1160.0, method.children_time)
555
+
556
+ assert_equal(1, method.call_trees.callers.length)
557
+ call_tree = method.call_trees.callers[0]
558
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
559
+ assert_equal(1160.0, call_tree.total_time)
560
+ assert_equal(0.0, call_tree.wait_time)
561
+ assert_equal(0.0, call_tree.self_time)
562
+ assert_equal(1160.0, call_tree.children_time)
563
+
564
+ assert_equal(1, method.call_trees.callees.length)
565
+ call_tree = method.call_trees.callees[0]
566
+ assert_equal('Class#new', call_tree.target.full_name)
567
+ assert_equal(1160.0, call_tree.total_time)
568
+ assert_equal(0.0, call_tree.wait_time)
569
+ assert_equal(1160.0, call_tree.self_time)
570
+ assert_equal(0.0, call_tree.children_time)
571
+
572
+ # Method 5
573
+ method = methods[5]
574
+ assert_equal('Allocator#make_arrays', method.full_name)
575
+ assert_equal(400.0, method.total_time)
576
+ assert_equal(0.0, method.wait_time)
577
+ assert_equal(0.0, method.self_time)
578
+ assert_equal(400.0, method.children_time)
579
+
580
+ assert_equal(1, method.call_trees.callers.length)
581
+ call_tree = method.call_trees.callers[0]
582
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
583
+ assert_equal(400.0, call_tree.total_time)
584
+ assert_equal(0.0, call_tree.wait_time)
585
+ assert_equal(0.0, call_tree.self_time)
586
+ assert_equal(400.0, call_tree.children_time)
587
+
588
+ assert_equal(1, method.call_trees.callees.length)
589
+ call_tree = method.call_trees.callees[0]
590
+ assert_equal('Integer#times', call_tree.target.full_name)
591
+ assert_equal(400.0, call_tree.total_time)
592
+ assert_equal(0.0, call_tree.wait_time)
593
+ assert_equal(0.0, call_tree.self_time)
594
+ assert_equal(400.0, call_tree.children_time)
595
+
596
+ # Method 6
597
+ method = methods[6]
598
+ assert_equal('Integer#times', method.full_name)
599
+ assert_equal(400.0, method.total_time)
600
+ assert_equal(0.0, method.wait_time)
601
+ assert_equal(0.0, method.self_time)
602
+ assert_equal(400.0, method.children_time)
603
+
604
+ assert_equal(1, method.call_trees.callers.length)
605
+ call_tree = method.call_trees.callers[0]
606
+ assert_equal('Allocator#make_arrays', call_tree.parent.target.full_name)
607
+ assert_equal(400.0, call_tree.total_time)
608
+ assert_equal(0.0, call_tree.wait_time)
609
+ assert_equal(0.0, call_tree.self_time)
610
+ assert_equal(400.0, call_tree.children_time)
611
+
612
+ assert_equal(1, method.call_trees.callees.length)
613
+ call_tree = method.call_trees.callees[0]
614
+ assert_equal('Class#new', call_tree.target.full_name)
615
+ assert_equal(400.0, call_tree.total_time)
616
+ assert_equal(0.0, call_tree.wait_time)
617
+ assert_equal(400.0, call_tree.self_time)
618
+ assert_equal(0.0, call_tree.children_time)
619
+
620
+ # Method 7
621
+ method = methods[7]
622
+ assert_equal('Allocator#make_strings', method.full_name)
623
+ assert_equal(160.0, method.total_time)
624
+ assert_equal(0.0, method.wait_time)
625
+ assert_equal(40.0, method.self_time)
626
+ assert_equal(120.0, method.children_time)
627
+
628
+ assert_equal(1, method.call_trees.callers.length)
629
+ call_tree = method.call_trees.callers[0]
630
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
631
+ assert_equal(160.0, call_tree.total_time)
632
+ assert_equal(0.0, call_tree.wait_time)
633
+ assert_equal(40.0, call_tree.self_time)
634
+ assert_equal(120.0, call_tree.children_time)
635
+
636
+ assert_equal(2, method.call_trees.callees.length)
637
+ call_tree = method.call_trees.callees[0]
638
+ assert_equal('String#*', call_tree.target.full_name)
639
+ assert_equal(40.0, call_tree.total_time)
640
+ assert_equal(0.0, call_tree.wait_time)
641
+ assert_equal(40.0, call_tree.self_time)
642
+ assert_equal(0.0, call_tree.children_time)
643
+
644
+ call_tree = method.call_trees.callees[1]
645
+ assert_equal('Class#new', call_tree.target.full_name)
646
+ assert_equal(80.0, call_tree.total_time)
647
+ assert_equal(0.0, call_tree.wait_time)
648
+ assert_equal(40.0, call_tree.self_time)
649
+ assert_equal(40.0, call_tree.children_time)
650
+
651
+ # Method 8
652
+ method = methods[8]
653
+ assert_equal('String#*', method.full_name)
654
+ assert_equal(40.0, method.total_time)
655
+ assert_equal(0.0, method.wait_time)
656
+ assert_equal(40.0, method.self_time)
657
+ assert_equal(0.0, method.children_time)
658
+
659
+ assert_equal(1, method.call_trees.callers.length)
660
+ call_tree = method.call_trees.callers[0]
661
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
662
+ assert_equal(40.0, call_tree.total_time)
663
+ assert_equal(0.0, call_tree.wait_time)
664
+ assert_equal(40.0, call_tree.self_time)
665
+ assert_equal(0.0, call_tree.children_time)
666
+
667
+ assert_equal(0.0, method.call_trees.callees.length)
668
+
669
+ # Method 9
670
+ method = methods[9]
671
+ assert_equal('String#initialize', method.full_name)
672
+ assert_equal(40.0, method.total_time)
673
+ assert_equal(0.0, method.wait_time)
674
+ assert_equal(40.0, method.self_time)
675
+ assert_equal(0.0, method.children_time)
676
+
677
+ assert_equal(1, method.call_trees.callers.length)
678
+ call_tree = method.call_trees.callers[0]
679
+ assert_equal('Class#new', call_tree.parent.target.full_name)
680
+ assert_equal(40.0, call_tree.total_time)
681
+ assert_equal(0.0, call_tree.wait_time)
682
+ assert_equal(40.0, call_tree.self_time)
683
+ assert_equal(0.0, call_tree.children_time)
684
+
685
+ assert_equal(0.0, method.call_trees.callees.length)
686
+
687
+ # Method 10
688
+ method = methods[10]
689
+ assert_equal('BasicObject#initialize', method.full_name)
690
+ assert_equal(0.0, method.total_time)
691
+ assert_equal(0.0, method.wait_time)
692
+ assert_equal(0.0, method.self_time)
693
+ assert_equal(0.0, method.children_time)
694
+
695
+ assert_equal(1, method.call_trees.callers.length)
696
+ call_tree = method.call_trees.callers[0]
697
+ assert_equal('Class#new', call_tree.parent.target.full_name)
698
+ assert_equal(0.0, call_tree.total_time)
699
+ assert_equal(0.0, call_tree.wait_time)
700
+ assert_equal(0.0, call_tree.self_time)
701
+ assert_equal(0.0, call_tree.children_time)
702
+
703
+ assert_equal(0.0, method.call_trees.callees.length)
704
+
705
+ # Method 11
706
+ method = methods[11]
707
+ assert_equal('Hash#initialize', method.full_name)
708
+ assert_equal(0.0, method.total_time)
709
+ assert_equal(0.0, method.wait_time)
710
+ assert_equal(0.0, method.self_time)
711
+ assert_equal(0.0, method.children_time)
712
+
713
+ assert_equal(1, method.call_trees.callers.length)
714
+ call_tree = method.call_trees.callers[0]
715
+ assert_equal('Class#new', call_tree.parent.target.full_name)
716
+ assert_equal(0.0, call_tree.total_time)
717
+ assert_equal(0.0, call_tree.wait_time)
718
+ assert_equal(0.0, call_tree.self_time)
719
+ assert_equal(0.0, call_tree.children_time)
720
+
721
+ assert_equal(0.0, method.call_trees.callees.length)
722
+
723
+ # Method 12
724
+ method = methods[12]
725
+ assert_equal('Array#initialize', method.full_name)
726
+ assert_equal(0.0, method.total_time)
727
+ assert_equal(0.0, method.wait_time)
728
+ assert_equal(0.0, method.self_time)
729
+ assert_equal(0.0, method.children_time)
730
+
731
+ assert_equal(1, method.call_trees.callers.length)
732
+ call_tree = method.call_trees.callers[0]
733
+ assert_equal('Class#new', call_tree.parent.target.full_name)
734
+ assert_equal(0.0, call_tree.total_time)
735
+ assert_equal(0.0, call_tree.wait_time)
736
+ assert_equal(0.0, call_tree.self_time)
737
+ assert_equal(0.0, call_tree.children_time)
738
+
739
+ assert_equal(0.0, method.call_trees.callees.length)
740
+ end
741
+ else
742
+ def test_memory
743
+ result = RubyProf.profile do
744
+ allocator = Allocator.new
745
+ allocator.run
746
+ end
747
+
748
+ thread = result.threads.first
749
+
750
+ assert_in_delta(800, thread.total_time, 1)
751
+ methods = result.threads.first.methods.sort.reverse
752
+ assert_equal(13, methods.length)
753
+
754
+ # Method 0
755
+ method = methods[0]
756
+ assert_equal('MeasureMemoryTraceTest#test_memory', method.full_name)
757
+ assert_in_delta(800, method.total_time, 1)
758
+
759
+ assert_equal(0.0, method.wait_time)
760
+ assert_equal(0.0, method.self_time)
761
+ assert_in_delta(800, method.children_time, 1)
762
+ assert_equal(0, method.call_trees.callers.length)
763
+
764
+ assert_equal(2, method.call_trees.callees.length)
765
+ call_tree = method.call_trees.callees[0]
766
+ assert_equal('Class#new', call_tree.target.full_name)
767
+ assert_equal(40.0, call_tree.total_time)
768
+ assert_equal(0.0, call_tree.wait_time)
769
+ assert_equal(40.0, call_tree.self_time)
770
+ assert_equal(0.0, call_tree.children_time)
771
+
772
+ call_tree = method.call_trees.callees[1]
773
+ assert_equal('Allocator#run', call_tree.target.full_name)
774
+ assert_equal(760.0, call_tree.total_time)
775
+ assert_equal(0.0, call_tree.wait_time)
776
+ assert_equal(0.0, call_tree.self_time)
777
+ assert_equal(760.0, call_tree.children_time)
778
+
779
+ # Method 1
780
+ method = methods[1]
781
+ assert_equal('Allocator#run',method.full_name)
782
+ assert_equal(760.0, method.total_time)
783
+ assert_equal(0.0, method.wait_time)
784
+ assert_equal(0.0, method.self_time)
785
+ assert_equal(760.0, method.children_time)
786
+
787
+ assert_equal(1, method.call_trees.callers.length)
788
+ call_tree = method.call_trees.callers[0]
789
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_tree.parent.target.full_name)
790
+ assert_equal(760.0, call_tree.total_time)
791
+ assert_equal(0.0, call_tree.wait_time)
792
+ assert_equal(0.0, call_tree.self_time)
793
+ assert_equal(760.0, call_tree.children_time)
794
+
795
+ assert_equal(1, method.call_trees.callees.length)
796
+ call_tree = method.call_trees.callees[0]
797
+ assert_equal('Allocator#internal_run', call_tree.target.full_name)
798
+ assert_equal(760.0, call_tree.total_time)
799
+ assert_equal(0.0, call_tree.wait_time)
800
+ assert_equal(0.0, call_tree.self_time)
801
+ assert_equal(760.0, call_tree.children_time)
802
+
803
+ # Method 2
804
+ method = methods[2]
805
+ assert_equal('Allocator#internal_run', method.full_name)
806
+ assert_equal(760.0, method.total_time)
807
+ assert_equal(0.0, method.wait_time)
808
+ assert_equal(0.0, method.self_time)
809
+ assert_equal(760.0, method.children_time)
810
+
811
+ assert_equal(1, method.call_trees.callers.length)
812
+ call_tree = method.call_trees.callers[0]
813
+ assert_equal('Allocator#run', call_tree.parent.target.full_name)
814
+ assert_equal(760.0, call_tree.total_time)
815
+ assert_equal(0.0, call_tree.wait_time)
816
+ assert_equal(0.0, call_tree.self_time)
817
+ assert_equal(760.0, call_tree.children_time)
818
+
819
+ assert_equal(3, method.call_trees.callees.length)
820
+ call_tree = method.call_trees.callees[0]
821
+ assert_equal('Allocator#make_arrays', call_tree.target.full_name)
822
+ assert_equal(400.0, call_tree.total_time)
823
+ assert_equal(0.0, call_tree.wait_time)
824
+ assert_equal(0.0, call_tree.self_time)
825
+ assert_equal(400.0, call_tree.children_time)
826
+
827
+ call_tree = method.call_trees.callees[1]
828
+ assert_equal('Allocator#make_hashes', call_tree.target.full_name)
829
+ assert_equal(200.0, call_tree.total_time)
830
+ assert_equal(0.0, call_tree.wait_time)
831
+ assert_equal(0.0, call_tree.self_time)
832
+ assert_equal(200.0, call_tree.children_time)
833
+
834
+ call_tree = method.call_trees.callees[2]
835
+ assert_equal('Allocator#make_strings', call_tree.target.full_name)
836
+ assert_equal(160.0, call_tree.total_time)
837
+ assert_equal(0.0, call_tree.wait_time)
838
+ assert_equal(40, call_tree.self_time)
839
+ assert_equal(120.0, call_tree.children_time)
840
+
841
+ # Method 3
842
+ method = methods[3]
843
+ assert_equal('Class#new', method.full_name)
844
+ assert_equal(720.0, method.total_time)
845
+ assert_equal(0.0, method.wait_time)
846
+ assert_equal(680.0, method.self_time)
847
+ assert_equal(40.0, method.children_time)
848
+
849
+ assert_equal(4, method.call_trees.callers.length)
850
+ call_tree = method.call_trees.callers[0]
851
+ assert_equal('MeasureMemoryTraceTest#test_memory', call_tree.parent.target.full_name)
852
+ assert_equal(40.0, call_tree.total_time)
853
+ assert_equal(0.0, call_tree.wait_time)
854
+ assert_equal(40.0, call_tree.self_time)
855
+ assert_equal(0.0, call_tree.children_time)
856
+
857
+ call_tree = method.call_trees.callers[1]
858
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
859
+ assert_equal(400.0, call_tree.total_time)
860
+ assert_equal(0.0, call_tree.wait_time)
861
+ assert_equal(400.0, call_tree.self_time)
862
+ assert_equal(0.0, call_tree.children_time)
863
+
864
+ call_tree = method.call_trees.callers[2]
865
+ assert_equal('Allocator#make_hashes', call_tree.parent.target.full_name)
866
+ assert_equal(200.0, call_tree.total_time)
867
+ assert_equal(0.0, call_tree.wait_time)
868
+ assert_equal(200.0, call_tree.self_time)
869
+ assert_equal(0.0, call_tree.children_time)
870
+
871
+ call_tree = method.call_trees.callers[3]
872
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
873
+ assert_equal(80.0, call_tree.total_time)
874
+ assert_equal(0.0, call_tree.wait_time)
875
+ assert_equal(40.0, call_tree.self_time)
876
+ assert_equal(40.0, call_tree.children_time)
877
+
878
+ assert_equal(4, method.call_trees.callees.length)
879
+ call_tree = method.call_trees.callees[0]
880
+ assert_equal('BasicObject#initialize', call_tree.target.full_name)
881
+ assert_equal(0.0, call_tree.total_time)
882
+ assert_equal(0.0, call_tree.wait_time)
883
+ assert_equal(0.0, call_tree.self_time)
884
+ assert_equal(0.0, call_tree.children_time)
885
+
886
+ call_tree = method.call_trees.callees[1]
887
+ assert_equal('Array#initialize', call_tree.target.full_name)
888
+ assert_equal(0.0, call_tree.total_time)
889
+ assert_equal(0.0, call_tree.wait_time)
890
+ assert_equal(0.0, call_tree.self_time)
891
+ assert_equal(0.0, call_tree.children_time)
892
+
893
+ call_tree = method.call_trees.callees[2]
894
+ assert_equal('Hash#initialize', call_tree.target.full_name)
895
+ assert_equal(0.0, call_tree.total_time)
896
+ assert_equal(0.0, call_tree.wait_time)
897
+ assert_equal(0.0, call_tree.self_time)
898
+ assert_equal(0.0, call_tree.children_time)
899
+
900
+ call_tree = method.call_trees.callees[3]
901
+ assert_equal('String#initialize', call_tree.target.full_name)
902
+ assert_equal(40.0, call_tree.total_time)
903
+ assert_equal(0.0, call_tree.wait_time)
904
+ assert_equal(40.0, call_tree.self_time)
905
+ assert_equal(0.0, call_tree.children_time)
906
+
907
+ # Method 4
908
+ method = methods[4]
909
+ assert_equal('Allocator#make_arrays', method.full_name)
910
+ assert_equal(400.0, method.total_time)
911
+ assert_equal(0.0, method.wait_time)
912
+ assert_equal(0.0, method.self_time)
913
+ assert_equal(400.0, method.children_time)
914
+
915
+ assert_equal(1, method.call_trees.callers.length)
916
+ call_tree = method.call_trees.callers[0]
917
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
918
+ assert_equal(400.0, call_tree.total_time)
919
+ assert_equal(0.0, call_tree.wait_time)
920
+ assert_equal(0.0, call_tree.self_time)
921
+ assert_equal(400.0, call_tree.children_time)
922
+
923
+ assert_equal(1, method.call_trees.callees.length)
924
+ call_tree = method.call_trees.callees[0]
925
+ assert_equal('Integer#times', call_tree.target.full_name)
926
+ assert_equal(400.0, call_tree.total_time)
927
+ assert_equal(0.0, call_tree.wait_time)
928
+ assert_equal(0.0, call_tree.self_time)
929
+ assert_equal(400.0, call_tree.children_time)
930
+
931
+ # Method 5
932
+ method = methods[5]
933
+ assert_equal('Integer#times', method.full_name)
934
+ assert_equal(400.0, method.total_time)
935
+ assert_equal(0.0, method.wait_time)
936
+ assert_equal(0.0, method.self_time)
937
+ assert_equal(400.0, method.children_time)
938
+
939
+ assert_equal(1, method.call_trees.callers.length)
940
+ call_tree = method.call_trees.callers[0]
941
+ assert_equal('Allocator#make_arrays', call_tree.parent.target.full_name)
942
+ assert_equal(400.0, call_tree.total_time)
943
+ assert_equal(0.0, call_tree.wait_time)
944
+ assert_equal(0.0, call_tree.self_time)
945
+ assert_equal(400.0, call_tree.children_time)
946
+
947
+ assert_equal(1, method.call_trees.callees.length)
948
+ call_tree = method.call_trees.callees[0]
949
+ assert_equal('Class#new', call_tree.target.full_name)
950
+ assert_equal(400.0, call_tree.total_time)
951
+ assert_equal(0.0, call_tree.wait_time)
952
+ assert_equal(400.0, call_tree.self_time)
953
+ assert_equal(0.0, call_tree.children_time)
954
+
955
+ # Method 6
956
+ method = methods[6]
957
+ assert_equal('Allocator#make_hashes', method.full_name)
958
+ assert_equal(200.0, method.total_time)
959
+ assert_equal(0.0, method.wait_time)
960
+ assert_equal(0.0, method.self_time)
961
+ assert_equal(200.0, method.children_time)
962
+
963
+ assert_equal(1, method.call_trees.callers.length)
964
+ call_tree = method.call_trees.callers[0]
965
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
966
+ assert_equal(200.0, call_tree.total_time)
967
+ assert_equal(0.0, call_tree.wait_time)
968
+ assert_equal(0.0, call_tree.self_time)
969
+ assert_equal(200.0, call_tree.children_time)
970
+
971
+ assert_equal(1, method.call_trees.callees.length)
972
+ call_tree = method.call_trees.callees[0]
973
+ assert_equal('Class#new', call_tree.target.full_name)
974
+ assert_equal(200.0, call_tree.total_time)
975
+ assert_equal(0.0, call_tree.wait_time)
976
+ assert_equal(200.0, call_tree.self_time)
977
+ assert_equal(0.0, call_tree.children_time)
978
+
979
+ # Method 7
980
+ method = methods[7]
981
+ assert_equal('Allocator#make_strings', method.full_name)
982
+ assert_equal(160.0, method.total_time)
983
+ assert_equal(0.0, method.wait_time)
984
+ assert_equal(40.0, method.self_time)
985
+ assert_equal(120.0, method.children_time)
986
+
987
+ assert_equal(1, method.call_trees.callers.length)
988
+ call_tree = method.call_trees.callers[0]
989
+ assert_equal('Allocator#internal_run', call_tree.parent.target.full_name)
990
+ assert_equal(160.0, call_tree.total_time)
991
+ assert_equal(0.0, call_tree.wait_time)
992
+ assert_equal(40.0, call_tree.self_time)
993
+ assert_equal(120.0, call_tree.children_time)
994
+
995
+ assert_equal(2, method.call_trees.callees.length)
996
+ call_tree = method.call_trees.callees[0]
997
+ assert_equal('String#*', call_tree.target.full_name)
998
+ assert_equal(40.0, call_tree.total_time)
999
+ assert_equal(0.0, call_tree.wait_time)
1000
+ assert_equal(40.0, call_tree.self_time)
1001
+ assert_equal(0.0, call_tree.children_time)
1002
+
1003
+ call_tree = method.call_trees.callees[1]
1004
+ assert_equal('Class#new', call_tree.target.full_name)
1005
+ assert_equal(80.0, call_tree.total_time)
1006
+ assert_equal(0.0, call_tree.wait_time)
1007
+ assert_equal(40.0, call_tree.self_time)
1008
+ assert_equal(40.0, call_tree.children_time)
1009
+
1010
+ # Method 8
1011
+ method = methods[8]
1012
+ assert_equal('String#*', method.full_name)
1013
+ assert_equal(40.0, method.total_time)
1014
+ assert_equal(0.0, method.wait_time)
1015
+ assert_equal(40.0, method.self_time)
1016
+ assert_equal(0.0, method.children_time)
1017
+
1018
+ assert_equal(1, method.call_trees.callers.length)
1019
+ call_tree = method.call_trees.callers[0]
1020
+ assert_equal('Allocator#make_strings', call_tree.parent.target.full_name)
1021
+ assert_equal(40.0, call_tree.total_time)
1022
+ assert_equal(0.0, call_tree.wait_time)
1023
+ assert_equal(40.0, call_tree.self_time)
1024
+ assert_equal(0.0, call_tree.children_time)
1025
+
1026
+ assert_equal(0.0, method.call_trees.callees.length)
1027
+
1028
+ # Method 9
1029
+ method = methods[9]
1030
+ assert_equal('String#initialize', method.full_name)
1031
+ assert_equal(40.0, method.total_time)
1032
+ assert_equal(0.0, method.wait_time)
1033
+ assert_equal(40.0, method.self_time)
1034
+ assert_equal(0.0, method.children_time)
1035
+
1036
+ assert_equal(1, method.call_trees.callers.length)
1037
+ call_tree = method.call_trees.callers[0]
1038
+ assert_equal('Class#new', call_tree.parent.target.full_name)
1039
+ assert_equal(40.0, call_tree.total_time)
1040
+ assert_equal(0.0, call_tree.wait_time)
1041
+ assert_equal(40.0, call_tree.self_time)
1042
+ assert_equal(0.0, call_tree.children_time)
1043
+
1044
+ assert_equal(0.0, method.call_trees.callees.length)
1045
+
1046
+ # Method 10
1047
+ method = methods[10]
1048
+ assert_equal('BasicObject#initialize', method.full_name)
1049
+ assert_equal(0.0, method.total_time)
1050
+ assert_equal(0.0, method.wait_time)
1051
+ assert_equal(0.0, method.self_time)
1052
+ assert_equal(0.0, method.children_time)
1053
+
1054
+ assert_equal(1, method.call_trees.callers.length)
1055
+ call_tree = method.call_trees.callers[0]
1056
+ assert_equal('Class#new', call_tree.parent.target.full_name)
1057
+ assert_equal(0.0, call_tree.total_time)
1058
+ assert_equal(0.0, call_tree.wait_time)
1059
+ assert_equal(0.0, call_tree.self_time)
1060
+ assert_equal(0.0, call_tree.children_time)
1061
+
1062
+ assert_equal(0.0, method.call_trees.callees.length)
1063
+
1064
+ # Method 11
1065
+ method = methods[11]
1066
+ assert_equal('Hash#initialize', method.full_name)
1067
+ assert_equal(0.0, method.total_time)
1068
+ assert_equal(0.0, method.wait_time)
1069
+ assert_equal(0.0, method.self_time)
1070
+ assert_equal(0.0, method.children_time)
1071
+
1072
+ assert_equal(1, method.call_trees.callers.length)
1073
+ call_tree = method.call_trees.callers[0]
1074
+ assert_equal('Class#new', call_tree.parent.target.full_name)
1075
+ assert_equal(0.0, call_tree.total_time)
1076
+ assert_equal(0.0, call_tree.wait_time)
1077
+ assert_equal(0.0, call_tree.self_time)
1078
+ assert_equal(0.0, call_tree.children_time)
1079
+
1080
+ assert_equal(0.0, method.call_trees.callees.length)
1081
+
1082
+ # Method 12
1083
+ method = methods[12]
1084
+ assert_equal('Array#initialize', method.full_name)
1085
+ assert_equal(0.0, method.total_time)
1086
+ assert_equal(0.0, method.wait_time)
1087
+ assert_equal(0.0, method.self_time)
1088
+ assert_equal(0.0, method.children_time)
1089
+
1090
+ assert_equal(1, method.call_trees.callers.length)
1091
+ call_tree = method.call_trees.callers[0]
1092
+ assert_equal('Class#new', call_tree.parent.target.full_name)
1093
+ assert_equal(0.0, call_tree.total_time)
1094
+ assert_equal(0.0, call_tree.wait_time)
1095
+ assert_equal(0.0, call_tree.self_time)
1096
+ assert_equal(0.0, call_tree.children_time)
1097
+
1098
+ assert_equal(0.0, method.call_trees.callees.length)
1099
+ end
1100
+ end
1101
+ end