ruby-prof 0.16.2 → 1.1.0

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 (203) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES +532 -467
  3. data/LICENSE +24 -24
  4. data/README.rdoc +5 -454
  5. data/Rakefile +110 -113
  6. data/bin/ruby-prof +380 -340
  7. data/bin/ruby-prof-check-trace +45 -45
  8. data/ext/ruby_prof/extconf.rb +36 -64
  9. data/ext/ruby_prof/rp_allocation.c +279 -0
  10. data/ext/ruby_prof/rp_allocation.h +31 -0
  11. data/ext/ruby_prof/rp_call_info.c +271 -407
  12. data/ext/ruby_prof/rp_call_info.h +35 -48
  13. data/ext/ruby_prof/rp_measure_allocations.c +52 -76
  14. data/ext/ruby_prof/rp_measure_memory.c +42 -77
  15. data/ext/ruby_prof/rp_measure_process_time.c +67 -71
  16. data/ext/ruby_prof/rp_measure_wall_time.c +62 -45
  17. data/ext/ruby_prof/rp_measurement.c +230 -0
  18. data/ext/ruby_prof/rp_measurement.h +50 -0
  19. data/ext/ruby_prof/rp_method.c +630 -411
  20. data/ext/ruby_prof/rp_method.h +70 -52
  21. data/ext/ruby_prof/rp_profile.c +895 -0
  22. data/ext/ruby_prof/rp_profile.h +37 -0
  23. data/ext/ruby_prof/rp_stack.c +196 -128
  24. data/ext/ruby_prof/rp_stack.h +56 -51
  25. data/ext/ruby_prof/rp_thread.c +337 -273
  26. data/ext/ruby_prof/rp_thread.h +36 -27
  27. data/ext/ruby_prof/ruby_prof.c +48 -671
  28. data/ext/ruby_prof/ruby_prof.h +17 -56
  29. data/ext/ruby_prof/vc/ruby_prof.sln +20 -21
  30. data/ext/ruby_prof/vc/{ruby_prof_20.vcxproj → ruby_prof.vcxproj} +38 -5
  31. data/lib/ruby-prof.rb +52 -58
  32. data/lib/ruby-prof/assets/call_stack_printer.html.erb +713 -0
  33. data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
  34. data/lib/ruby-prof/assets/graph_printer.html.erb +356 -0
  35. data/lib/ruby-prof/call_info.rb +57 -126
  36. data/lib/ruby-prof/call_info_visitor.rb +38 -40
  37. data/lib/ruby-prof/compatibility.rb +109 -178
  38. data/lib/ruby-prof/exclude_common_methods.rb +198 -0
  39. data/lib/ruby-prof/measurement.rb +14 -0
  40. data/lib/ruby-prof/method_info.rb +90 -129
  41. data/lib/ruby-prof/printers/abstract_printer.rb +127 -85
  42. data/lib/ruby-prof/printers/call_info_printer.rb +51 -41
  43. data/lib/ruby-prof/printers/call_stack_printer.rb +182 -260
  44. data/lib/ruby-prof/printers/call_tree_printer.rb +151 -130
  45. data/lib/ruby-prof/printers/dot_printer.rb +132 -132
  46. data/lib/ruby-prof/printers/flat_printer.rb +52 -70
  47. data/lib/ruby-prof/printers/graph_html_printer.rb +63 -244
  48. data/lib/ruby-prof/printers/graph_printer.rb +114 -116
  49. data/lib/ruby-prof/printers/multi_printer.rb +127 -58
  50. data/lib/ruby-prof/profile.rb +33 -55
  51. data/lib/ruby-prof/rack.rb +171 -95
  52. data/lib/ruby-prof/task.rb +147 -147
  53. data/lib/ruby-prof/thread.rb +35 -41
  54. data/lib/ruby-prof/version.rb +3 -3
  55. data/lib/unprof.rb +10 -10
  56. data/ruby-prof.gemspec +58 -57
  57. data/test/abstract_printer_test.rb +26 -0
  58. data/test/alias_test.rb +129 -0
  59. data/test/basic_test.rb +129 -128
  60. data/test/call_info_visitor_test.rb +31 -31
  61. data/test/duplicate_names_test.rb +32 -32
  62. data/test/dynamic_method_test.rb +53 -55
  63. data/test/enumerable_test.rb +21 -21
  64. data/test/exceptions_test.rb +24 -16
  65. data/test/exclude_methods_test.rb +146 -0
  66. data/test/exclude_threads_test.rb +53 -53
  67. data/test/fiber_test.rb +73 -79
  68. data/test/gc_test.rb +96 -0
  69. data/test/line_number_test.rb +161 -71
  70. data/test/marshal_test.rb +119 -0
  71. data/test/measure_allocations.rb +30 -0
  72. data/test/measure_allocations_test.rb +385 -26
  73. data/test/measure_allocations_trace_test.rb +385 -0
  74. data/test/measure_memory_trace_test.rb +756 -0
  75. data/test/measure_process_time_test.rb +849 -63
  76. data/test/measure_times.rb +54 -0
  77. data/test/measure_wall_time_test.rb +459 -255
  78. data/test/multi_printer_test.rb +71 -83
  79. data/test/no_method_class_test.rb +15 -15
  80. data/test/parser_timings.rb +24 -0
  81. data/test/pause_resume_test.rb +166 -166
  82. data/test/prime.rb +56 -54
  83. data/test/printer_call_stack_test.rb +28 -0
  84. data/test/printer_call_tree_test.rb +31 -0
  85. data/test/printer_flat_test.rb +68 -0
  86. data/test/printer_graph_html_test.rb +60 -0
  87. data/test/printer_graph_test.rb +41 -0
  88. data/test/printers_test.rb +141 -255
  89. data/test/printing_recursive_graph_test.rb +81 -127
  90. data/test/rack_test.rb +157 -93
  91. data/test/recursive_test.rb +210 -215
  92. data/test/singleton_test.rb +38 -38
  93. data/test/stack_printer_test.rb +64 -78
  94. data/test/start_stop_test.rb +109 -112
  95. data/test/test_helper.rb +24 -264
  96. data/test/thread_test.rb +144 -187
  97. data/test/unique_call_path_test.rb +190 -202
  98. data/test/yarv_test.rb +56 -55
  99. metadata +34 -114
  100. data/doc/LICENSE.html +0 -114
  101. data/doc/README_rdoc.html +0 -603
  102. data/doc/Rack.html +0 -95
  103. data/doc/Rack/RubyProf.html +0 -226
  104. data/doc/RubyProf.html +0 -962
  105. data/doc/RubyProf/AbstractPrinter.html +0 -546
  106. data/doc/RubyProf/AggregateCallInfo.html +0 -551
  107. data/doc/RubyProf/CallInfo.html +0 -639
  108. data/doc/RubyProf/CallInfoPrinter.html +0 -120
  109. data/doc/RubyProf/CallInfoVisitor.html +0 -198
  110. data/doc/RubyProf/CallStackPrinter.html +0 -1121
  111. data/doc/RubyProf/CallTreePrinter.html +0 -641
  112. data/doc/RubyProf/Cmd.html +0 -631
  113. data/doc/RubyProf/DotPrinter.html +0 -257
  114. data/doc/RubyProf/FlatPrinter.html +0 -163
  115. data/doc/RubyProf/FlatPrinterWithLineNumbers.html +0 -208
  116. data/doc/RubyProf/GraphHtmlPrinter.html +0 -552
  117. data/doc/RubyProf/GraphPrinter.html +0 -139
  118. data/doc/RubyProf/MethodInfo.html +0 -745
  119. data/doc/RubyProf/MultiPrinter.html +0 -360
  120. data/doc/RubyProf/Profile.html +0 -763
  121. data/doc/RubyProf/ProfileTask.html +0 -490
  122. data/doc/RubyProf/Thread.html +0 -310
  123. data/doc/created.rid +0 -31
  124. data/doc/css/fonts.css +0 -167
  125. data/doc/css/rdoc.css +0 -590
  126. data/doc/examples/flat_txt.html +0 -138
  127. data/doc/examples/graph_html.html +0 -909
  128. data/doc/examples/graph_txt.html +0 -247
  129. data/doc/fonts/Lato-Light.ttf +0 -0
  130. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  131. data/doc/fonts/Lato-Regular.ttf +0 -0
  132. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  133. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  134. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  135. data/doc/images/add.png +0 -0
  136. data/doc/images/arrow_up.png +0 -0
  137. data/doc/images/brick.png +0 -0
  138. data/doc/images/brick_link.png +0 -0
  139. data/doc/images/bug.png +0 -0
  140. data/doc/images/bullet_black.png +0 -0
  141. data/doc/images/bullet_toggle_minus.png +0 -0
  142. data/doc/images/bullet_toggle_plus.png +0 -0
  143. data/doc/images/date.png +0 -0
  144. data/doc/images/delete.png +0 -0
  145. data/doc/images/find.png +0 -0
  146. data/doc/images/loadingAnimation.gif +0 -0
  147. data/doc/images/macFFBgHack.png +0 -0
  148. data/doc/images/package.png +0 -0
  149. data/doc/images/page_green.png +0 -0
  150. data/doc/images/page_white_text.png +0 -0
  151. data/doc/images/page_white_width.png +0 -0
  152. data/doc/images/plugin.png +0 -0
  153. data/doc/images/ruby.png +0 -0
  154. data/doc/images/tag_blue.png +0 -0
  155. data/doc/images/tag_green.png +0 -0
  156. data/doc/images/transparent.png +0 -0
  157. data/doc/images/wrench.png +0 -0
  158. data/doc/images/wrench_orange.png +0 -0
  159. data/doc/images/zoom.png +0 -0
  160. data/doc/index.html +0 -626
  161. data/doc/js/darkfish.js +0 -161
  162. data/doc/js/jquery.js +0 -4
  163. data/doc/js/navigation.js +0 -142
  164. data/doc/js/navigation.js.gz +0 -0
  165. data/doc/js/search.js +0 -109
  166. data/doc/js/search_index.js +0 -1
  167. data/doc/js/search_index.js.gz +0 -0
  168. data/doc/js/searcher.js +0 -228
  169. data/doc/js/searcher.js.gz +0 -0
  170. data/doc/table_of_contents.html +0 -942
  171. data/examples/cachegrind.out.1 +0 -114
  172. data/examples/cachegrind.out.1.32313213 +0 -114
  173. data/examples/flat.txt +0 -50
  174. data/examples/graph.dot +0 -84
  175. data/examples/graph.html +0 -823
  176. data/examples/graph.txt +0 -139
  177. data/examples/multi.flat.txt +0 -23
  178. data/examples/multi.graph.html +0 -760
  179. data/examples/multi.grind.dat +0 -114
  180. data/examples/multi.stack.html +0 -547
  181. data/examples/stack.html +0 -547
  182. data/ext/ruby_prof/rp_measure.c +0 -40
  183. data/ext/ruby_prof/rp_measure.h +0 -45
  184. data/ext/ruby_prof/rp_measure_cpu_time.c +0 -136
  185. data/ext/ruby_prof/rp_measure_gc_runs.c +0 -73
  186. data/ext/ruby_prof/rp_measure_gc_time.c +0 -60
  187. data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +0 -108
  188. data/ext/ruby_prof/vc/ruby_prof_19.vcxproj +0 -110
  189. data/lib/ruby-prof/aggregate_call_info.rb +0 -76
  190. data/lib/ruby-prof/assets/call_stack_printer.css.html +0 -117
  191. data/lib/ruby-prof/assets/call_stack_printer.js.html +0 -385
  192. data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +0 -64
  193. data/test/aggregate_test.rb +0 -136
  194. data/test/block_test.rb +0 -74
  195. data/test/call_info_test.rb +0 -78
  196. data/test/issue137_test.rb +0 -63
  197. data/test/measure_cpu_time_test.rb +0 -213
  198. data/test/measure_gc_runs_test.rb +0 -32
  199. data/test/measure_gc_time_test.rb +0 -36
  200. data/test/measure_memory_test.rb +0 -33
  201. data/test/method_elimination_test.rb +0 -84
  202. data/test/module_test.rb +0 -45
  203. data/test/stack_test.rb +0 -138
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureGCRunsTest < TestCase
7
- include MemoryTestHelper
8
-
9
- def test_gc_runs_mode
10
- RubyProf::measure_mode = RubyProf::GC_RUNS
11
- assert_equal(RubyProf::GC_RUNS, RubyProf::measure_mode)
12
- end
13
-
14
- def test_gc_runs_enabled_defined
15
- assert(defined?(RubyProf::GC_RUNS_ENABLED))
16
- end
17
-
18
- if RubyProf::GC_RUNS_ENABLED
19
- def test_gc_runs
20
- t = RubyProf.measure_gc_runs
21
- assert_kind_of Integer, t
22
-
23
- GC.enable_stats if GC.respond_to?(:enable_stats)
24
- GC.start
25
-
26
- u = RubyProf.measure_gc_runs
27
- assert u > t, [t, u].inspect
28
- RubyProf::measure_mode = RubyProf::GC_RUNS
29
- memory_test_helper
30
- end
31
- end
32
- end
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureGCTimeTest < TestCase
7
- include MemoryTestHelper
8
-
9
- def test_gc_time_mode
10
- RubyProf::measure_mode = RubyProf::GC_TIME
11
- assert_equal(RubyProf::GC_TIME, RubyProf::measure_mode)
12
- end
13
-
14
- def test_gc_time_enabled_defined
15
- assert(defined?(RubyProf::GC_TIME_ENABLED))
16
- end
17
-
18
- if RubyProf::GC_TIME_ENABLED
19
- def test_gc_time
20
- RubyProf::measure_mode = RubyProf::GC_TIME
21
- RubyProf.enable_gc_stats_if_needed
22
-
23
- t = RubyProf.measure_gc_time
24
- assert_kind_of Float, t
25
-
26
- GC.start
27
-
28
- u = RubyProf.measure_gc_time
29
- assert u > t, [t, u].inspect
30
-
31
- memory_test_helper
32
- ensure
33
- RubyProf.disable_gc_stats_if_needed
34
- end
35
- end
36
- end
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class MeasureMemoryTest < TestCase
7
- include MemoryTestHelper
8
-
9
- def test_memory_mode
10
- RubyProf::measure_mode = RubyProf::MEMORY
11
- assert_equal(RubyProf::MEMORY, RubyProf::measure_mode)
12
- end
13
-
14
- def test_memory_enabled_defined
15
- assert(defined?(RubyProf::MEMORY_ENABLED))
16
- end
17
-
18
- if RubyProf::MEMORY_ENABLED
19
- def test_memory
20
- RubyProf::measure_mode = RubyProf::MEMORY
21
- RubyProf.enable_gc_stats_if_needed
22
- t = RubyProf.measure_memory
23
- assert_kind_of Float, t
24
- u = RubyProf.measure_memory
25
- assert_operator u, :>, t
26
- total = memory_test_helper
27
- assert(total > 0, 'Should measure more than zero kilobytes of memory usage')
28
- refute_equal(0, total % 1, 'Should not truncate fractional kilobyte measurements')
29
- ensure
30
- RubyProf.disable_gc_stats_if_needed
31
- end
32
- end
33
- end
@@ -1,84 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- # Test data
7
- # A
8
- # / \
9
- # B C
10
- # \
11
- # B
12
-
13
- module MethodElimination
14
- def self.a
15
- 1.times {|i| c}
16
- end
17
-
18
- def self.b
19
- sleep 0.1
20
- end
21
-
22
- def self.c
23
- 1.times {|i| b}
24
- end
25
- end
26
-
27
- class MethodEliminationTest < TestCase
28
- def setup
29
- # Need to use wall time for this test due to the sleep calls
30
- RubyProf::measure_mode = RubyProf::WALL_TIME
31
- end
32
-
33
- def test_setting_parent
34
- result = RubyProf.profile do
35
- 1000.times { 1+1 }
36
- end
37
- method_infos = result.threads.first.methods.sort.reverse
38
- assert(m1 = method_infos[0])
39
- assert(c1 = m1.call_infos.first)
40
- assert_nil(c1.parent)
41
- end
42
-
43
- def test_methods_can_be_eliminated
44
- RubyProf.start
45
- 5.times {MethodElimination.a}
46
- result = RubyProf.stop
47
-
48
- methods = result.threads.first.methods.sort.reverse
49
-
50
- assert_equal(6, methods.count)
51
- assert_equal('MethodEliminationTest#test_methods_can_be_eliminated', methods[0].full_name)
52
- assert_equal('Integer#times', methods[1].full_name)
53
- assert_equal('<Module::MethodElimination>#a', methods[2].full_name)
54
- assert_equal('<Module::MethodElimination>#c', methods[3].full_name)
55
- assert_equal('<Module::MethodElimination>#b', methods[4].full_name)
56
- assert_equal('Kernel#sleep', methods[5].full_name)
57
-
58
- result.eliminate_methods!([/Integer#times/])
59
-
60
- methods = result.threads.first.methods.sort.reverse
61
- assert_equal(5, methods.count)
62
- assert_equal('MethodEliminationTest#test_methods_can_be_eliminated', methods[0].full_name)
63
- assert_equal('<Module::MethodElimination>#a', methods[1].full_name)
64
- assert_equal('<Module::MethodElimination>#c', methods[2].full_name)
65
- assert_equal('<Module::MethodElimination>#b', methods[3].full_name)
66
- assert_equal('Kernel#sleep', methods[4].full_name)
67
- end
68
-
69
- private
70
-
71
- def assert_method_has_been_eliminated(result, eliminated_method)
72
- result.threads.each do |thread|
73
- thread.methods.each do |method|
74
- method.call_infos.each do |ci|
75
- assert(ci.target != eliminated_method, "broken self")
76
- assert(ci.parent.target != eliminated_method, "broken parent") if ci.parent
77
- ci.children.each do |callee|
78
- assert(callee.target != eliminated_method, "broken kid")
79
- end
80
- end
81
- end
82
- end
83
- end
84
- end
@@ -1,45 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- # Need to use wall time for this test due to the sleep calls
7
- RubyProf::measure_mode = RubyProf::WALL_TIME
8
-
9
- module Foo
10
- def Foo::hello
11
- sleep(0.5)
12
- end
13
- end
14
-
15
- module Bar
16
- def Bar::hello
17
- sleep(0.5)
18
- Foo::hello
19
- end
20
-
21
- def hello
22
- sleep(0.5)
23
- Bar::hello
24
- end
25
- end
26
-
27
- include Bar
28
-
29
- class ModuleTest < TestCase
30
- def test_nested_modules
31
- result = RubyProf.profile do
32
- hello
33
- end
34
-
35
- methods = result.threads.first.methods
36
-
37
- # Length should be 5
38
- assert_equal(5, methods.length)
39
-
40
- # these methods should be in there... (hard to tell order though).
41
- for name in ['ModuleTest#test_nested_modules','Bar#hello','Kernel#sleep','<Module::Bar>#hello','<Module::Foo>#hello']
42
- assert methods.map(&:full_name).include?( name )
43
- end
44
- end
45
- end
@@ -1,138 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- # Test data
7
- # A
8
- # / \
9
- # B C
10
- # \
11
- # B
12
-
13
- class StackClass
14
- def a
15
- sleep 1
16
- b
17
- c
18
- end
19
-
20
- def b
21
- sleep 2
22
- end
23
-
24
- def c
25
- sleep 3
26
- b
27
- end
28
- end
29
-
30
- class StackTest < TestCase
31
- def setup
32
- # Need to use wall time for this test due to the sleep calls
33
- RubyProf::measure_mode = RubyProf::WALL_TIME
34
- end
35
-
36
- def test_call_sequence
37
- c = StackClass.new
38
- result = RubyProf.profile do
39
- c.a
40
- end
41
-
42
- # Length should be 5:
43
- # StackTest#test_call_sequence
44
- # StackClass#a
45
- # Kernel#sleep
46
- # StackClass#c
47
- # StackClass#b
48
-
49
- methods = result.threads.first.methods.sort.reverse
50
- assert_equal(5, methods.length)
51
-
52
- # Check StackTest#test_call_sequence
53
- method = methods[0]
54
- assert_equal('StackTest#test_call_sequence', method.full_name)
55
- assert_equal(1, method.called)
56
- assert_in_delta(8, method.total_time, 0.25)
57
- assert_in_delta(0, method.wait_time, 0.01)
58
- assert_in_delta(0, method.self_time, 0.01)
59
- assert_in_delta(8, method.children_time, 0.25)
60
- assert_equal(1, method.call_infos.length)
61
-
62
- call_info = method.call_infos[0]
63
- assert_equal('StackTest#test_call_sequence', call_info.call_sequence)
64
- assert_equal(1, call_info.children.length)
65
-
66
- # Check StackClass#a
67
- method = methods[1]
68
- assert_equal('StackClass#a', method.full_name)
69
- assert_equal(1, method.called)
70
- assert_in_delta(8, method.total_time, 0.15)
71
- assert_in_delta(0, method.wait_time, 0.01)
72
- assert_in_delta(0, method.self_time, 0.01)
73
- assert_in_delta(8, method.children_time, 0.05)
74
- assert_equal(1, method.call_infos.length)
75
-
76
- call_info = method.call_infos[0]
77
- assert_equal('StackTest#test_call_sequence->StackClass#a', call_info.call_sequence)
78
- assert_equal(3, call_info.children.length)
79
-
80
- # Check Kernel#sleep
81
- method = methods[2]
82
- assert_equal('Kernel#sleep', method.full_name)
83
- assert_equal(4, method.called)
84
- assert_in_delta(8, method.total_time, 0.05)
85
- assert_in_delta(0, method.wait_time, 0.01)
86
- assert_in_delta(8, method.self_time, 0.05)
87
- assert_in_delta(0, method.children_time, 0.05)
88
- assert_equal(4, method.call_infos.length)
89
-
90
- call_info = method.call_infos[0]
91
- assert_equal('StackTest#test_call_sequence->StackClass#a->Kernel#sleep', call_info.call_sequence)
92
- assert_equal(0, call_info.children.length)
93
-
94
- call_info = method.call_infos[1]
95
- assert_equal('StackTest#test_call_sequence->StackClass#a->StackClass#b->Kernel#sleep', call_info.call_sequence)
96
- assert_equal(0, call_info.children.length)
97
-
98
- call_info = method.call_infos[2]
99
- assert_equal('StackTest#test_call_sequence->StackClass#a->StackClass#c->Kernel#sleep', call_info.call_sequence)
100
- assert_equal(0, call_info.children.length)
101
-
102
- call_info = method.call_infos[3]
103
- assert_equal('StackTest#test_call_sequence->StackClass#a->StackClass#c->StackClass#b->Kernel#sleep', call_info.call_sequence)
104
- assert_equal(0, call_info.children.length)
105
-
106
- # Check StackClass#c
107
- method = methods[3]
108
- assert_equal('StackClass#c', method.full_name)
109
- assert_equal(1, method.called)
110
- assert_in_delta(5, method.total_time, 0.05)
111
- assert_in_delta(0, method.wait_time, 0.01)
112
- assert_in_delta(0, method.self_time, 0.01)
113
- assert_in_delta(5, method.children_time, 0.05)
114
- assert_equal(1, method.call_infos.length)
115
-
116
- call_info = method.call_infos[0]
117
- assert_equal('StackTest#test_call_sequence->StackClass#a->StackClass#c', call_info.call_sequence)
118
- assert_equal(2, call_info.children.length)
119
-
120
- # Check StackClass#b
121
- method = methods[4]
122
- assert_equal('StackClass#b', method.full_name)
123
- assert_equal(2, method.called)
124
- assert_in_delta(4, method.total_time, 0.05)
125
- assert_in_delta(0, method.wait_time, 0.01)
126
- assert_in_delta(0, method.self_time, 0.01)
127
- assert_in_delta(4, method.children_time, 0.05)
128
- assert_equal(2, method.call_infos.length)
129
-
130
- call_info = method.call_infos[0]
131
- assert_equal('StackTest#test_call_sequence->StackClass#a->StackClass#b', call_info.call_sequence)
132
- assert_equal(1, call_info.children.length)
133
-
134
- call_info = method.call_infos[1]
135
- assert_equal('StackTest#test_call_sequence->StackClass#a->StackClass#c->StackClass#b', call_info.call_sequence)
136
- assert_equal(1, call_info.children.length)
137
- end
138
- end