ruby-prof 0.8.1-x86-mingw32 → 0.11.0.rc1-x86-mingw32

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 (119) hide show
  1. data/CHANGES +89 -13
  2. data/LICENSE +4 -3
  3. data/{README → README.rdoc} +155 -162
  4. data/Rakefile +50 -123
  5. data/bin/ruby-prof +86 -47
  6. data/examples/empty.png +0 -0
  7. data/examples/graph.dot +106 -0
  8. data/examples/graph.png +0 -0
  9. data/examples/minus.png +0 -0
  10. data/examples/multi.flat.txt +23 -0
  11. data/examples/multi.graph.html +906 -0
  12. data/examples/multi.grind.dat +194 -0
  13. data/examples/multi.stack.html +573 -0
  14. data/examples/plus.png +0 -0
  15. data/examples/stack.html +573 -0
  16. data/ext/ruby_prof/extconf.rb +53 -0
  17. data/ext/ruby_prof/rp_call_info.c +369 -0
  18. data/ext/ruby_prof/rp_call_info.h +46 -0
  19. data/ext/ruby_prof/rp_measure.c +48 -0
  20. data/ext/ruby_prof/rp_measure.h +45 -0
  21. data/ext/ruby_prof/rp_measure_allocations.c +86 -0
  22. data/ext/ruby_prof/rp_measure_cpu_time.c +112 -0
  23. data/ext/ruby_prof/rp_measure_gc_runs.c +87 -0
  24. data/ext/ruby_prof/rp_measure_gc_time.c +73 -0
  25. data/ext/ruby_prof/rp_measure_memory.c +81 -0
  26. data/ext/ruby_prof/rp_measure_process_time.c +71 -0
  27. data/ext/ruby_prof/rp_measure_wall_time.c +42 -0
  28. data/ext/ruby_prof/rp_method.c +363 -0
  29. data/ext/ruby_prof/rp_method.h +55 -0
  30. data/ext/ruby_prof/rp_stack.c +61 -0
  31. data/ext/ruby_prof/rp_stack.h +40 -0
  32. data/ext/ruby_prof/rp_thread.c +113 -0
  33. data/ext/ruby_prof/rp_thread.h +20 -0
  34. data/ext/ruby_prof/ruby_prof.c +332 -1377
  35. data/ext/ruby_prof/ruby_prof.h +54 -188
  36. data/ext/ruby_prof/version.h +6 -3
  37. data/lib/1.8/ruby_prof.so +0 -0
  38. data/lib/1.9/ruby_prof.exp +0 -0
  39. data/lib/1.9/ruby_prof.ilk +0 -0
  40. data/lib/1.9/ruby_prof.lib +0 -0
  41. data/lib/1.9/ruby_prof.pdb +0 -0
  42. data/lib/1.9/ruby_prof.so +0 -0
  43. data/lib/ruby-prof.rb +32 -18
  44. data/lib/ruby-prof/abstract_printer.rb +15 -5
  45. data/lib/ruby-prof/aggregate_call_info.rb +11 -3
  46. data/lib/ruby-prof/call_info.rb +68 -1
  47. data/lib/ruby-prof/call_stack_printer.rb +775 -0
  48. data/lib/ruby-prof/call_tree_printer.rb +17 -9
  49. data/lib/ruby-prof/compatibility.rb +134 -0
  50. data/lib/ruby-prof/dot_printer.rb +152 -0
  51. data/lib/ruby-prof/empty.png +0 -0
  52. data/lib/ruby-prof/flat_printer.rb +23 -24
  53. data/lib/ruby-prof/flat_printer_with_line_numbers.rb +17 -21
  54. data/lib/ruby-prof/graph_html_printer.rb +69 -39
  55. data/lib/ruby-prof/graph_printer.rb +35 -35
  56. data/lib/ruby-prof/method_info.rb +26 -4
  57. data/lib/ruby-prof/minus.png +0 -0
  58. data/lib/ruby-prof/multi_printer.rb +56 -0
  59. data/lib/ruby-prof/plus.png +0 -0
  60. data/lib/ruby-prof/profile.rb +72 -0
  61. data/lib/ruby-prof/rack.rb +31 -0
  62. data/lib/ruby-prof/symbol_to_proc.rb +3 -1
  63. data/lib/ruby-prof/task.rb +20 -19
  64. data/lib/ruby-prof/test.rb +5 -3
  65. data/lib/ruby_prof.exp +0 -0
  66. data/lib/ruby_prof.ilk +0 -0
  67. data/lib/ruby_prof.lib +0 -0
  68. data/lib/ruby_prof.pdb +0 -0
  69. data/lib/ruby_prof.so +0 -0
  70. data/lib/unprof.rb +2 -0
  71. data/test/aggregate_test.rb +29 -14
  72. data/test/basic_test.rb +3 -251
  73. data/test/bug_test.rb +6 -0
  74. data/test/duplicate_names_test.rb +4 -4
  75. data/test/dynamic_method_test.rb +61 -0
  76. data/test/enumerable_test.rb +4 -4
  77. data/test/exceptions_test.rb +6 -5
  78. data/test/exclude_threads_test.rb +47 -47
  79. data/test/exec_test.rb +5 -5
  80. data/test/line_number_test.rb +16 -16
  81. data/test/measure_allocations_test.rb +25 -0
  82. data/test/measure_cpu_time_test.rb +212 -0
  83. data/test/measure_gc_runs_test.rb +29 -0
  84. data/test/measure_gc_time_test.rb +29 -0
  85. data/test/measure_memory_test.rb +36 -0
  86. data/test/measure_process_time_test.rb +205 -0
  87. data/test/measure_wall_time_test.rb +209 -0
  88. data/test/method_elimination_test.rb +74 -0
  89. data/test/module_test.rb +12 -21
  90. data/test/multi_printer_test.rb +81 -0
  91. data/test/no_method_class_test.rb +5 -3
  92. data/test/prime.rb +7 -10
  93. data/test/prime_test.rb +3 -3
  94. data/test/printers_test.rb +180 -54
  95. data/test/recursive_test.rb +34 -72
  96. data/test/singleton_test.rb +5 -4
  97. data/test/stack_printer_test.rb +73 -0
  98. data/test/stack_test.rb +7 -7
  99. data/test/start_stop_test.rb +23 -6
  100. data/test/test_helper.rb +81 -0
  101. data/test/test_suite.rb +35 -21
  102. data/test/thread_test.rb +40 -39
  103. data/test/unique_call_path_test.rb +6 -6
  104. metadata +106 -51
  105. data/ext/ruby_prof/measure_allocations.h +0 -58
  106. data/ext/ruby_prof/measure_cpu_time.h +0 -152
  107. data/ext/ruby_prof/measure_gc_runs.h +0 -76
  108. data/ext/ruby_prof/measure_gc_time.h +0 -57
  109. data/ext/ruby_prof/measure_memory.h +0 -101
  110. data/ext/ruby_prof/measure_process_time.h +0 -52
  111. data/ext/ruby_prof/measure_wall_time.h +0 -53
  112. data/ext/ruby_prof/mingw/Rakefile +0 -23
  113. data/ext/ruby_prof/mingw/build.rake +0 -38
  114. data/rails/environment/profile.rb +0 -24
  115. data/rails/example/example_test.rb +0 -9
  116. data/rails/profile_test_helper.rb +0 -21
  117. data/test/current_failures_windows +0 -8
  118. data/test/measurement_test.rb +0 -121
  119. data/test/ruby-prof-bin +0 -20
data/test/basic_test.rb CHANGED
@@ -1,54 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: UTF-8
2
3
 
3
- require 'test/unit'
4
- require 'ruby-prof'
5
-
6
- class C1
7
- def C1.hello
8
- sleep(0.1)
9
- end
10
-
11
- def hello
12
- sleep(0.2)
13
- end
14
- end
15
-
16
- module M1
17
- def hello
18
- sleep(0.3)
19
- end
20
- end
21
-
22
- class C2
23
- include M1
24
- extend M1
25
- end
26
-
27
- class C3
28
- def hello
29
- sleep(0.4)
30
- end
31
- end
32
-
33
- module M4
34
- def hello
35
- sleep(0.5)
36
- end
37
- end
38
-
39
- module M5
40
- include M4
41
- def goodbye
42
- hello
43
- end
44
- end
45
-
46
- class C6
47
- include M5
48
- def test
49
- goodbye
50
- end
51
- end
4
+ require File.expand_path('../test_helper', __FILE__)
52
5
 
53
6
  class BasicTest < Test::Unit::TestCase
54
7
  def setup
@@ -69,12 +22,6 @@ class BasicTest < Test::Unit::TestCase
69
22
  assert_raise(RuntimeError) do
70
23
  RubyProf.start
71
24
  end
72
-
73
- assert_raise(RuntimeError) do
74
- RubyProf.profile do
75
- puts 1
76
- end
77
- end
78
25
  RubyProf.stop
79
26
  end
80
27
 
@@ -84,201 +31,6 @@ class BasicTest < Test::Unit::TestCase
84
31
  end
85
32
  end
86
33
 
87
- def test_class_methods
88
- result = RubyProf.profile do
89
- C1.hello
90
- end
91
-
92
- # Length should be 3:
93
- # BasicTest#test_class_methods
94
- # <Class::C1>#hello
95
- # Kernel#sleep
96
-
97
- methods = result.threads.values.first.sort.reverse
98
- assert_equal(3, methods.length)
99
-
100
- # Check the names
101
- assert_equal('BasicTest#test_class_methods', methods[0].full_name)
102
- assert_equal('<Class::C1>#hello', methods[1].full_name)
103
- assert_equal('Kernel#sleep', methods[2].full_name)
104
-
105
- # Check times
106
- assert_in_delta(0.1, methods[0].total_time, 0.01)
107
- assert_in_delta(0, methods[0].wait_time, 0.01)
108
- assert_in_delta(0, methods[0].self_time, 0.01)
109
-
110
- assert_in_delta(0.1, methods[1].total_time, 0.01)
111
- assert_in_delta(0, methods[1].wait_time, 0.01)
112
- assert_in_delta(0, methods[1].self_time, 0.01)
113
-
114
- assert_in_delta(0.1, methods[2].total_time, 0.01)
115
- assert_in_delta(0, methods[2].wait_time, 0.01)
116
- assert_in_delta(0.1, methods[2].self_time, 0.01)
117
- end
118
-
119
- if RUBY_VERSION < '1.9'
120
- PARENT = Object
121
- else
122
- PARENT = BasicObject
123
- end
124
-
125
- def test_instance_methods
126
- result = RubyProf.profile do
127
- C1.new.hello
128
- end
129
-
130
- # Methods called
131
- # BasicTest#test_instance_methods
132
- # Class.new
133
- # Class:Object#allocate
134
- # for Object#initialize
135
- # C1#hello
136
- # Kernel#sleep
137
-
138
- methods = result.threads.values.first.sort.reverse
139
- assert_equal(6, methods.length)
140
- names = methods.map(&:full_name)
141
- assert_equal('BasicTest#test_instance_methods', names[0])
142
- assert_equal('C1#hello', names[1])
143
- assert_equal('Kernel#sleep', names[2])
144
- assert_equal('Class#new', names[3])
145
- # order can differ
146
- assert(names.include?("<Class::#{PARENT}>#allocate"))
147
- assert(names.include?("#{PARENT}#initialize"))
148
-
149
- # Check times
150
- assert_in_delta(0.2, methods[0].total_time, 0.02)
151
- assert_in_delta(0, methods[0].wait_time, 0.02)
152
- assert_in_delta(0, methods[0].self_time, 0.02)
153
-
154
- assert_in_delta(0.2, methods[1].total_time, 0.02)
155
- assert_in_delta(0, methods[1].wait_time, 0.02)
156
- assert_in_delta(0, methods[1].self_time, 0.02)
157
-
158
- assert_in_delta(0.2, methods[2].total_time, 0.02)
159
- assert_in_delta(0, methods[2].wait_time, 0.02)
160
- assert_in_delta(0.2, methods[2].self_time, 0.02)
161
-
162
- assert_in_delta(0, methods[3].total_time, 0.01)
163
- assert_in_delta(0, methods[3].wait_time, 0.01)
164
- assert_in_delta(0, methods[3].self_time, 0.01)
165
-
166
- assert_in_delta(0, methods[4].total_time, 0.01)
167
- assert_in_delta(0, methods[4].wait_time, 0.01)
168
- assert_in_delta(0, methods[4].self_time, 0.01)
169
-
170
- assert_in_delta(0, methods[5].total_time, 0.01)
171
- assert_in_delta(0, methods[5].wait_time, 0.01)
172
- assert_in_delta(0, methods[5].self_time, 0.01)
173
- end
174
-
175
- def test_module_methods
176
- result = RubyProf.profile do
177
- C2.hello
178
- end
179
-
180
- # Methods:
181
- # BasicTest#test_module_methods
182
- # M1#hello
183
- # Kernel#sleep
184
-
185
- methods = result.threads.values.first.sort.reverse
186
- assert_equal(3, methods.length)
187
-
188
- assert_equal('BasicTest#test_module_methods', methods[0].full_name)
189
- assert_equal('M1#hello', methods[1].full_name)
190
- assert_equal('Kernel#sleep', methods[2].full_name)
191
-
192
- # Check times
193
- assert_in_delta(0.3, methods[0].total_time, 0.1)
194
- assert_in_delta(0, methods[0].wait_time, 0.02)
195
- assert_in_delta(0, methods[0].self_time, 0.02)
196
-
197
- assert_in_delta(0.3, methods[1].total_time, 0.1)
198
- assert_in_delta(0, methods[1].wait_time, 0.02)
199
- assert_in_delta(0, methods[1].self_time, 0.02)
200
-
201
- assert_in_delta(0.3, methods[2].total_time, 0.1)
202
- assert_in_delta(0, methods[2].wait_time, 0.02)
203
- assert_in_delta(0.3, methods[2].self_time, 0.1)
204
- end
205
-
206
- def test_module_instance_methods
207
- result = RubyProf.profile do
208
- C2.new.hello
209
- end
210
-
211
- # Methods:
212
- # BasicTest#test_module_instance_methods
213
- # Class#new
214
- # <Class::Object>#allocate
215
- # Object#initialize
216
- # M1#hello
217
- # Kernel#sleep
218
-
219
- methods = result.threads.values.first.sort.reverse
220
- assert_equal(6, methods.length)
221
- names = methods.map(&:full_name)
222
- assert_equal('BasicTest#test_module_instance_methods', names[0])
223
- assert_equal('M1#hello', names[1])
224
- assert_equal('Kernel#sleep', names[2])
225
- assert_equal('Class#new', names[3])
226
- assert(names.include?("<Class::#{PARENT}>#allocate"))
227
- assert(names.include?("#{PARENT}#initialize"))
228
-
229
- # Check times
230
- assert_in_delta(0.3, methods[0].total_time, 0.1)
231
- assert_in_delta(0, methods[0].wait_time, 0.1)
232
- assert_in_delta(0, methods[0].self_time, 0.1)
233
-
234
- assert_in_delta(0.3, methods[1].total_time, 0.02)
235
- assert_in_delta(0, methods[1].wait_time, 0.01)
236
- assert_in_delta(0, methods[1].self_time, 0.01)
237
-
238
- assert_in_delta(0.3, methods[2].total_time, 0.02)
239
- assert_in_delta(0, methods[2].wait_time, 0.01)
240
- assert_in_delta(0.3, methods[2].self_time, 0.02)
241
-
242
- assert_in_delta(0, methods[3].total_time, 0.01)
243
- assert_in_delta(0, methods[3].wait_time, 0.01)
244
- assert_in_delta(0, methods[3].self_time, 0.01)
245
-
246
- assert_in_delta(0, methods[4].total_time, 0.01)
247
- assert_in_delta(0, methods[4].wait_time, 0.01)
248
- assert_in_delta(0, methods[4].self_time, 0.01)
249
-
250
- assert_in_delta(0, methods[5].total_time, 0.01)
251
- assert_in_delta(0, methods[5].wait_time, 0.01)
252
- assert_in_delta(0, methods[5].self_time, 0.01)
253
- end
254
-
255
- def test_singleton
256
- c3 = C3.new
257
-
258
- class << c3
259
- def hello
260
- end
261
- end
262
-
263
- result = RubyProf.profile do
264
- c3.hello
265
- end
266
-
267
- methods = result.threads.values.first.sort.reverse
268
- assert_equal(2, methods.length)
269
-
270
- assert_equal('BasicTest#test_singleton', methods[0].full_name)
271
- assert_equal('<Object::C3>#hello', methods[1].full_name)
272
-
273
- assert_in_delta(0, methods[0].total_time, 0.01)
274
- assert_in_delta(0, methods[0].wait_time, 0.01)
275
- assert_in_delta(0, methods[0].self_time, 0.01)
276
-
277
- assert_in_delta(0, methods[1].total_time, 0.01)
278
- assert_in_delta(0, methods[1].wait_time, 0.01)
279
- assert_in_delta(0, methods[1].self_time, 0.01)
280
- end
281
-
282
34
  def test_traceback
283
35
  RubyProf.start
284
36
  assert_raise(NoMethodError) do
@@ -287,4 +39,4 @@ class BasicTest < Test::Unit::TestCase
287
39
 
288
40
  RubyProf.stop
289
41
  end
290
- end
42
+ end
data/test/bug_test.rb ADDED
@@ -0,0 +1,6 @@
1
+ 50000.times do
2
+ begin
3
+ raise "error"
4
+ rescue
5
+ end
6
+ end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: UTF-8
2
3
 
3
- require 'test/unit'
4
- require 'ruby-prof'
4
+ require File.expand_path('../test_helper', __FILE__)
5
5
 
6
6
  class DuplicateNames < Test::Unit::TestCase
7
7
  def test_names
@@ -19,10 +19,10 @@ class DuplicateNames < Test::Unit::TestCase
19
19
  eval str
20
20
  Foo::Bar.new.foo
21
21
  end
22
-
22
+
23
23
  # There should be 3 foo methods
24
24
  methods = result.threads.values.first.sort.reverse
25
-
25
+
26
26
  methods = methods.select do |method|
27
27
  method.full_name == 'DuplicateNames::Foo::Bar#foo'
28
28
  end
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path("../test_helper", __FILE__)
5
+
6
+
7
+ class DynamicMethodTest < Test::Unit::TestCase
8
+ def test_dynamic_method
9
+ result = RubyProf.profile do
10
+ 1.times {RubyProf::C1.new.hello}
11
+ end
12
+
13
+ # Methods called
14
+ # Kernel#sleep
15
+ # <Class::BasicObject>#allocate
16
+ # BasicObject#initialize
17
+ # RubyProf::C1#hello
18
+ # Class#new
19
+ # Integer#times
20
+ # DynamicMethodTest#test_dynamic_method
21
+
22
+ methods = result.threads.values.first.sort.reverse
23
+ assert_equal(7, methods.length)
24
+
25
+ # Check times
26
+ assert_equal("DynamicMethodTest#test_dynamic_method", methods[0].full_name)
27
+ assert_in_delta(0.2, methods[0].total_time, 0.02)
28
+ assert_in_delta(0.0, methods[0].wait_time, 0.02)
29
+ assert_in_delta(0.0, methods[0].self_time, 0.02)
30
+
31
+ assert_equal("Integer#times", methods[1].full_name)
32
+ assert_in_delta(0.2, methods[1].total_time, 0.02)
33
+ assert_in_delta(0.0, methods[1].wait_time, 0.02)
34
+ assert_in_delta(0.0, methods[1].self_time, 0.02)
35
+
36
+ assert_equal("RubyProf::C1#hello", methods[2].full_name)
37
+ assert_in_delta(0.2, methods[2].total_time, 0.02)
38
+ assert_in_delta(0.0, methods[2].wait_time, 0.02)
39
+ assert_in_delta(0.0, methods[2].self_time, 0.02)
40
+
41
+ assert_equal("Kernel#sleep", methods[3].full_name)
42
+ assert_in_delta(0.2, methods[3].total_time, 0.01)
43
+ assert_in_delta(0.0, methods[3].wait_time, 0.01)
44
+ assert_in_delta(0.2, methods[3].self_time, 0.01)
45
+
46
+ assert_equal("Class#new", methods[4].full_name)
47
+ assert_in_delta(0.0, methods[4].total_time, 0.01)
48
+ assert_in_delta(0.0, methods[4].wait_time, 0.01)
49
+ assert_in_delta(0.0, methods[4].self_time, 0.01)
50
+
51
+ assert_equal("<Class::#{RubyProf::PARENT}>#allocate", methods[5].full_name)
52
+ assert_in_delta(0.0, methods[5].total_time, 0.01)
53
+ assert_in_delta(0.0, methods[5].wait_time, 0.01)
54
+ assert_in_delta(0.0, methods[5].self_time, 0.01)
55
+
56
+ assert_equal("#{RubyProf::PARENT}#initialize", methods[6].full_name)
57
+ assert_in_delta(0.0, methods[5].total_time, 0.01)
58
+ assert_in_delta(0.0, methods[5].wait_time, 0.01)
59
+ assert_in_delta(0.0, methods[5].self_time, 0.01)
60
+ end
61
+ end
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: UTF-8
2
3
 
3
- require 'test/unit'
4
- require 'ruby-prof'
4
+ require File.expand_path('../test_helper', __FILE__)
5
5
 
6
6
  # -- Test for bug
7
7
  # http://github.com/rdp/ruby-prof/issues#issue/12
@@ -11,6 +11,6 @@ class EnumerableTest < Test::Unit::TestCase
11
11
  result = RubyProf.profile do
12
12
  3.times { [1,2,3].any? {|n| n} }
13
13
  end
14
- assert result.threads.to_a.first[1].length == 4
14
+ assert result.threads.to_a.first[1].length == 4
15
15
  end
16
- end
16
+ end
@@ -1,15 +1,16 @@
1
1
  #!/usr/bin/env ruby
2
- require 'test/unit'
3
- require 'ruby-prof'
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
4
5
 
5
6
  class ExceptionsTest < Test::Unit::TestCase
6
7
  def test_profile
7
8
  result = begin
8
- RubyProf.profile do
9
+ RubyProf.profile do
9
10
  raise(RuntimeError, 'Test error')
10
11
  end
11
- rescue => e
12
- end
12
+ rescue
13
+ end
13
14
  assert_not_nil(result)
14
15
  end
15
16
  end
@@ -1,54 +1,54 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: UTF-8
2
3
 
3
- require 'test/unit'
4
- require 'ruby-prof'
4
+ require File.expand_path('../test_helper', __FILE__)
5
5
 
6
6
 
7
7
  # -- Tests ----
8
8
  class ExcludeThreadsTest < Test::Unit::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
- RubyProf::exclude_threads = [ thread2 ]
30
-
31
- RubyProf.start
32
-
33
- thread1.join
34
- thread2.join
35
-
36
- result = RubyProf.stop
37
-
38
- RubyProf::exclude_threads = nil
39
-
40
- assert_equal(2, result.threads.length)
41
-
42
- output = Array.new
43
- result.threads.each do | thread_id, methods |
44
- methods.each do | m |
45
- if m.full_name.index("ExcludeThreadsTest#thread") == 0
46
- output.push(m.full_name)
47
- end
48
- end
49
- end
50
-
51
- assert_equal(1, output.length)
52
- assert_equal("ExcludeThreadsTest#thread1_proc", output[0])
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
+ RubyProf::exclude_threads = [ thread2 ]
30
+
31
+ RubyProf.start
32
+
33
+ thread1.join
34
+ thread2.join
35
+
36
+ result = RubyProf.stop
37
+
38
+ RubyProf::exclude_threads = nil
39
+
40
+ assert_equal(2, result.threads.length)
41
+
42
+ output = Array.new
43
+ result.threads.each do | thread_id, methods |
44
+ methods.each do | m |
45
+ if m.full_name.index("ExcludeThreadsTest#thread") == 0
46
+ output.push(m.full_name)
47
+ end
48
+ end
49
+ end
50
+
51
+ assert_equal(1, output.length)
52
+ assert_equal("ExcludeThreadsTest#thread1_proc", output[0])
53
53
  end
54
- end
54
+ end