ruby-prof 1.7.0-x64-mingw-ucrt → 1.7.2-x64-mingw-ucrt

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +12 -0
  3. data/ext/ruby_prof/extconf.rb +23 -22
  4. data/ext/ruby_prof/rp_call_trees.c +296 -296
  5. data/ext/ruby_prof/rp_call_trees.h +28 -28
  6. data/ext/ruby_prof/rp_measure_allocations.c +47 -47
  7. data/ext/ruby_prof/rp_measure_process_time.c +64 -66
  8. data/ext/ruby_prof/rp_measure_wall_time.c +52 -64
  9. data/ext/ruby_prof/rp_method.c +551 -562
  10. data/ext/ruby_prof/rp_stack.c +212 -212
  11. data/ext/ruby_prof/ruby_prof.c +50 -50
  12. data/ext/ruby_prof/ruby_prof.h +3 -2
  13. data/ext/ruby_prof/vc/ruby_prof.vcxproj +3 -3
  14. data/lib/3.4/ruby_prof.so +0 -0
  15. data/lib/ruby-prof/compatibility.rb +113 -113
  16. data/lib/ruby-prof/exclude_common_methods.rb +204 -204
  17. data/lib/ruby-prof/printers/abstract_printer.rb +156 -138
  18. data/lib/ruby-prof/version.rb +3 -3
  19. data/ruby-prof.gemspec +66 -64
  20. data/test/dynamic_method_test.rb +9 -21
  21. data/test/enumerable_test.rb +23 -21
  22. data/test/exclude_methods_test.rb +363 -257
  23. data/test/fiber_test.rb +195 -195
  24. data/test/gc_test.rb +104 -102
  25. data/test/line_number_test.rb +426 -289
  26. data/test/measure_allocations_test.rb +1172 -1081
  27. data/test/measure_memory_test.rb +1193 -1456
  28. data/test/measure_process_time_test.rb +3330 -2477
  29. data/test/measure_wall_time_test.rb +634 -568
  30. data/test/merge_test.rb +146 -146
  31. data/test/method_info_test.rb +100 -95
  32. data/test/printers_test.rb +178 -135
  33. data/test/recursive_test.rb +796 -622
  34. data/test/start_stop_test.rb +4 -4
  35. data/test/test_helper.rb +20 -20
  36. data/test/thread_test.rb +229 -231
  37. data/test/unique_call_path_test.rb +9 -22
  38. data/test/yarv_test.rb +1 -5
  39. metadata +33 -10
  40. data/lib/3.2/ruby_prof.so +0 -0
  41. data/lib/3.3/ruby_prof.so +0 -0
  42. data/test/crash2.rb +0 -144
@@ -1,257 +1,363 @@
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
- else
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
- end
241
-
242
- private
243
-
244
- def assert_method_has_been_excluded(result, excluded_method)
245
- result.threads.each do |thread|
246
- thread.methods.each do |method|
247
- method.call_trees.each do |ci|
248
- assert(ci.target != excluded_method, "broken self")
249
- assert(ci.parent.target != excluded_method, "broken parent") if ci.parent
250
- ci.children.each do |callee|
251
- assert(callee.target != excluded_method, "broken kid")
252
- end
253
- end
254
- end
255
- end
256
- end
257
- end
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