ruby-prof 0.18.0-x64-mingw32 → 1.1.0-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +32 -0
  3. data/LICENSE +2 -2
  4. data/README.rdoc +1 -483
  5. data/Rakefile +3 -6
  6. data/bin/ruby-prof +65 -30
  7. data/ext/ruby_prof/extconf.rb +6 -38
  8. data/ext/ruby_prof/rp_allocation.c +279 -0
  9. data/ext/ruby_prof/rp_allocation.h +31 -0
  10. data/ext/ruby_prof/rp_call_info.c +129 -283
  11. data/ext/ruby_prof/rp_call_info.h +16 -34
  12. data/ext/ruby_prof/rp_measure_allocations.c +25 -49
  13. data/ext/ruby_prof/rp_measure_memory.c +21 -56
  14. data/ext/ruby_prof/rp_measure_process_time.c +35 -39
  15. data/ext/ruby_prof/rp_measure_wall_time.c +36 -19
  16. data/ext/ruby_prof/rp_measurement.c +230 -0
  17. data/ext/ruby_prof/rp_measurement.h +50 -0
  18. data/ext/ruby_prof/rp_method.c +389 -389
  19. data/ext/ruby_prof/rp_method.h +34 -39
  20. data/ext/ruby_prof/rp_profile.c +895 -0
  21. data/ext/ruby_prof/rp_profile.h +37 -0
  22. data/ext/ruby_prof/rp_stack.c +103 -80
  23. data/ext/ruby_prof/rp_stack.h +5 -12
  24. data/ext/ruby_prof/rp_thread.c +143 -83
  25. data/ext/ruby_prof/rp_thread.h +15 -6
  26. data/ext/ruby_prof/ruby_prof.c +11 -757
  27. data/ext/ruby_prof/ruby_prof.h +4 -47
  28. data/ext/ruby_prof/vc/ruby_prof.vcxproj +10 -8
  29. data/lib/{2.6.3 → 2.6.5}/ruby_prof.so +0 -0
  30. data/lib/ruby-prof.rb +2 -18
  31. data/lib/ruby-prof/assets/call_stack_printer.html.erb +713 -0
  32. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  33. data/lib/ruby-prof/assets/graph_printer.html.erb +356 -0
  34. data/lib/ruby-prof/call_info.rb +35 -93
  35. data/lib/ruby-prof/call_info_visitor.rb +19 -21
  36. data/lib/ruby-prof/compatibility.rb +37 -107
  37. data/lib/ruby-prof/exclude_common_methods.rb +198 -0
  38. data/lib/ruby-prof/measurement.rb +14 -0
  39. data/lib/ruby-prof/method_info.rb +52 -83
  40. data/lib/ruby-prof/printers/abstract_printer.rb +73 -50
  41. data/lib/ruby-prof/printers/call_info_printer.rb +13 -3
  42. data/lib/ruby-prof/printers/call_stack_printer.rb +62 -145
  43. data/lib/ruby-prof/printers/call_tree_printer.rb +20 -12
  44. data/lib/ruby-prof/printers/dot_printer.rb +5 -5
  45. data/lib/ruby-prof/printers/flat_printer.rb +6 -24
  46. data/lib/ruby-prof/printers/graph_html_printer.rb +6 -192
  47. data/lib/ruby-prof/printers/graph_printer.rb +13 -15
  48. data/lib/ruby-prof/printers/multi_printer.rb +66 -23
  49. data/lib/ruby-prof/profile.rb +10 -3
  50. data/lib/ruby-prof/rack.rb +0 -3
  51. data/lib/ruby-prof/thread.rb +12 -12
  52. data/lib/ruby-prof/version.rb +1 -1
  53. data/ruby-prof.gemspec +2 -2
  54. data/test/abstract_printer_test.rb +0 -27
  55. data/test/alias_test.rb +129 -0
  56. data/test/basic_test.rb +41 -40
  57. data/test/call_info_visitor_test.rb +3 -3
  58. data/test/dynamic_method_test.rb +0 -2
  59. data/test/fiber_test.rb +11 -17
  60. data/test/gc_test.rb +96 -0
  61. data/test/line_number_test.rb +120 -39
  62. data/test/marshal_test.rb +119 -0
  63. data/test/measure_allocations.rb +30 -0
  64. data/test/measure_allocations_test.rb +371 -12
  65. data/test/measure_allocations_trace_test.rb +385 -0
  66. data/test/measure_memory_trace_test.rb +756 -0
  67. data/test/measure_process_time_test.rb +821 -33
  68. data/test/measure_times.rb +54 -0
  69. data/test/measure_wall_time_test.rb +349 -145
  70. data/test/multi_printer_test.rb +1 -34
  71. data/test/parser_timings.rb +24 -0
  72. data/test/pause_resume_test.rb +5 -5
  73. data/test/prime.rb +2 -0
  74. data/test/printer_call_stack_test.rb +28 -0
  75. data/test/printer_call_tree_test.rb +31 -0
  76. data/test/printer_flat_test.rb +68 -0
  77. data/test/printer_graph_html_test.rb +60 -0
  78. data/test/printer_graph_test.rb +41 -0
  79. data/test/printers_test.rb +32 -166
  80. data/test/printing_recursive_graph_test.rb +26 -72
  81. data/test/recursive_test.rb +72 -77
  82. data/test/stack_printer_test.rb +2 -15
  83. data/test/start_stop_test.rb +22 -25
  84. data/test/test_helper.rb +5 -248
  85. data/test/thread_test.rb +11 -54
  86. data/test/unique_call_path_test.rb +16 -28
  87. data/test/yarv_test.rb +1 -0
  88. metadata +28 -36
  89. data/examples/flat.txt +0 -50
  90. data/examples/graph.dot +0 -84
  91. data/examples/graph.html +0 -823
  92. data/examples/graph.txt +0 -139
  93. data/examples/multi.flat.txt +0 -23
  94. data/examples/multi.graph.html +0 -760
  95. data/examples/multi.grind.dat +0 -114
  96. data/examples/multi.stack.html +0 -547
  97. data/examples/stack.html +0 -547
  98. data/ext/ruby_prof/rp_measure.c +0 -40
  99. data/ext/ruby_prof/rp_measure.h +0 -45
  100. data/ext/ruby_prof/rp_measure_cpu_time.c +0 -136
  101. data/ext/ruby_prof/rp_measure_gc_runs.c +0 -73
  102. data/ext/ruby_prof/rp_measure_gc_time.c +0 -60
  103. data/lib/ruby-prof/aggregate_call_info.rb +0 -76
  104. data/lib/ruby-prof/assets/call_stack_printer.css.html +0 -117
  105. data/lib/ruby-prof/assets/call_stack_printer.js.html +0 -385
  106. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +0 -83
  107. data/lib/ruby-prof/profile/exclude_common_methods.rb +0 -207
  108. data/lib/ruby-prof/profile/legacy_method_elimination.rb +0 -50
  109. data/test/aggregate_test.rb +0 -136
  110. data/test/block_test.rb +0 -74
  111. data/test/call_info_test.rb +0 -78
  112. data/test/issue137_test.rb +0 -63
  113. data/test/measure_cpu_time_test.rb +0 -212
  114. data/test/measure_gc_runs_test.rb +0 -32
  115. data/test/measure_gc_time_test.rb +0 -36
  116. data/test/measure_memory_test.rb +0 -33
  117. data/test/method_elimination_test.rb +0 -84
  118. data/test/module_test.rb +0 -45
  119. data/test/stack_test.rb +0 -138
@@ -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