ruby-prof 2.0.4 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -2
  3. data/lib/ruby-prof/printers/flame_graph_printer.rb +80 -78
  4. data/lib/ruby-prof/version.rb +1 -1
  5. metadata +4 -85
  6. data/Rakefile +0 -98
  7. data/docs/advanced-usage.md +0 -132
  8. data/docs/alternatives.md +0 -98
  9. data/docs/architecture.md +0 -304
  10. data/docs/best-practices.md +0 -27
  11. data/docs/getting-started.md +0 -130
  12. data/docs/history.md +0 -11
  13. data/docs/index.md +0 -45
  14. data/docs/profiling-rails.md +0 -64
  15. data/docs/public/examples/example.rb +0 -33
  16. data/docs/public/examples/generate_reports.rb +0 -92
  17. data/docs/public/examples/reports/call_info.txt +0 -27
  18. data/docs/public/examples/reports/call_stack.html +0 -835
  19. data/docs/public/examples/reports/callgrind.out +0 -150
  20. data/docs/public/examples/reports/flame_graph.html +0 -408
  21. data/docs/public/examples/reports/flat.txt +0 -45
  22. data/docs/public/examples/reports/graph.dot +0 -129
  23. data/docs/public/examples/reports/graph.html +0 -1319
  24. data/docs/public/examples/reports/graph.txt +0 -100
  25. data/docs/public/examples/reports/graphviz_viewer.html +0 -1
  26. data/docs/public/images/call_stack.png +0 -0
  27. data/docs/public/images/class_diagram.png +0 -0
  28. data/docs/public/images/dot_printer.png +0 -0
  29. data/docs/public/images/flame_graph.png +0 -0
  30. data/docs/public/images/flat.png +0 -0
  31. data/docs/public/images/graph.png +0 -0
  32. data/docs/public/images/graph_html.png +0 -0
  33. data/docs/public/images/ruby-prof-logo.svg +0 -1
  34. data/docs/reports.md +0 -151
  35. data/docs/stylesheets/extra.css +0 -80
  36. data/ruby-prof.gemspec +0 -66
  37. data/test/abstract_printer_test.rb +0 -25
  38. data/test/alias_test.rb +0 -203
  39. data/test/call_tree_builder.rb +0 -126
  40. data/test/call_tree_test.rb +0 -94
  41. data/test/call_tree_visitor_test.rb +0 -27
  42. data/test/call_trees_test.rb +0 -66
  43. data/test/duplicate_names_test.rb +0 -32
  44. data/test/dynamic_method_test.rb +0 -50
  45. data/test/enumerable_test.rb +0 -23
  46. data/test/exceptions_test.rb +0 -24
  47. data/test/exclude_methods_test.rb +0 -363
  48. data/test/exclude_threads_test.rb +0 -48
  49. data/test/fiber_test.rb +0 -195
  50. data/test/gc_test.rb +0 -104
  51. data/test/inverse_call_tree_test.rb +0 -174
  52. data/test/line_number_test.rb +0 -563
  53. data/test/marshal_test.rb +0 -144
  54. data/test/measure_allocations.rb +0 -26
  55. data/test/measure_allocations_test.rb +0 -1511
  56. data/test/measure_process_time_test.rb +0 -3286
  57. data/test/measure_times.rb +0 -56
  58. data/test/measure_wall_time_test.rb +0 -774
  59. data/test/measurement_test.rb +0 -82
  60. data/test/merge_test.rb +0 -146
  61. data/test/method_info_test.rb +0 -100
  62. data/test/multi_printer_test.rb +0 -52
  63. data/test/no_method_class_test.rb +0 -15
  64. data/test/pause_resume_test.rb +0 -171
  65. data/test/prime.rb +0 -54
  66. data/test/prime_script.rb +0 -6
  67. data/test/printer_call_stack_test.rb +0 -28
  68. data/test/printer_call_tree_test.rb +0 -30
  69. data/test/printer_flame_graph_test.rb +0 -82
  70. data/test/printer_flat_test.rb +0 -110
  71. data/test/printer_graph_html_test.rb +0 -62
  72. data/test/printer_graph_test.rb +0 -42
  73. data/test/printers_test.rb +0 -162
  74. data/test/printing_recursive_graph_test.rb +0 -81
  75. data/test/profile_test.rb +0 -101
  76. data/test/rack_test.rb +0 -103
  77. data/test/recursive_test.rb +0 -796
  78. data/test/scheduler.rb +0 -367
  79. data/test/singleton_test.rb +0 -39
  80. data/test/stack_printer_test.rb +0 -61
  81. data/test/start_stop_test.rb +0 -106
  82. data/test/test_helper.rb +0 -24
  83. data/test/thread_test.rb +0 -229
  84. data/test/unique_call_path_test.rb +0 -123
  85. data/test/yarv_test.rb +0 -56
@@ -1,363 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- module ExcludeMethodsModule
7
- def c
8
- 1.times { |i| ExcludeMethodsModule.d }
9
- end
10
-
11
- def self.d
12
- 1.times { |i| ExcludeMethodsClass.e }
13
- end
14
- end
15
-
16
- class ExcludeMethodsClass
17
- include ExcludeMethodsModule
18
-
19
- def a
20
- 1.times { |i| b }
21
- end
22
-
23
- def b
24
- 1.times { |i| c; self.class.e }
25
- end
26
-
27
- def self.e
28
- 1.times { |i| f }
29
- end
30
-
31
- def self.f
32
- sleep 0.1
33
- end
34
- end
35
-
36
- class ExcludeMethodsTest < TestCase
37
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.3')
38
- def test_methods_can_be_profiled
39
- obj = ExcludeMethodsClass.new
40
- prf = RubyProf::Profile.new(measure_mode: RubyProf::WALL_TIME)
41
-
42
- result = prf.profile {obj.a}
43
- methods = result.threads.first.methods.sort.reverse
44
- assert_equal(10, methods.count)
45
- assert_equal('ExcludeMethodsTest#test_methods_can_be_profiled', methods[0].full_name)
46
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
47
- assert_equal('Integer#times', methods[2].full_name)
48
- assert_equal('ExcludeMethodsClass#b', methods[3].full_name)
49
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[4].full_name)
50
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[5].full_name)
51
- assert_equal('Kernel#sleep', methods[6].full_name)
52
- assert_equal('ExcludeMethodsModule#c', methods[7].full_name)
53
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[8].full_name)
54
- assert_equal('Kernel#class', methods[9].full_name)
55
- end
56
-
57
- def test_methods_can_be_hidden1
58
- obj = ExcludeMethodsClass.new
59
- prf = RubyProf::Profile.new
60
-
61
- prf.exclude_methods!(Integer, :times)
62
-
63
- result = prf.profile {obj.a}
64
- methods = result.threads.first.methods.sort.reverse
65
-
66
- assert_equal(9, methods.count)
67
- assert_equal('ExcludeMethodsTest#test_methods_can_be_hidden1', methods[0].full_name)
68
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
69
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
70
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
71
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
72
- assert_equal('Kernel#sleep', methods[5].full_name)
73
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
74
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
75
- assert_equal('Kernel#class', methods[8].full_name)
76
- end
77
-
78
- def test_methods_can_be_hidden2
79
- obj = ExcludeMethodsClass.new
80
- prf = RubyProf::Profile.new
81
-
82
- prf.exclude_methods!(Integer, :times)
83
- prf.exclude_methods!(ExcludeMethodsClass.singleton_class, :f)
84
- prf.exclude_methods!(ExcludeMethodsModule.singleton_class, :d)
85
-
86
- result = prf.profile {obj.a}
87
- methods = result.threads.first.methods.sort.reverse
88
-
89
- assert_equal(7, methods.count)
90
- assert_equal('ExcludeMethodsTest#test_methods_can_be_hidden2', methods[0].full_name)
91
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
92
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
93
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
94
- assert_equal('Kernel#sleep', methods[4].full_name)
95
- assert_equal('ExcludeMethodsModule#c', methods[5].full_name)
96
- assert_equal('Kernel#class', methods[6].full_name)
97
- end
98
-
99
- def test_exclude_common_methods1
100
- obj = ExcludeMethodsClass.new
101
- prf = RubyProf::Profile.new(measure_mode: RubyProf::WALL_TIME)
102
-
103
- prf.exclude_common_methods!
104
-
105
- result = prf.profile {obj.a}
106
- methods = result.threads.first.methods.sort.reverse
107
-
108
- assert_equal(9, methods.count)
109
- assert_equal('ExcludeMethodsTest#test_exclude_common_methods1', methods[0].full_name)
110
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
111
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
112
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
113
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
114
- assert_equal('Kernel#sleep', methods[5].full_name)
115
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
116
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
117
- assert_equal('Kernel#class', methods[8].full_name)
118
- end
119
-
120
- def test_exclude_common_methods2
121
- obj = ExcludeMethodsClass.new
122
-
123
- result = RubyProf::Profile.profile(exclude_common: true) { 5.times {obj.a} }
124
- methods = result.threads.first.methods.sort.reverse
125
-
126
- assert_equal(9, methods.count)
127
- assert_equal('ExcludeMethodsTest#test_exclude_common_methods2', methods[0].full_name)
128
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
129
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
130
- end
131
- elsif Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.4')
132
- def test_methods_can_be_profiled
133
- obj = ExcludeMethodsClass.new
134
- prf = RubyProf::Profile.new(measure_mode: RubyProf::WALL_TIME)
135
-
136
- result = prf.profile {obj.a}
137
- methods = result.threads.first.methods.sort.reverse
138
- assert_equal(13, methods.count)
139
- assert_equal('ExcludeMethodsTest#test_methods_can_be_profiled', methods[0].full_name)
140
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
141
- assert_equal('Integer#times', methods[2].full_name)
142
- assert_equal('ExcludeMethodsClass#b', methods[3].full_name)
143
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[4].full_name)
144
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[5].full_name)
145
- assert_equal('Kernel#sleep', methods[6].full_name)
146
- assert_equal('ExcludeMethodsModule#c', methods[7].full_name)
147
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[8].full_name)
148
- assert_equal('Kernel#block_given?', methods[9].full_name)
149
- assert_equal('Integer#succ', methods[10].full_name)
150
- assert_equal('Integer#<', methods[11].full_name)
151
- assert_equal('Kernel#class', methods[12].full_name)
152
- end
153
-
154
- def test_methods_can_be_hidden1
155
- obj = ExcludeMethodsClass.new
156
- prf = RubyProf::Profile.new
157
-
158
- prf.exclude_methods!(Integer, :times)
159
-
160
- result = prf.profile {obj.a}
161
- methods = result.threads.first.methods.sort.reverse
162
-
163
- assert_equal(12, methods.count)
164
- assert_equal('ExcludeMethodsTest#test_methods_can_be_hidden1', methods[0].full_name)
165
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
166
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
167
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
168
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
169
- assert_equal('Kernel#sleep', methods[5].full_name)
170
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
171
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
172
- assert_equal('Kernel#block_given?', methods[8].full_name)
173
- assert_equal('Integer#succ', methods[9].full_name)
174
- assert_equal('Integer#<', methods[10].full_name)
175
- assert_equal('Kernel#class', methods[11].full_name)
176
- end
177
-
178
- def test_methods_can_be_hidden2
179
- obj = ExcludeMethodsClass.new
180
- prf = RubyProf::Profile.new
181
-
182
- prf.exclude_methods!(Integer, :times)
183
- prf.exclude_methods!(ExcludeMethodsClass.singleton_class, :f)
184
- prf.exclude_methods!(ExcludeMethodsModule.singleton_class, :d)
185
-
186
- result = prf.profile {obj.a}
187
- methods = result.threads.first.methods.sort.reverse
188
-
189
- assert_equal(10, methods.count)
190
- assert_equal('ExcludeMethodsTest#test_methods_can_be_hidden2', methods[0].full_name)
191
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
192
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
193
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
194
- assert_equal('Kernel#sleep', methods[4].full_name)
195
- assert_equal('ExcludeMethodsModule#c', methods[5].full_name)
196
- assert_equal('Kernel#block_given?', methods[6].full_name)
197
- assert_equal('Integer#succ', methods[7].full_name)
198
- assert_equal('Integer#<', methods[8].full_name)
199
- assert_equal('Kernel#class', methods[9].full_name)
200
- end
201
-
202
- def test_exclude_common_methods1
203
- obj = ExcludeMethodsClass.new
204
- prf = RubyProf::Profile.new(measure_mode: RubyProf::WALL_TIME)
205
-
206
- prf.exclude_common_methods!
207
-
208
- result = prf.profile {obj.a}
209
- methods = result.threads.first.methods.sort.reverse
210
-
211
- assert_equal(9, methods.count)
212
- assert_equal('ExcludeMethodsTest#test_exclude_common_methods1', methods[0].full_name)
213
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
214
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
215
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
216
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
217
- assert_equal('Kernel#sleep', methods[5].full_name)
218
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
219
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
220
- assert_equal('Kernel#class', methods[8].full_name)
221
- end
222
-
223
- def test_exclude_common_methods2
224
- obj = ExcludeMethodsClass.new
225
-
226
- result = RubyProf::Profile.profile(exclude_common: true) { 5.times {obj.a} }
227
- methods = result.threads.first.methods.sort.reverse
228
-
229
- assert_equal(9, methods.count)
230
- assert_equal('ExcludeMethodsTest#test_exclude_common_methods2', methods[0].full_name)
231
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
232
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
233
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
234
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
235
- assert_equal('Kernel#sleep', methods[5].full_name)
236
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
237
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
238
- assert_equal('Kernel#class', methods[8].full_name)
239
- end
240
- else
241
- def test_methods_can_be_profiled
242
- obj = ExcludeMethodsClass.new
243
- prf = RubyProf::Profile.new(measure_mode: RubyProf::WALL_TIME)
244
-
245
- result = prf.profile {obj.a}
246
- methods = result.threads.first.methods.sort.reverse
247
- assert_equal(12, methods.count)
248
- assert_equal('ExcludeMethodsTest#test_methods_can_be_profiled', methods[0].full_name)
249
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
250
- assert_equal('Integer#times', methods[2].full_name)
251
- assert_equal('ExcludeMethodsClass#b', methods[3].full_name)
252
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[4].full_name)
253
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[5].full_name)
254
- assert_equal('Kernel#sleep', methods[6].full_name)
255
- assert_equal('ExcludeMethodsModule#c', methods[7].full_name)
256
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[8].full_name)
257
- assert_equal('Integer#succ', methods[9].full_name)
258
- assert_equal('Integer#<', methods[10].full_name)
259
- assert_equal('Kernel#class', methods[11].full_name)
260
- end
261
-
262
- def test_methods_can_be_hidden1
263
- obj = ExcludeMethodsClass.new
264
- prf = RubyProf::Profile.new
265
-
266
- prf.exclude_methods!(Integer, :times)
267
-
268
- result = prf.profile {obj.a}
269
- methods = result.threads.first.methods.sort.reverse
270
-
271
- assert_equal(11, methods.count)
272
- assert_equal('ExcludeMethodsTest#test_methods_can_be_hidden1', methods[0].full_name)
273
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
274
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
275
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
276
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
277
- assert_equal('Kernel#sleep', methods[5].full_name)
278
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
279
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
280
- assert_equal('Integer#succ', methods[8].full_name)
281
- assert_equal('Integer#<', methods[9].full_name)
282
- assert_equal('Kernel#class', methods[10].full_name)
283
- end
284
-
285
- def test_methods_can_be_hidden2
286
- obj = ExcludeMethodsClass.new
287
- prf = RubyProf::Profile.new
288
-
289
- prf.exclude_methods!(Integer, :times)
290
- prf.exclude_methods!(ExcludeMethodsClass.singleton_class, :f)
291
- prf.exclude_methods!(ExcludeMethodsModule.singleton_class, :d)
292
-
293
- result = prf.profile {obj.a}
294
- methods = result.threads.first.methods.sort.reverse
295
-
296
- assert_equal(9, methods.count)
297
- assert_equal('ExcludeMethodsTest#test_methods_can_be_hidden2', methods[0].full_name)
298
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
299
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
300
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
301
- assert_equal('Kernel#sleep', methods[4].full_name)
302
- assert_equal('ExcludeMethodsModule#c', methods[5].full_name)
303
- assert_equal('Integer#succ', methods[6].full_name)
304
- assert_equal('Integer#<', methods[7].full_name)
305
- assert_equal('Kernel#class', methods[8].full_name)
306
- end
307
-
308
- def test_exclude_common_methods1
309
- obj = ExcludeMethodsClass.new
310
- prf = RubyProf::Profile.new(measure_mode: RubyProf::WALL_TIME)
311
-
312
- prf.exclude_common_methods!
313
-
314
- result = prf.profile {obj.a}
315
- methods = result.threads.first.methods.sort.reverse
316
-
317
- assert_equal(9, methods.count)
318
- assert_equal('ExcludeMethodsTest#test_exclude_common_methods1', methods[0].full_name)
319
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
320
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
321
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
322
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
323
- assert_equal('Kernel#sleep', methods[5].full_name)
324
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
325
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
326
- assert_equal('Kernel#class', methods[8].full_name)
327
- end
328
-
329
- def test_exclude_common_methods2
330
- obj = ExcludeMethodsClass.new
331
-
332
- result = RubyProf::Profile.profile(exclude_common: true) { 5.times {obj.a} }
333
- methods = result.threads.first.methods.sort.reverse
334
-
335
- assert_equal(9, methods.count)
336
- assert_equal('ExcludeMethodsTest#test_exclude_common_methods2', methods[0].full_name)
337
- assert_equal('ExcludeMethodsClass#a', methods[1].full_name)
338
- assert_equal('ExcludeMethodsClass#b', methods[2].full_name)
339
- assert_equal('<Class::ExcludeMethodsClass>#e', methods[3].full_name)
340
- assert_equal('<Class::ExcludeMethodsClass>#f', methods[4].full_name)
341
- assert_equal('Kernel#sleep', methods[5].full_name)
342
- assert_equal('ExcludeMethodsModule#c', methods[6].full_name)
343
- assert_equal('<Module::ExcludeMethodsModule>#d', methods[7].full_name)
344
- assert_equal('Kernel#class', methods[8].full_name)
345
- end
346
- end
347
-
348
- private
349
-
350
- def assert_method_has_been_excluded(result, excluded_method)
351
- result.threads.each do |thread|
352
- thread.methods.each do |method|
353
- method.call_trees.each do |ci|
354
- assert(ci.target != excluded_method, "broken self")
355
- assert(ci.parent.target != excluded_method, "broken parent") if ci.parent
356
- ci.children.each do |callee|
357
- assert(callee.target != excluded_method, "broken kid")
358
- end
359
- end
360
- end
361
- end
362
- end
363
- end
@@ -1,48 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
-
7
- # -- Tests ----
8
- class ExcludeThreadsTest < TestCase
9
- def test_exclude_threads
10
-
11
- def thread1_proc
12
- sleep(0.5)
13
- sleep(2)
14
- end
15
-
16
- def thread2_proc
17
- sleep(0.5)
18
- sleep(2)
19
- end
20
-
21
- thread1 = Thread.new do
22
- thread1_proc
23
- end
24
-
25
- thread2 = Thread.new do
26
- thread2_proc
27
- end
28
-
29
- result = RubyProf::Profile.profile(exclude_threads: [thread2]) do
30
- thread1.join
31
- thread2.join
32
- end
33
-
34
- assert_equal(2, result.threads.length)
35
-
36
- output = Array.new
37
- result.threads.each do |thread|
38
- thread.methods.each do | m |
39
- if m.full_name.index("ExcludeThreadsTest#thread") == 0
40
- output.push(m.full_name)
41
- end
42
- end
43
- end
44
-
45
- assert_equal(1, output.length)
46
- assert_equal("ExcludeThreadsTest#thread1_proc", output[0])
47
- end
48
- end
data/test/fiber_test.rb DELETED
@@ -1,195 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
- require 'fiber'
6
- require 'timeout'
7
- require 'set'
8
-
9
- # -- Tests ----
10
- class FiberTest < TestCase
11
- def enumerator_with_fibers
12
- enum = Enumerator.new do |yielder|
13
- [1,2].each do |x|
14
- yielder.yield x
15
- end
16
- end
17
-
18
- enum.next
19
- enum.next
20
- end
21
-
22
- def fiber_yield_resume
23
- fiber = Fiber.new do
24
- Fiber.yield 1
25
- Fiber.yield 2
26
- end
27
-
28
- fiber.resume
29
- fiber.resume
30
- end
31
-
32
- def test_fibers
33
- result = RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) { enumerator_with_fibers }
34
-
35
- assert_equal(2, result.threads.size)
36
-
37
- thread1 = result.threads[0]
38
- methods = thread1.methods.sort.reverse
39
- assert_equal(5, methods.count)
40
-
41
- method = methods[0]
42
- assert_equal('FiberTest#test_fibers', method.full_name)
43
- assert_equal(1, method.called)
44
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
45
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
46
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
47
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
48
-
49
- method = methods[1]
50
- assert_equal('FiberTest#enumerator_with_fibers', method.full_name)
51
- assert_equal(1, method.called)
52
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
53
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
54
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
55
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
56
-
57
- method = methods[2]
58
- assert_equal('Enumerator#next', method.full_name)
59
- assert_equal(2, method.called)
60
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
61
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
62
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
63
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
64
-
65
- method = methods[3]
66
- assert_equal('Class#new', method.full_name)
67
- assert_equal(1, method.called)
68
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
69
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
70
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
71
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
72
-
73
- method = methods[4]
74
- assert_equal('Enumerator#initialize', method.full_name)
75
- assert_equal(1, method.called)
76
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
77
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
78
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
79
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
80
-
81
- thread2 = result.threads[1]
82
- methods = thread2.methods.sort.reverse
83
- assert_equal(4, methods.count)
84
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
85
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
86
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
87
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
88
-
89
- method = methods[0]
90
- assert_equal('Enumerator#each', method.full_name)
91
- assert_equal(1, method.called)
92
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
93
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
94
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
95
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
96
-
97
- method = methods[1]
98
- assert_equal('Enumerator::Generator#each', method.full_name)
99
- assert_equal(1, method.called)
100
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
101
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
102
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
103
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
104
-
105
- method = methods[2]
106
- assert_equal('Array#each', method.full_name)
107
- assert_equal(1, method.called)
108
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
109
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
110
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
111
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
112
-
113
- method = methods[3]
114
- assert_equal('Enumerator::Yielder#yield', method.full_name)
115
- assert_equal(2, method.called)
116
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
117
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
118
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
119
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
120
- end
121
-
122
- def test_fiber_resume
123
- result = RubyProf::Profile.profile(measure_mode: RubyProf::WALL_TIME) { fiber_yield_resume }
124
-
125
- assert_equal(2, result.threads.size)
126
-
127
- thread1 = result.threads[0]
128
- methods = thread1.methods.sort.reverse
129
- assert_equal(5, methods.count)
130
-
131
- method = methods[0]
132
- assert_equal('FiberTest#test_fiber_resume', method.full_name)
133
- assert_equal(1, method.called)
134
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
135
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
136
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
137
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
138
-
139
- method = methods[1]
140
- assert_equal('FiberTest#fiber_yield_resume', method.full_name)
141
- assert_equal(1, method.called)
142
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
143
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
144
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
145
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
146
-
147
- method = methods[2]
148
- assert_equal('Fiber#resume', method.full_name)
149
- assert_equal(2, method.called)
150
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
151
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
152
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
153
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
154
-
155
- method = methods[3]
156
- assert_equal('Class#new', method.full_name)
157
- assert_equal(1, method.called)
158
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
159
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
160
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
161
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
162
-
163
- method = methods[4]
164
- assert_equal('Fiber#initialize', method.full_name)
165
- assert_equal(1, method.called)
166
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
167
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
168
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
169
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
170
-
171
- thread1 = result.threads[1]
172
- methods = thread1.methods.sort.reverse
173
- assert_equal(2, methods.count)
174
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
175
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
176
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
177
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
178
-
179
- method = methods[0]
180
- assert_equal('FiberTest#fiber_yield_resume', method.full_name)
181
- assert_equal(1, method.called)
182
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
183
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
184
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
185
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
186
-
187
- method = methods[1]
188
- assert_equal('<Class::Fiber>#yield', method.full_name)
189
- assert_equal(2, method.called)
190
- assert_in_delta(0, method.total_time, 0.001 * delta_multiplier)
191
- assert_in_delta(0, method.self_time, 0.001 * delta_multiplier)
192
- assert_in_delta(0, method.wait_time, 0.001 * delta_multiplier)
193
- assert_in_delta(0, method.children_time, 0.001 * delta_multiplier)
194
- end
195
- end