ruby-prof 0.11.0.rc1 → 0.11.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/CHANGES +20 -5
  2. data/README.rdoc +10 -3
  3. data/ext/ruby_prof/rp_call_info.c +108 -79
  4. data/ext/ruby_prof/rp_call_info.h +1 -0
  5. data/ext/ruby_prof/rp_measure_cpu_time.c +111 -111
  6. data/ext/ruby_prof/rp_measure_gc_runs.c +1 -1
  7. data/ext/ruby_prof/rp_measure_memory.c +1 -1
  8. data/ext/ruby_prof/rp_measure_process_time.c +71 -71
  9. data/ext/ruby_prof/rp_measure_wall_time.c +1 -1
  10. data/ext/ruby_prof/rp_method.c +143 -73
  11. data/ext/ruby_prof/rp_method.h +7 -4
  12. data/ext/ruby_prof/rp_stack.c +16 -1
  13. data/ext/ruby_prof/rp_stack.h +4 -1
  14. data/ext/ruby_prof/rp_thread.c +165 -35
  15. data/ext/ruby_prof/rp_thread.h +8 -2
  16. data/ext/ruby_prof/ruby_prof.c +164 -171
  17. data/ext/ruby_prof/ruby_prof.h +53 -54
  18. data/ext/ruby_prof/vc/ruby_prof.sln +26 -0
  19. data/ext/ruby_prof/vc/ruby_prof.vcxproj +109 -0
  20. data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +105 -0
  21. data/lib/ruby-prof/aggregate_call_info.rb +9 -7
  22. data/lib/ruby-prof/call_info.rb +2 -27
  23. data/lib/ruby-prof/call_info_visitor.rb +42 -0
  24. data/lib/ruby-prof/{empty.png → images/empty.png} +0 -0
  25. data/lib/ruby-prof/{minus.png → images/minus.png} +0 -0
  26. data/lib/ruby-prof/{plus.png → images/plus.png} +0 -0
  27. data/lib/ruby-prof/method_info.rb +13 -15
  28. data/lib/ruby-prof/{abstract_printer.rb → printers/abstract_printer.rb} +36 -2
  29. data/lib/ruby-prof/printers/call_info_printer.rb +40 -0
  30. data/lib/ruby-prof/{call_stack_printer.rb → printers/call_stack_printer.rb} +11 -16
  31. data/lib/ruby-prof/{call_tree_printer.rb → printers/call_tree_printer.rb} +4 -4
  32. data/lib/ruby-prof/{dot_printer.rb → printers/dot_printer.rb} +11 -31
  33. data/lib/ruby-prof/{flat_printer.rb → printers/flat_printer.rb} +26 -35
  34. data/lib/ruby-prof/{flat_printer_with_line_numbers.rb → printers/flat_printer_with_line_numbers.rb} +14 -25
  35. data/lib/ruby-prof/printers/graph_html_printer.rb +248 -0
  36. data/lib/ruby-prof/{graph_printer.rb → printers/graph_printer.rb} +31 -73
  37. data/lib/ruby-prof/{multi_printer.rb → printers/multi_printer.rb} +0 -0
  38. data/lib/ruby-prof/profile.rb +27 -22
  39. data/lib/ruby-prof/rack.rb +22 -12
  40. data/ruby-prof.gemspec +58 -0
  41. data/test/aggregate_test.rb +6 -6
  42. data/test/call_info_visitor_test.rb +31 -0
  43. data/test/duplicate_names_test.rb +1 -1
  44. data/test/dynamic_method_test.rb +1 -1
  45. data/test/enumerable_test.rb +1 -1
  46. data/test/exclude_threads_test.rb +2 -2
  47. data/test/gc_test.rb +35 -0
  48. data/test/line_number_test.rb +2 -2
  49. data/test/measure_cpu_time_test.rb +5 -5
  50. data/test/measure_process_time_test.rb +5 -5
  51. data/test/measure_wall_time_test.rb +5 -5
  52. data/test/method_elimination_test.rb +3 -3
  53. data/test/module_test.rb +1 -1
  54. data/test/no_method_class_test.rb +1 -1
  55. data/test/printers_test.rb +16 -8
  56. data/test/recursive_test.rb +115 -91
  57. data/test/stack_test.rb +1 -1
  58. data/test/start_stop_test.rb +13 -13
  59. data/test/summarize_test.rb +48 -0
  60. data/test/test_suite.rb +1 -0
  61. data/test/thread_test.rb +16 -12
  62. data/test/unique_call_path_test.rb +10 -10
  63. metadata +64 -85
  64. data/lib/1.8/ruby_prof.so +0 -0
  65. data/lib/1.9/ruby_prof.exp +0 -0
  66. data/lib/1.9/ruby_prof.ilk +0 -0
  67. data/lib/1.9/ruby_prof.lib +0 -0
  68. data/lib/1.9/ruby_prof.pdb +0 -0
  69. data/lib/1.9/ruby_prof.so +0 -0
  70. data/lib/ruby-prof.rb +0 -70
  71. data/lib/ruby-prof/graph_html_printer.rb +0 -286
  72. data/lib/ruby-prof/symbol_to_proc.rb +0 -10
  73. data/lib/ruby_prof.exp +0 -0
  74. data/lib/ruby_prof.ilk +0 -0
  75. data/lib/ruby_prof.lib +0 -0
  76. data/lib/ruby_prof.pdb +0 -0
  77. data/lib/ruby_prof.so +0 -0
  78. data/lib/unprof.rb +0 -10
  79. data/test/do_nothing.rb +0 -0
data/test/stack_test.rb CHANGED
@@ -46,7 +46,7 @@ class StackTest < Test::Unit::TestCase
46
46
  # StackClass#c
47
47
  # StackClass#b
48
48
 
49
- methods = result.threads.values.first.sort.reverse
49
+ methods = result.threads.first.methods.sort.reverse
50
50
  assert_equal(5, methods.length)
51
51
 
52
52
  # Check StackTest#test_call_sequence
@@ -53,7 +53,7 @@ class StartStopTest < Test::Unit::TestCase
53
53
  # StartStopTest#method3
54
54
  # Kernel#sleep
55
55
 
56
- methods = @result.threads.values.first.sort.reverse
56
+ methods = @result.threads.first.methods.sort.reverse
57
57
  assert_equal(4, methods.length)
58
58
 
59
59
  # Check StackTest#test_call_sequence
@@ -61,8 +61,8 @@ class StartStopTest < Test::Unit::TestCase
61
61
  assert_equal('StartStopTest#method1', method.full_name)
62
62
  assert_equal(1, method.called)
63
63
  assert_in_delta(2, method.total_time, 0.05)
64
- assert_in_delta(0, method.wait_time, 0.01)
65
- assert_in_delta(0, method.self_time, 0.01)
64
+ assert_in_delta(0, method.wait_time, 0.02)
65
+ assert_in_delta(0, method.self_time, 0.02)
66
66
  assert_in_delta(2, method.children_time, 0.05)
67
67
  assert_equal(1, method.call_infos.length)
68
68
 
@@ -74,8 +74,8 @@ class StartStopTest < Test::Unit::TestCase
74
74
  assert_equal('StartStopTest#method2', method.full_name)
75
75
  assert_equal(1, method.called)
76
76
  assert_in_delta(2, method.total_time, 0.05)
77
- assert_in_delta(0, method.wait_time, 0.01)
78
- assert_in_delta(0, method.self_time, 0.01)
77
+ assert_in_delta(0, method.wait_time, 0.02)
78
+ assert_in_delta(0, method.self_time, 0.02)
79
79
  assert_in_delta(2, method.children_time, 0.05)
80
80
  assert_equal(1, method.call_infos.length)
81
81
 
@@ -86,10 +86,10 @@ class StartStopTest < Test::Unit::TestCase
86
86
  method = methods[2]
87
87
  assert_equal('StartStopTest#method3', method.full_name)
88
88
  assert_equal(1, method.called)
89
- assert_in_delta(2, method.total_time, 0.01)
90
- assert_in_delta(0, method.wait_time, 0.01)
91
- assert_in_delta(0, method.self_time, 0.01)
92
- assert_in_delta(2, method.children_time, 0.01)
89
+ assert_in_delta(2, method.total_time, 0.02)
90
+ assert_in_delta(0, method.wait_time, 0.02)
91
+ assert_in_delta(0, method.self_time, 0.02)
92
+ assert_in_delta(2, method.children_time, 0.02)
93
93
  assert_equal(1, method.call_infos.length)
94
94
 
95
95
  call_info = method.call_infos[0]
@@ -99,10 +99,10 @@ class StartStopTest < Test::Unit::TestCase
99
99
  method = methods[3]
100
100
  assert_equal('Kernel#sleep', method.full_name)
101
101
  assert_equal(1, method.called)
102
- assert_in_delta(2, method.total_time, 0.01)
103
- assert_in_delta(0, method.wait_time, 0.01)
104
- assert_in_delta(2, method.self_time, 0.01)
105
- assert_in_delta(0, method.children_time, 0.01)
102
+ assert_in_delta(2, method.total_time, 0.02)
103
+ assert_in_delta(0, method.wait_time, 0.02)
104
+ assert_in_delta(2, method.self_time, 0.02)
105
+ assert_in_delta(0, method.children_time, 0.02)
106
106
  assert_equal(1, method.call_infos.length)
107
107
 
108
108
  call_info = method.call_infos[0]
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ def slow
7
+ sleep(3)
8
+ end
9
+
10
+ def fast
11
+ sleep(3)
12
+ end
13
+
14
+ def slow_caller
15
+ 1.times do
16
+ slow
17
+ end
18
+ end
19
+
20
+ def fast_caller
21
+ 1.times do
22
+ fast
23
+ end
24
+ end
25
+
26
+ def parent
27
+ [1..10].each do
28
+ #slow_caller
29
+ fast_caller
30
+ end
31
+ end
32
+
33
+ class SummarizeTest < Test::Unit::TestCase
34
+ def setup
35
+ # Need to use wall time for this test due to the sleep calls
36
+ RubyProf::measure_mode = RubyProf::WALL_TIME
37
+ end
38
+
39
+ def test
40
+ result = RubyProf::Profile.profile do
41
+ parent
42
+ end
43
+
44
+ printer = RubyProf::GraphPrinter.new(result)
45
+ printer.print(STDOUT)
46
+
47
+ end
48
+ end
data/test/test_suite.rb CHANGED
@@ -4,6 +4,7 @@ require File.expand_path("../test_helper", __FILE__)
4
4
 
5
5
  %w(aggregate_test
6
6
  basic_test
7
+ call_info_visitor_test
7
8
  duplicate_names_test
8
9
  dynamic_method_test
9
10
  enumerable_test
data/test/thread_test.rb CHANGED
@@ -20,7 +20,7 @@ class ThreadTest < Test::Unit::TestCase
20
20
 
21
21
  thread.join
22
22
  result = RubyProf.stop
23
- assert_equal(2, result.threads.keys.length) # this should pass...
23
+ assert_equal(2, result.threads.length)
24
24
  end
25
25
 
26
26
  def test_thread_identity
@@ -31,9 +31,9 @@ class ThreadTest < Test::Unit::TestCase
31
31
  thread.join
32
32
  result = RubyProf.stop
33
33
 
34
- thread_ids = result.threads.keys.sort
34
+ thread_ids = result.threads.map {|thread| thread.id}.sort
35
35
  threads = [Thread.current, thread]
36
- assert_equal(2, thread_ids.length) # should pass
36
+ assert_equal(2, result.threads.length)
37
37
 
38
38
  assert(thread_ids.include?(threads[0].object_id))
39
39
  assert(thread_ids.include?(threads[1].object_id))
@@ -59,7 +59,9 @@ class ThreadTest < Test::Unit::TestCase
59
59
 
60
60
  # Check background thread
61
61
  assert_equal(2, result.threads.length)
62
- methods = result.threads[thread.object_id].sort.reverse
62
+
63
+ rp_thread = result.threads.detect {|athread| athread.id == thread.object_id}
64
+ methods = rp_thread.methods.sort.reverse
63
65
  assert_equal(2, methods.length)
64
66
 
65
67
  method = methods[0]
@@ -88,7 +90,8 @@ class ThreadTest < Test::Unit::TestCase
88
90
  assert_equal(0, call_info.children.length)
89
91
 
90
92
  # Check foreground thread
91
- methods = result.threads[Thread.current.object_id].sort.reverse
93
+ rp_thread = result.threads.detect {|athread| athread.id == Thread.current.object_id}
94
+ methods = rp_thread.methods.sort.reverse
92
95
  assert_equal(4, methods.length)
93
96
  methods = methods.sort.reverse
94
97
 
@@ -150,13 +153,14 @@ class ThreadTest < Test::Unit::TestCase
150
153
 
151
154
  # useless test
152
155
  def test_thread_back_and_forth
153
- result = RubyProf.profile do
154
- a = Thread.new { 100_000.times { sleep 0 }}
155
- b = Thread.new { 100_000.times { sleep 0 }}
156
- a.join
157
- b.join
158
- end
159
- assert result.threads.values.flatten.sort[-1].total_time < 10 # 10s. Amazingly, this can fail in OS X at times. Amazing.
156
+ result = RubyProf.profile do
157
+ a = Thread.new { 100_000.times { sleep 0 }}
158
+ b = Thread.new { 100_000.times { sleep 0 }}
159
+ a.join
160
+ b.join
161
+ end
162
+ methods = result.threads.map {|thread| thread.methods}
163
+ assert(methods.flatten.sort[-1].total_time < 10) # 10s. Amazingly, this can fail in OS X at times. Amazing.
160
164
  end
161
165
 
162
166
  def test_thread
@@ -36,8 +36,8 @@ class UniqueCallPathTest < Test::Unit::TestCase
36
36
  end
37
37
 
38
38
  root_methods = Array.new
39
- result.threads.each do | thread_id, methods |
40
- methods.each do | m |
39
+ result.threads.each do |thread|
40
+ thread.methods.each do | m |
41
41
  if m.root?
42
42
  root_methods.push(m)
43
43
  end
@@ -57,8 +57,8 @@ class UniqueCallPathTest < Test::Unit::TestCase
57
57
  end
58
58
 
59
59
  root_methods = Array.new
60
- result.threads.each do | thread_id, methods |
61
- methods.each do | m |
60
+ result.threads.each do |thread|
61
+ thread.methods.each do | m |
62
62
  if m.root?
63
63
  root_methods.push(m)
64
64
  end
@@ -92,8 +92,8 @@ class UniqueCallPathTest < Test::Unit::TestCase
92
92
  end
93
93
 
94
94
  root_methods = Array.new
95
- result.threads.each do | thread_id, methods |
96
- methods.each do | m |
95
+ result.threads.each do |thread|
96
+ thread.methods.each do | m |
97
97
  if m.root?
98
98
  root_methods.push(m)
99
99
  end
@@ -150,8 +150,8 @@ class UniqueCallPathTest < Test::Unit::TestCase
150
150
  end
151
151
 
152
152
  root_methods = Array.new
153
- result.threads.each do | thread_id, methods |
154
- methods.each do | m |
153
+ result.threads.each do |thread|
154
+ thread.methods.each do | m |
155
155
  if m.root?
156
156
  root_methods.push(m)
157
157
  end
@@ -173,8 +173,8 @@ class UniqueCallPathTest < Test::Unit::TestCase
173
173
  end
174
174
 
175
175
  root_methods = Array.new
176
- result.threads.each do | thread_id, methods |
177
- methods.each do | m |
176
+ result.threads.each do |thread|
177
+ thread.methods.each do | m |
178
178
  if m.root?
179
179
  root_methods.push(m)
180
180
  end
metadata CHANGED
@@ -1,58 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ruby-prof
3
- version: !ruby/object:Gem::Version
4
- hash: 15424167
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.11.0.rc2
5
5
  prerelease: 7
6
- segments:
7
- - 0
8
- - 11
9
- - 0
10
- - rc
11
- - 1
12
- version: 0.11.0.rc1
13
6
  platform: ruby
14
- authors:
7
+ authors:
15
8
  - Shugo Maeda, Charlie Savage, Roger Pack, Stefan Kaes
16
9
  autorequire:
17
10
  bindir: bin
18
11
  cert_chain: []
19
-
20
- date: 2012-03-24 00:00:00 Z
21
- dependencies:
22
- - !ruby/object:Gem::Dependency
12
+ date: 2012-03-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
23
15
  name: rake-compiler
24
- prerelease: false
25
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
26
17
  none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 3
31
- segments:
32
- - 0
33
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
34
22
  type: :development
35
- version_requirements: *id001
36
- description: |
37
- ruby-prof is a fast code profiler for Ruby. It is a C extension and
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: ! 'ruby-prof is a fast code profiler for Ruby. It is a C extension and
31
+
38
32
  therefore is many times faster than the standard Ruby profiler. It
33
+
39
34
  supports both flat and graph profiles. For each method, graph profiles
35
+
40
36
  show how long the method ran, which methods called it and which
37
+
41
38
  methods it called. RubyProf generate both text and html and can output
39
+
42
40
  it to standard out or to a file.
43
41
 
42
+ '
44
43
  email: shugo@ruby-lang.org, cfis@savagexi.com, rogerdpack@gmail.com, skaes@railsexpress.de
45
- executables:
44
+ executables:
46
45
  - ruby-prof
47
- extensions:
46
+ extensions:
48
47
  - ext/ruby_prof/extconf.rb
49
48
  extra_rdoc_files: []
50
-
51
- files:
49
+ files:
50
+ - CHANGES
51
+ - LICENSE
52
52
  - Rakefile
53
53
  - README.rdoc
54
- - LICENSE
55
- - CHANGES
54
+ - ruby-prof.gemspec
56
55
  - bin/ruby-prof
57
56
  - examples/empty.png
58
57
  - examples/flat.txt
@@ -67,6 +66,7 @@ files:
67
66
  - examples/multi.stack.html
68
67
  - examples/plus.png
69
68
  - examples/stack.html
69
+ - ext/ruby_prof/extconf.rb
70
70
  - ext/ruby_prof/rp_call_info.c
71
71
  - ext/ruby_prof/rp_measure.c
72
72
  - ext/ruby_prof/rp_measure_allocations.c
@@ -87,50 +87,42 @@ files:
87
87
  - ext/ruby_prof/rp_thread.h
88
88
  - ext/ruby_prof/ruby_prof.h
89
89
  - ext/ruby_prof/version.h
90
- - lib/1.8/ruby_prof.so
91
- - lib/1.9/ruby_prof.exp
92
- - lib/1.9/ruby_prof.ilk
93
- - lib/1.9/ruby_prof.lib
94
- - lib/1.9/ruby_prof.pdb
95
- - lib/1.9/ruby_prof.so
96
- - lib/ruby-prof/abstract_printer.rb
90
+ - ext/ruby_prof/vc/ruby_prof.sln
91
+ - ext/ruby_prof/vc/ruby_prof.vcxproj
92
+ - ext/ruby_prof/vc/ruby_prof_18.vcxproj
97
93
  - lib/ruby-prof/aggregate_call_info.rb
98
94
  - lib/ruby-prof/call_info.rb
99
- - lib/ruby-prof/call_stack_printer.rb
100
- - lib/ruby-prof/call_tree_printer.rb
95
+ - lib/ruby-prof/call_info_visitor.rb
101
96
  - lib/ruby-prof/compatibility.rb
102
- - lib/ruby-prof/dot_printer.rb
103
- - lib/ruby-prof/empty.png
104
- - lib/ruby-prof/flat_printer.rb
105
- - lib/ruby-prof/flat_printer_with_line_numbers.rb
106
- - lib/ruby-prof/graph_html_printer.rb
107
- - lib/ruby-prof/graph_printer.rb
108
97
  - lib/ruby-prof/method_info.rb
109
- - lib/ruby-prof/minus.png
110
- - lib/ruby-prof/multi_printer.rb
111
- - lib/ruby-prof/plus.png
112
98
  - lib/ruby-prof/profile.rb
113
99
  - lib/ruby-prof/rack.rb
114
- - lib/ruby-prof/symbol_to_proc.rb
115
100
  - lib/ruby-prof/task.rb
116
101
  - lib/ruby-prof/test.rb
117
- - lib/ruby-prof.rb
118
- - lib/ruby_prof.exp
119
- - lib/ruby_prof.ilk
120
- - lib/ruby_prof.lib
121
- - lib/ruby_prof.pdb
122
- - lib/ruby_prof.so
123
- - lib/unprof.rb
102
+ - lib/ruby-prof/images/empty.png
103
+ - lib/ruby-prof/images/minus.png
104
+ - lib/ruby-prof/images/plus.png
105
+ - lib/ruby-prof/printers/abstract_printer.rb
106
+ - lib/ruby-prof/printers/call_info_printer.rb
107
+ - lib/ruby-prof/printers/call_stack_printer.rb
108
+ - lib/ruby-prof/printers/call_tree_printer.rb
109
+ - lib/ruby-prof/printers/dot_printer.rb
110
+ - lib/ruby-prof/printers/flat_printer.rb
111
+ - lib/ruby-prof/printers/flat_printer_with_line_numbers.rb
112
+ - lib/ruby-prof/printers/graph_html_printer.rb
113
+ - lib/ruby-prof/printers/graph_printer.rb
114
+ - lib/ruby-prof/printers/multi_printer.rb
124
115
  - test/aggregate_test.rb
125
116
  - test/basic_test.rb
126
117
  - test/bug_test.rb
127
- - test/do_nothing.rb
118
+ - test/call_info_visitor_test.rb
128
119
  - test/duplicate_names_test.rb
129
120
  - test/dynamic_method_test.rb
130
121
  - test/enumerable_test.rb
131
122
  - test/exceptions_test.rb
132
123
  - test/exclude_threads_test.rb
133
124
  - test/exec_test.rb
125
+ - test/gc_test.rb
134
126
  - test/line_number_test.rb
135
127
  - test/measure_allocations_test.rb
136
128
  - test/measure_cpu_time_test.rb
@@ -151,48 +143,35 @@ files:
151
143
  - test/stack_printer_test.rb
152
144
  - test/stack_test.rb
153
145
  - test/start_stop_test.rb
146
+ - test/summarize_test.rb
154
147
  - test/test_helper.rb
155
148
  - test/test_suite.rb
156
149
  - test/thread_test.rb
157
150
  - test/unique_call_path_test.rb
158
- - ext/ruby_prof/extconf.rb
159
151
  homepage: https://github.com/rdp/ruby-prof
160
152
  licenses: []
161
-
162
153
  post_install_message:
163
154
  rdoc_options: []
164
-
165
- require_paths:
155
+ require_paths:
166
156
  - lib
167
- required_ruby_version: !ruby/object:Gem::Requirement
157
+ required_ruby_version: !ruby/object:Gem::Requirement
168
158
  none: false
169
- requirements:
170
- - - ">="
171
- - !ruby/object:Gem::Version
172
- hash: 57
173
- segments:
174
- - 1
175
- - 8
176
- - 7
159
+ requirements:
160
+ - - ! '>='
161
+ - !ruby/object:Gem::Version
177
162
  version: 1.8.7
178
- required_rubygems_version: !ruby/object:Gem::Requirement
163
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
164
  none: false
180
- requirements:
181
- - - ">"
182
- - !ruby/object:Gem::Version
183
- hash: 25
184
- segments:
185
- - 1
186
- - 3
187
- - 1
165
+ requirements:
166
+ - - ! '>'
167
+ - !ruby/object:Gem::Version
188
168
  version: 1.3.1
189
169
  requirements: []
190
-
191
170
  rubyforge_project:
192
- rubygems_version: 1.8.10
171
+ rubygems_version: 1.8.21
193
172
  signing_key:
194
173
  specification_version: 3
195
174
  summary: Fast Ruby profiler
196
- test_files:
175
+ test_files:
197
176
  - test/test_helper.rb
198
177
  - test/test_suite.rb