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

Sign up to get free protection for your applications and to get access to all the features.
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