ruby-prof 0.18.0-x64-mingw32 → 1.1.0-x64-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. checksums.yaml +4 -4
  2. data/CHANGES +32 -0
  3. data/LICENSE +2 -2
  4. data/README.rdoc +1 -483
  5. data/Rakefile +3 -6
  6. data/bin/ruby-prof +65 -30
  7. data/ext/ruby_prof/extconf.rb +6 -38
  8. data/ext/ruby_prof/rp_allocation.c +279 -0
  9. data/ext/ruby_prof/rp_allocation.h +31 -0
  10. data/ext/ruby_prof/rp_call_info.c +129 -283
  11. data/ext/ruby_prof/rp_call_info.h +16 -34
  12. data/ext/ruby_prof/rp_measure_allocations.c +25 -49
  13. data/ext/ruby_prof/rp_measure_memory.c +21 -56
  14. data/ext/ruby_prof/rp_measure_process_time.c +35 -39
  15. data/ext/ruby_prof/rp_measure_wall_time.c +36 -19
  16. data/ext/ruby_prof/rp_measurement.c +230 -0
  17. data/ext/ruby_prof/rp_measurement.h +50 -0
  18. data/ext/ruby_prof/rp_method.c +389 -389
  19. data/ext/ruby_prof/rp_method.h +34 -39
  20. data/ext/ruby_prof/rp_profile.c +895 -0
  21. data/ext/ruby_prof/rp_profile.h +37 -0
  22. data/ext/ruby_prof/rp_stack.c +103 -80
  23. data/ext/ruby_prof/rp_stack.h +5 -12
  24. data/ext/ruby_prof/rp_thread.c +143 -83
  25. data/ext/ruby_prof/rp_thread.h +15 -6
  26. data/ext/ruby_prof/ruby_prof.c +11 -757
  27. data/ext/ruby_prof/ruby_prof.h +4 -47
  28. data/ext/ruby_prof/vc/ruby_prof.vcxproj +10 -8
  29. data/lib/{2.6.3 → 2.6.5}/ruby_prof.so +0 -0
  30. data/lib/ruby-prof.rb +2 -18
  31. data/lib/ruby-prof/assets/call_stack_printer.html.erb +713 -0
  32. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  33. data/lib/ruby-prof/assets/graph_printer.html.erb +356 -0
  34. data/lib/ruby-prof/call_info.rb +35 -93
  35. data/lib/ruby-prof/call_info_visitor.rb +19 -21
  36. data/lib/ruby-prof/compatibility.rb +37 -107
  37. data/lib/ruby-prof/exclude_common_methods.rb +198 -0
  38. data/lib/ruby-prof/measurement.rb +14 -0
  39. data/lib/ruby-prof/method_info.rb +52 -83
  40. data/lib/ruby-prof/printers/abstract_printer.rb +73 -50
  41. data/lib/ruby-prof/printers/call_info_printer.rb +13 -3
  42. data/lib/ruby-prof/printers/call_stack_printer.rb +62 -145
  43. data/lib/ruby-prof/printers/call_tree_printer.rb +20 -12
  44. data/lib/ruby-prof/printers/dot_printer.rb +5 -5
  45. data/lib/ruby-prof/printers/flat_printer.rb +6 -24
  46. data/lib/ruby-prof/printers/graph_html_printer.rb +6 -192
  47. data/lib/ruby-prof/printers/graph_printer.rb +13 -15
  48. data/lib/ruby-prof/printers/multi_printer.rb +66 -23
  49. data/lib/ruby-prof/profile.rb +10 -3
  50. data/lib/ruby-prof/rack.rb +0 -3
  51. data/lib/ruby-prof/thread.rb +12 -12
  52. data/lib/ruby-prof/version.rb +1 -1
  53. data/ruby-prof.gemspec +2 -2
  54. data/test/abstract_printer_test.rb +0 -27
  55. data/test/alias_test.rb +129 -0
  56. data/test/basic_test.rb +41 -40
  57. data/test/call_info_visitor_test.rb +3 -3
  58. data/test/dynamic_method_test.rb +0 -2
  59. data/test/fiber_test.rb +11 -17
  60. data/test/gc_test.rb +96 -0
  61. data/test/line_number_test.rb +120 -39
  62. data/test/marshal_test.rb +119 -0
  63. data/test/measure_allocations.rb +30 -0
  64. data/test/measure_allocations_test.rb +371 -12
  65. data/test/measure_allocations_trace_test.rb +385 -0
  66. data/test/measure_memory_trace_test.rb +756 -0
  67. data/test/measure_process_time_test.rb +821 -33
  68. data/test/measure_times.rb +54 -0
  69. data/test/measure_wall_time_test.rb +349 -145
  70. data/test/multi_printer_test.rb +1 -34
  71. data/test/parser_timings.rb +24 -0
  72. data/test/pause_resume_test.rb +5 -5
  73. data/test/prime.rb +2 -0
  74. data/test/printer_call_stack_test.rb +28 -0
  75. data/test/printer_call_tree_test.rb +31 -0
  76. data/test/printer_flat_test.rb +68 -0
  77. data/test/printer_graph_html_test.rb +60 -0
  78. data/test/printer_graph_test.rb +41 -0
  79. data/test/printers_test.rb +32 -166
  80. data/test/printing_recursive_graph_test.rb +26 -72
  81. data/test/recursive_test.rb +72 -77
  82. data/test/stack_printer_test.rb +2 -15
  83. data/test/start_stop_test.rb +22 -25
  84. data/test/test_helper.rb +5 -248
  85. data/test/thread_test.rb +11 -54
  86. data/test/unique_call_path_test.rb +16 -28
  87. data/test/yarv_test.rb +1 -0
  88. metadata +28 -36
  89. data/examples/flat.txt +0 -50
  90. data/examples/graph.dot +0 -84
  91. data/examples/graph.html +0 -823
  92. data/examples/graph.txt +0 -139
  93. data/examples/multi.flat.txt +0 -23
  94. data/examples/multi.graph.html +0 -760
  95. data/examples/multi.grind.dat +0 -114
  96. data/examples/multi.stack.html +0 -547
  97. data/examples/stack.html +0 -547
  98. data/ext/ruby_prof/rp_measure.c +0 -40
  99. data/ext/ruby_prof/rp_measure.h +0 -45
  100. data/ext/ruby_prof/rp_measure_cpu_time.c +0 -136
  101. data/ext/ruby_prof/rp_measure_gc_runs.c +0 -73
  102. data/ext/ruby_prof/rp_measure_gc_time.c +0 -60
  103. data/lib/ruby-prof/aggregate_call_info.rb +0 -76
  104. data/lib/ruby-prof/assets/call_stack_printer.css.html +0 -117
  105. data/lib/ruby-prof/assets/call_stack_printer.js.html +0 -385
  106. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +0 -83
  107. data/lib/ruby-prof/profile/exclude_common_methods.rb +0 -207
  108. data/lib/ruby-prof/profile/legacy_method_elimination.rb +0 -50
  109. data/test/aggregate_test.rb +0 -136
  110. data/test/block_test.rb +0 -74
  111. data/test/call_info_test.rb +0 -78
  112. data/test/issue137_test.rb +0 -63
  113. data/test/measure_cpu_time_test.rb +0 -212
  114. data/test/measure_gc_runs_test.rb +0 -32
  115. data/test/measure_gc_time_test.rb +0 -36
  116. data/test/measure_memory_test.rb +0 -33
  117. data/test/method_elimination_test.rb +0 -84
  118. data/test/module_test.rb +0 -45
  119. data/test/stack_test.rb +0 -138
@@ -25,45 +25,43 @@ end
25
25
  # --- expected test output ---
26
26
  =begin
27
27
  Measure Mode: wall_time
28
- Thread ID: 70238775664960
29
- Fiber ID: 70238784046840
30
- Total Time: 2.040249824523926
31
- Sort by: total_time
28
+ Thread ID: 1307675084040
29
+ Fiber ID: 1307708787440
30
+ Total Time: 2.0939999999973224
31
+ Sort by:
32
32
 
33
- %total %self total self wait child calls Name
33
+ %total %self total self wait child calls name
34
34
  --------------------------------------------------------------------------------
35
- 100.00% 0.00% 2.040 0.000 0.000 2.040 1 PrintingRecursiveGraphTest#setup
36
- 2.040 0.000 0.000 2.040 1/1 PRGT#run
35
+ 1.657 0.000 0.000 1.657 2/2 Integer#times
36
+ 79.13% 0.00% 1.657 0.000 0.000 1.657 2 PRGT#g
37
+ 1.657 0.000 0.000 1.657 2/5 Integer#times
37
38
  --------------------------------------------------------------------------------
38
- 2.040 0.000 0.000 2.040 1/1 PrintingRecursiveGraphTest#setup
39
- 100.00% 0.00% 2.040 0.000 0.000 2.040 1 PRGT#run
40
- 2.040 0.000 0.000 2.040 1/5 Integer#times
39
+ 2.094 2.094 0.000 0.000 12/12 Integer#times
40
+ 100.00% 100.00% 2.094 2.094 0.000 0.000 12 Kernel#sleep
41
41
  --------------------------------------------------------------------------------
42
- 0.409 0.000 0.000 0.409 2/5 Prgt#f
43
- 1.631 0.000 0.000 1.631 2/5 PRGT#g
44
- 2.040 0.000 0.000 2.040 1/5 PRGT#run
45
- 100.00% 0.00% 2.040 0.000 0.000 2.040 5 *Integer#times
46
- 2.040 2.040 0.000 0.000 12/12 Kernel#sleep
47
- 1.631 0.000 0.000 1.631 2/2 PRGT#g
48
- 0.409 0.000 0.000 0.409 2/2 PRGT#f
42
+ 0.437 0.000 0.000 0.437 2/2 Integer#times
43
+ 20.87% 0.00% 0.437 0.000 0.000 0.437 2 PRGT#f
44
+ 0.437 0.000 0.000 0.437 2/5 Integer#times
49
45
  --------------------------------------------------------------------------------
50
- 2.040 2.040 0.000 0.000 12/12 Integer#times
51
- 99.99% 99.99% 2.040 2.040 0.000 0.000 12 Kernel#sleep
46
+ 0.437 0.000 0.000 0.437 2/5 PRGT#f
47
+ 1.657 0.000 0.000 1.657 2/5 PRGT#g
48
+ 2.094 0.000 0.000 2.094 1/5 PRGT#run
49
+ 100.00% 0.00% 2.094 0.000 0.000 2.094 5 *Integer#times
50
+ 2.094 2.094 0.000 0.000 12/12 Kernel#sleep
51
+ 1.657 0.000 0.000 1.657 2/2 PRGT#g
52
+ 0.437 0.000 0.000 0.437 2/2 PRGT#f
52
53
  --------------------------------------------------------------------------------
53
- 1.631 0.000 0.000 1.631 2/2 Integer#times
54
- 79.94% 0.00% 1.631 0.000 0.000 1.631 2 PRGT#g
55
- 1.631 0.000 0.000 1.631 2/5 Integer#times
54
+ 2.094 0.000 0.000 2.094 1/1 PrintingRecursiveGraphTest#setup
55
+ 100.00% 0.00% 2.094 0.000 0.000 2.094 1 PRGT#run
56
+ 2.094 0.000 0.000 2.094 1/5 Integer#times
56
57
  --------------------------------------------------------------------------------
57
- 0.409 0.000 0.000 0.409 2/2 Integer#times
58
- 20.05% 0.00% 0.409 0.000 0.000 0.409 2 PRGT#f
59
- 0.409 0.000 0.000 0.409 2/5 Integer#times
58
+ 100.00% 0.00% 2.094 0.000 0.000 2.094 1 PrintingRecursiveGraphTest#setup
59
+ 2.094 0.000 0.000 2.094 1/1 PRGT#run
60
60
 
61
61
  * indicates recursively called methods
62
62
  =end
63
63
 
64
64
  class PrintingRecursiveGraphTest < TestCase
65
- include PrinterTestHelper
66
-
67
65
  def setup
68
66
  # WALL_TIME so we can use sleep in our test and get same measurements on linux and windows
69
67
  RubyProf::measure_mode = RubyProf::WALL_TIME
@@ -74,54 +72,10 @@ class PrintingRecursiveGraphTest < TestCase
74
72
 
75
73
  def test_printing_rescursive_graph
76
74
  printer = RubyProf::GraphPrinter.new(@result)
77
-
78
75
  buffer = ''
79
76
  printer.print(StringIO.new(buffer))
80
-
81
77
  puts buffer if ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1"
82
78
 
83
- parsed_output = MetricsArray.parse(buffer)
84
-
85
- assert( integer_times = parsed_output.metrics_for("*Integer#times") )
86
-
87
- actual_parents = integer_times.parents.map(&:name)
88
- expected_parents = %w(PRGT#f PRGT#g PRGT#run)
89
- assert_equal expected_parents, actual_parents
90
-
91
- actual_children = integer_times.children.map(&:name)
92
- expected_children = %w(Kernel#sleep PRGT#g PRGT#f)
93
- assert_equal expected_children, actual_children
94
-
95
- assert( fp = integer_times.parent("PRGT#f") )
96
- assert_in_delta(fp.total, fp.child, 0.01)
97
- assert_equal("2/5", fp.calls)
98
-
99
- assert( gp = integer_times.parent("PRGT#g") )
100
- assert_in_delta(gp.total, gp.child, 0.01)
101
- assert_equal("2/5", gp.calls)
102
-
103
- assert( rp = integer_times.parent("PRGT#run") )
104
- assert_in_delta(rp.total, rp.child, 0.01)
105
- assert_equal("1/5", rp.calls)
106
-
107
- assert_in_delta(4*fp.total, gp.total, 0.05)
108
- assert_in_delta(fp.total + gp.total, rp.total, 0.05)
109
- assert_in_delta(integer_times.metrics.total, rp.total, 0.05)
110
-
111
- assert( fc = integer_times.child("PRGT#f") )
112
- assert_in_delta(fc.total, fc.child, 0.01)
113
- assert_equal("2/2", fc.calls)
114
-
115
- assert( gc = integer_times.child("PRGT#g") )
116
- assert_in_delta(gc.total, gc.child, 0.01)
117
- assert_equal("2/2", gc.calls)
118
-
119
- assert( ks = integer_times.child("Kernel#sleep") )
120
- assert_in_delta(ks.total, ks.self_t, 0.01)
121
- assert_equal("12/12", ks.calls)
122
-
123
- assert_in_delta(4*fc.total, gc.total, 0.05)
124
- assert_in_delta(fp.total + gc.total, ks.total, 0.05)
125
- assert_in_delta(integer_times.metrics.total, ks.total, 0.05)
79
+ refute_nil(buffer)
126
80
  end
127
81
  end
@@ -7,12 +7,10 @@ module SimpleRecursion
7
7
  # Simple recursive test
8
8
  def simple(n)
9
9
  sleep(1)
10
- n -= 1
11
10
  return if n == 0
12
- simple(n)
11
+ simple(n-1)
13
12
  end
14
13
 
15
-
16
14
  # More complicated recursive test
17
15
  def render_partial(i)
18
16
  sleep(1)
@@ -44,12 +42,9 @@ class RecursiveTest < TestCase
44
42
 
45
43
  def test_simple
46
44
  result = RubyProf.profile do
47
- simple(2)
45
+ simple(1)
48
46
  end
49
47
 
50
- # Remove Fixnum+, Fixnum== for less than Ruby 1.9
51
- result.eliminate_methods!(%w(Fixnum#== Fixnum#-))
52
-
53
48
  methods = result.threads.first.methods.sort.reverse
54
49
  assert_equal(3, methods.length)
55
50
 
@@ -57,56 +52,60 @@ class RecursiveTest < TestCase
57
52
  method = methods[0]
58
53
  assert_equal('RecursiveTest#test_simple', method.full_name)
59
54
  assert_equal(1, method.called)
55
+ refute(method.recursive?)
60
56
  assert_in_delta(2, method.total_time, 0.1)
61
57
  assert_in_delta(0, method.self_time, 0.01)
62
58
  assert_in_delta(0, method.wait_time, 0.01)
63
59
  assert_in_delta(2, method.children_time, 0.1)
64
60
 
65
- assert_equal(1, method.call_infos.length)
66
- call_info = method.call_infos[0]
67
- assert(!call_info.recursive?)
68
- assert_equal('RecursiveTest#test_simple', call_info.call_sequence)
69
- assert_equal(1, call_info.children.length)
61
+ assert_equal(1, method.callers.length)
62
+ call_info = method.callers[0]
63
+ assert_nil(call_info.parent)
64
+
65
+ assert_equal(1, method.callees.length)
66
+ call_info = method.callees[0]
67
+ assert_equal('SimpleRecursion#simple', call_info.target.full_name)
70
68
 
71
69
  # Method 1: SimpleRecursion#simple
72
70
  method = methods[1]
73
71
  assert_equal('SimpleRecursion#simple', method.full_name)
74
72
  assert_equal(2, method.called)
73
+ assert(method.recursive?)
75
74
  assert_in_delta(2, method.total_time, 0.1)
76
75
  assert_in_delta(0, method.self_time, 0.1)
77
76
  assert_in_delta(0, method.wait_time, 0.1)
78
77
  assert_in_delta(2, method.children_time, 0.1)
79
78
 
80
- assert_equal(2, method.call_infos.length)
79
+ assert_equal(2, method.callers.length)
80
+ call_info = method.callers[0]
81
+ assert_equal('RecursiveTest#test_simple', call_info.parent.full_name)
81
82
 
82
- call_info = method.call_infos.first
83
- assert_equal(2, call_info.children.length)
84
- assert_equal('RecursiveTest#test_simple->SimpleRecursion#simple', call_info.call_sequence)
85
- assert(!call_info.recursive?)
83
+ call_info = method.callers[1]
84
+ assert_equal('SimpleRecursion#simple', call_info.parent.full_name)
86
85
 
87
- call_info = method.call_infos.last
88
- assert_equal(1, call_info.children.length)
89
- assert_equal('RecursiveTest#test_simple->SimpleRecursion#simple->SimpleRecursion#simple', call_info.call_sequence)
90
- assert(call_info.recursive?)
86
+ assert_equal(2, method.callees.length)
87
+ call_info = method.callees[0]
88
+ assert_equal('Kernel#sleep', call_info.target.full_name)
91
89
 
90
+ call_info = method.callees[1]
91
+ assert_equal('SimpleRecursion#simple', call_info.target.full_name)
92
+
93
+ # Method 2: Kernel#sleep
92
94
  method = methods[2]
93
95
  assert_equal('Kernel#sleep', method.full_name)
94
96
  assert_equal(2, method.called)
97
+ refute(method.recursive?)
95
98
  assert_in_delta(2, method.total_time, 0.1)
96
99
  assert_in_delta(2, method.self_time, 0.1)
97
100
  assert_in_delta(0, method.wait_time, 0.1)
98
101
  assert_in_delta(0, method.children_time, 0.1)
99
102
 
100
- assert_equal(2, method.call_infos.length)
101
- call_info = method.call_infos[0]
102
- assert_equal('RecursiveTest#test_simple->SimpleRecursion#simple->Kernel#sleep', call_info.call_sequence)
103
- assert_equal(0, call_info.children.length)
104
- assert(!call_info.recursive?)
103
+ assert_equal(1, method.callers.length)
104
+ call_info = method.callers[0]
105
+ assert_equal('SimpleRecursion#simple', call_info.parent.full_name)
106
+ assert_equal(0, method.callees.length)
105
107
 
106
- call_info = method.call_infos[1]
107
- assert_equal('RecursiveTest#test_simple->SimpleRecursion#simple->SimpleRecursion#simple->Kernel#sleep', call_info.call_sequence)
108
- assert_equal(0, call_info.children.length)
109
- assert(!call_info.recursive?)
108
+ assert_equal(0, method.callees.length)
110
109
  end
111
110
 
112
111
  def test_cycle
@@ -120,96 +119,92 @@ class RecursiveTest < TestCase
120
119
  method = methods[0]
121
120
  assert_equal('RecursiveTest#test_cycle', method.full_name)
122
121
  assert_equal(1, method.called)
122
+ refute(method.recursive?)
123
123
  assert_in_delta(5, method.total_time, 0.1)
124
124
  assert_in_delta(0, method.self_time, 0.01)
125
125
  assert_in_delta(0, method.wait_time, 0.01)
126
126
  assert_in_delta(5, method.children_time, 0.1)
127
127
 
128
- assert_equal(1, method.call_infos.length)
129
- call_info = method.call_infos[0]
130
- assert_equal('RecursiveTest#test_cycle', call_info.call_sequence)
131
- assert_equal(1, call_info.children.length)
132
- assert(!call_info.recursive?)
128
+ assert_equal(1, method.callers.length)
129
+ call_info = method.callers[0]
130
+ assert_nil(call_info.parent)
131
+
132
+ assert_equal(1, method.callees.length)
133
+ call_info = method.callees[0]
134
+ assert_equal('SimpleRecursion#render', call_info.target.full_name)
133
135
 
134
136
  method = methods[1]
135
137
  assert_equal('SimpleRecursion#render', method.full_name)
136
138
  assert_equal(1, method.called)
139
+ refute(method.recursive?)
137
140
  assert_in_delta(5, method.total_time, 0.1)
138
141
  assert_in_delta(0, method.self_time, 0.01)
139
142
  assert_in_delta(0, method.wait_time, 0.01)
140
143
  assert_in_delta(5, method.children_time, 0.1)
141
144
 
142
- assert_equal(1, method.call_infos.length)
143
- call_info = method.call_infos[0]
144
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render', call_info.call_sequence)
145
- assert_equal(1, call_info.children.length)
146
- assert(!call_info.recursive?)
145
+ assert_equal(1, method.callers.length)
146
+ call_info = method.callers[0]
147
+ assert_equal('RecursiveTest#test_cycle', call_info.parent.full_name)
148
+
149
+ assert_equal(1, method.callees.length)
150
+ call_info = method.callees[0]
151
+ assert_equal('Integer#times', call_info.target.full_name)
147
152
 
148
153
  method = methods[2]
149
154
  assert_equal('Integer#times', method.full_name)
150
155
  assert_equal(2, method.called)
156
+ assert(method.recursive?)
151
157
  assert_in_delta(5, method.total_time, 0.1)
152
158
  assert_in_delta(0, method.self_time, 0.1)
153
159
  assert_in_delta(0, method.wait_time, 0.1)
154
160
  assert_in_delta(5, method.children_time, 0.1)
155
161
 
156
- assert_equal(2, method.call_infos.length)
157
- call_info = method.call_infos[0]
158
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times', call_info.call_sequence)
159
- assert_equal(1, call_info.children.length)
160
- assert(!call_info.recursive?)
162
+ assert_equal(2, method.callers.length)
163
+ call_info = method.callers[0]
164
+ assert_equal('SimpleRecursion#render', call_info.parent.full_name)
165
+
166
+ call_info = method.callers[1]
167
+ assert_equal('SimpleRecursion#render_partial', call_info.parent.full_name)
161
168
 
162
- call_info = method.call_infos[1]
163
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times->SimpleRecursion#render_partial->Integer#times', call_info.call_sequence)
164
- assert_equal(1, call_info.children.length)
165
- assert(call_info.recursive?)
169
+ assert_equal(1, method.callees.length)
170
+ call_info = method.callees[0]
171
+ assert_equal('SimpleRecursion#render_partial', call_info.target.full_name)
166
172
 
167
173
  method = methods[3]
168
174
  assert_equal('SimpleRecursion#render_partial', method.full_name)
169
175
  assert_equal(5, method.called)
176
+ assert(method.recursive?)
170
177
  assert_in_delta(5, method.total_time, 0.1)
171
178
  assert_in_delta(0, method.self_time, 0.1)
172
179
  assert_in_delta(0, method.wait_time, 0.01)
173
180
  assert_in_delta(5, method.children_time, 0.05)
174
181
 
175
- assert_equal(3, method.call_infos.length)
176
- call_info = method.call_infos[0]
177
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times->SimpleRecursion#render_partial', call_info.call_sequence)
178
- assert_equal(3, call_info.children.length)
179
- assert(!call_info.recursive?)
182
+ assert_equal(2, method.callers.length)
183
+ call_info = method.callers[0]
184
+ assert_equal('Integer#times', call_info.parent.full_name)
185
+
186
+ call_info = method.callers[1]
187
+ assert_equal('SimpleRecursion#render_partial', call_info.parent.full_name)
188
+
189
+ assert_equal(3, method.callees.length)
190
+ call_info = method.callees[0]
191
+ assert_equal('Kernel#sleep', call_info.target.full_name)
180
192
 
181
- call_info = method.call_infos[1]
182
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times->SimpleRecursion#render_partial->SimpleRecursion#render_partial', call_info.call_sequence)
183
- assert_equal(1, call_info.children.length)
184
- assert(call_info.recursive?)
193
+ call_info = method.callees[1]
194
+ assert_equal('SimpleRecursion#render_partial', call_info.target.full_name)
185
195
 
186
- call_info = method.call_infos[2]
187
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times->SimpleRecursion#render_partial->Integer#times->SimpleRecursion#render_partial', call_info.call_sequence)
188
- assert_equal(1, call_info.children.length)
189
- assert(call_info.recursive?)
196
+ call_info = method.callees[2]
197
+ assert_equal('Integer#times', call_info.target.full_name)
190
198
 
191
199
  method = methods[4]
192
200
  assert_equal('Kernel#sleep', method.full_name)
193
201
  assert_equal(5, method.called)
202
+ refute(method.recursive?)
194
203
  assert_in_delta(5, method.total_time, 0.1)
195
204
  assert_in_delta(5, method.self_time, 0.1)
196
205
  assert_in_delta(0, method.wait_time, 0.01)
197
206
  assert_in_delta(0, method.children_time, 0.01)
198
207
 
199
- assert_equal(3, method.call_infos.length)
200
- call_info = method.call_infos[0]
201
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times->SimpleRecursion#render_partial->Kernel#sleep', call_info.call_sequence)
202
- assert_equal(0, call_info.children.length)
203
- assert(!call_info.recursive?)
204
-
205
- call_info = method.call_infos[1]
206
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times->SimpleRecursion#render_partial->SimpleRecursion#render_partial->Kernel#sleep', call_info.call_sequence)
207
- assert_equal(0, call_info.children.length)
208
- assert(!call_info.recursive?)
209
-
210
- call_info = method.call_infos[2]
211
- assert_equal('RecursiveTest#test_cycle->SimpleRecursion#render->Integer#times->SimpleRecursion#render_partial->Integer#times->SimpleRecursion#render_partial->Kernel#sleep', call_info.call_sequence)
212
- assert_equal(0, call_info.children.length)
213
- assert(!call_info.recursive?)
208
+ assert_equal(0, method.callees.length)
214
209
  end
215
210
  end
@@ -41,7 +41,7 @@ class StackPrinterTest < TestCase
41
41
  expected_time = end_time - start_time
42
42
 
43
43
  file_contents = nil
44
- assert_nothing_raised { file_contents = print(result) }
44
+ file_contents = print(result)
45
45
  re = /Thread: (\d+)(, Fiber: (\d+))? \([\.0-9]+.[\.0-9]+% ~ ([\.0-9]+)\)/
46
46
  assert_match(re, file_contents)
47
47
  file_contents =~ re
@@ -49,23 +49,10 @@ class StackPrinterTest < TestCase
49
49
  assert_in_delta(expected_time, actual_time, 0.1)
50
50
  end
51
51
 
52
- def test_method_elimination
53
- RubyProf.start
54
- 5.times{STPT.new.a}
55
- result = RubyProf.stop
56
- assert_nothing_raised {
57
- # result.dump
58
- result.eliminate_methods!([/Integer#times/])
59
- # $stderr.puts "================================"
60
- # result.dump
61
- print(result)
62
- }
63
- end
64
-
65
52
  private
66
53
  def print(result)
67
54
  test = caller.first =~ /in `(.*)'/ ? $1 : "test"
68
- testfile_name = "#{RubyProf.tmpdir}/ruby_prof_#{test}.html"
55
+ testfile_name = "#{Dir.tmpdir}/ruby_prof_#{test}.html"
69
56
  # puts "printing to #{testfile_name}"
70
57
  printer = RubyProf::CallStackPrinter.new(result)
71
58
  File.open(testfile_name, "w") {|f| printer.print(f, :threshold => 0, :min_percent => 0, :title => "ruby_prof #{test}")}
@@ -39,24 +39,15 @@ class StartStopTest < TestCase
39
39
  end
40
40
  end
41
41
 
42
-
43
42
  def test_different_methods
44
43
  method1
45
44
 
46
45
  # Ruby prof should be stopped
47
46
  assert_equal(false, RubyProf.running?)
48
47
 
49
-
50
- # Length should be 4:
51
- # StartStopTest#method1
52
- # StartStopTest#method2
53
- # StartStopTest#method3
54
- # Kernel#sleep
55
-
56
48
  methods = @result.threads.first.methods.sort.reverse
57
49
  assert_equal(4, methods.length)
58
50
 
59
- # Check StackTest#test_call_sequence
60
51
  method = methods[0]
61
52
  assert_equal('StartStopTest#method1', method.full_name)
62
53
  assert_equal(1, method.called)
@@ -64,11 +55,10 @@ class StartStopTest < TestCase
64
55
  assert_in_delta(0, method.wait_time, 0.02)
65
56
  assert_in_delta(0, method.self_time, 0.02)
66
57
  assert_in_delta(2, method.children_time, 0.05)
67
- assert_equal(1, method.call_infos.length)
68
58
 
69
- call_info = method.call_infos[0]
70
- assert_equal('StartStopTest#method1', call_info.call_sequence)
71
- assert_equal(1, call_info.children.length)
59
+ assert_equal(1, method.callees.length)
60
+ call_info = method.callees[0]
61
+ assert_equal('StartStopTest#method2', call_info.target.full_name)
72
62
 
73
63
  method = methods[1]
74
64
  assert_equal('StartStopTest#method2', method.full_name)
@@ -77,11 +67,14 @@ class StartStopTest < TestCase
77
67
  assert_in_delta(0, method.wait_time, 0.02)
78
68
  assert_in_delta(0, method.self_time, 0.02)
79
69
  assert_in_delta(2, method.children_time, 0.05)
80
- assert_equal(1, method.call_infos.length)
81
70
 
82
- call_info = method.call_infos[0]
83
- assert_equal('StartStopTest#method1->StartStopTest#method2', call_info.call_sequence)
84
- assert_equal(1, call_info.children.length)
71
+ assert_equal(1, method.callers.length)
72
+ call_info = method.callers[0]
73
+ assert_equal('StartStopTest#method1', call_info.parent.full_name)
74
+
75
+ assert_equal(1, method.callees.length)
76
+ call_info = method.callees[0]
77
+ assert_equal('StartStopTest#method3', call_info.target.full_name)
85
78
 
86
79
  method = methods[2]
87
80
  assert_equal('StartStopTest#method3', method.full_name)
@@ -90,11 +83,14 @@ class StartStopTest < TestCase
90
83
  assert_in_delta(0, method.wait_time, 0.02)
91
84
  assert_in_delta(0, method.self_time, 0.02)
92
85
  assert_in_delta(2, method.children_time, 0.02)
93
- assert_equal(1, method.call_infos.length)
94
86
 
95
- call_info = method.call_infos[0]
96
- assert_equal('StartStopTest#method1->StartStopTest#method2->StartStopTest#method3', call_info.call_sequence)
97
- assert_equal(1, call_info.children.length)
87
+ assert_equal(1, method.callers.length)
88
+ call_info = method.callers[0]
89
+ assert_equal('StartStopTest#method2', call_info.parent.full_name)
90
+
91
+ assert_equal(1, method.callees.length)
92
+ call_info = method.callees[0]
93
+ assert_equal('Kernel#sleep', call_info.target.full_name)
98
94
 
99
95
  method = methods[3]
100
96
  assert_equal('Kernel#sleep', method.full_name)
@@ -103,10 +99,11 @@ class StartStopTest < TestCase
103
99
  assert_in_delta(0, method.wait_time, 0.02)
104
100
  assert_in_delta(2, method.self_time, 0.02)
105
101
  assert_in_delta(0, method.children_time, 0.02)
106
- assert_equal(1, method.call_infos.length)
107
102
 
108
- call_info = method.call_infos[0]
109
- assert_equal('StartStopTest#method1->StartStopTest#method2->StartStopTest#method3->Kernel#sleep', call_info.call_sequence)
110
- assert_equal(0, call_info.children.length)
103
+ assert_equal(1, method.callers.length)
104
+ call_info = method.callers[0]
105
+ assert_equal('StartStopTest#method3', call_info.parent.full_name)
106
+
107
+ assert_equal(0, method.callees.length)
111
108
  end
112
109
  end