ruby-prof 0.18.0 → 1.2.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.
- checksums.yaml +4 -4
- data/CHANGES +44 -1
- data/LICENSE +2 -2
- data/README.rdoc +1 -483
- data/Rakefile +3 -6
- data/bin/ruby-prof +111 -128
- data/ext/ruby_prof/extconf.rb +6 -38
- data/ext/ruby_prof/rp_aggregate_call_tree.c +41 -0
- data/ext/ruby_prof/rp_aggregate_call_tree.h +13 -0
- data/ext/ruby_prof/rp_allocation.c +259 -0
- data/ext/ruby_prof/rp_allocation.h +31 -0
- data/ext/ruby_prof/rp_call_tree.c +353 -0
- data/ext/ruby_prof/rp_call_tree.h +43 -0
- data/ext/ruby_prof/rp_call_trees.c +266 -0
- data/ext/ruby_prof/rp_call_trees.h +29 -0
- data/ext/ruby_prof/rp_measure_allocations.c +25 -51
- data/ext/ruby_prof/rp_measure_memory.c +21 -56
- data/ext/ruby_prof/rp_measure_process_time.c +37 -43
- data/ext/ruby_prof/rp_measure_wall_time.c +40 -21
- data/ext/ruby_prof/rp_measurement.c +221 -0
- data/ext/ruby_prof/rp_measurement.h +50 -0
- data/ext/ruby_prof/rp_method.c +279 -439
- data/ext/ruby_prof/rp_method.h +33 -45
- data/ext/ruby_prof/rp_profile.c +902 -0
- data/ext/ruby_prof/rp_profile.h +36 -0
- data/ext/ruby_prof/rp_stack.c +163 -132
- data/ext/ruby_prof/rp_stack.h +18 -28
- data/ext/ruby_prof/rp_thread.c +192 -124
- data/ext/ruby_prof/rp_thread.h +18 -8
- data/ext/ruby_prof/ruby_prof.c +36 -778
- data/ext/ruby_prof/ruby_prof.h +11 -45
- data/ext/ruby_prof/vc/ruby_prof.vcxproj +18 -12
- data/lib/ruby-prof.rb +4 -21
- data/lib/ruby-prof/assets/call_stack_printer.html.erb +710 -0
- data/lib/ruby-prof/assets/call_stack_printer.png +0 -0
- data/lib/ruby-prof/assets/graph_printer.html.erb +355 -0
- data/lib/ruby-prof/call_tree.rb +57 -0
- data/lib/ruby-prof/call_tree_visitor.rb +36 -0
- data/lib/ruby-prof/compatibility.rb +37 -107
- data/lib/ruby-prof/exclude_common_methods.rb +198 -0
- data/lib/ruby-prof/measurement.rb +17 -0
- data/lib/ruby-prof/method_info.rb +47 -90
- data/lib/ruby-prof/printers/abstract_printer.rb +73 -50
- data/lib/ruby-prof/printers/call_info_printer.rb +24 -12
- data/lib/ruby-prof/printers/call_stack_printer.rb +66 -152
- data/lib/ruby-prof/printers/call_tree_printer.rb +20 -12
- data/lib/ruby-prof/printers/dot_printer.rb +5 -5
- data/lib/ruby-prof/printers/flat_printer.rb +6 -24
- data/lib/ruby-prof/printers/graph_html_printer.rb +6 -192
- data/lib/ruby-prof/printers/graph_printer.rb +11 -14
- data/lib/ruby-prof/printers/multi_printer.rb +66 -23
- data/lib/ruby-prof/profile.rb +10 -3
- data/lib/ruby-prof/thread.rb +5 -20
- data/lib/ruby-prof/version.rb +1 -1
- data/ruby-prof.gemspec +9 -2
- data/test/abstract_printer_test.rb +0 -27
- data/test/alias_test.rb +126 -0
- data/test/basic_test.rb +1 -86
- data/test/call_tree_visitor_test.rb +32 -0
- data/test/call_trees_test.rb +66 -0
- data/test/dynamic_method_test.rb +0 -2
- data/test/exclude_methods_test.rb +17 -12
- data/test/fiber_test.rb +214 -23
- data/test/gc_test.rb +105 -0
- data/test/inverse_call_tree_test.rb +175 -0
- data/test/line_number_test.rb +118 -40
- data/test/marshal_test.rb +115 -0
- data/test/measure_allocations.rb +30 -0
- data/test/measure_allocations_test.rb +361 -12
- data/test/measure_allocations_trace_test.rb +375 -0
- data/test/measure_memory_trace_test.rb +1101 -0
- data/test/measure_process_time_test.rb +757 -33
- data/test/measure_times.rb +56 -0
- data/test/measure_wall_time_test.rb +329 -149
- data/test/multi_printer_test.rb +1 -34
- data/test/pause_resume_test.rb +24 -15
- data/test/prime.rb +1 -1
- data/test/prime_script.rb +6 -0
- data/test/printer_call_stack_test.rb +28 -0
- data/test/printer_call_tree_test.rb +31 -0
- data/test/printer_flat_test.rb +68 -0
- data/test/printer_graph_html_test.rb +60 -0
- data/test/printer_graph_test.rb +41 -0
- data/test/printers_test.rb +32 -166
- data/test/printing_recursive_graph_test.rb +26 -72
- data/test/recursive_test.rb +68 -77
- data/test/stack_printer_test.rb +2 -15
- data/test/start_stop_test.rb +22 -25
- data/test/test_helper.rb +6 -261
- data/test/thread_test.rb +11 -54
- data/test/unique_call_path_test.rb +25 -107
- data/test/yarv_test.rb +1 -0
- metadata +43 -41
- data/examples/flat.txt +0 -50
- data/examples/graph.dot +0 -84
- data/examples/graph.html +0 -823
- data/examples/graph.txt +0 -139
- data/examples/multi.flat.txt +0 -23
- data/examples/multi.graph.html +0 -760
- data/examples/multi.grind.dat +0 -114
- data/examples/multi.stack.html +0 -547
- data/examples/stack.html +0 -547
- data/ext/ruby_prof/rp_call_info.c +0 -425
- data/ext/ruby_prof/rp_call_info.h +0 -53
- data/ext/ruby_prof/rp_measure.c +0 -40
- data/ext/ruby_prof/rp_measure.h +0 -45
- data/ext/ruby_prof/rp_measure_cpu_time.c +0 -136
- data/ext/ruby_prof/rp_measure_gc_runs.c +0 -73
- data/ext/ruby_prof/rp_measure_gc_time.c +0 -60
- data/lib/ruby-prof/aggregate_call_info.rb +0 -76
- data/lib/ruby-prof/assets/call_stack_printer.css.html +0 -117
- data/lib/ruby-prof/assets/call_stack_printer.js.html +0 -385
- data/lib/ruby-prof/call_info.rb +0 -115
- data/lib/ruby-prof/call_info_visitor.rb +0 -40
- data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +0 -83
- data/lib/ruby-prof/profile/exclude_common_methods.rb +0 -207
- data/lib/ruby-prof/profile/legacy_method_elimination.rb +0 -50
- data/test/aggregate_test.rb +0 -136
- data/test/block_test.rb +0 -74
- data/test/call_info_test.rb +0 -78
- data/test/call_info_visitor_test.rb +0 -31
- data/test/issue137_test.rb +0 -63
- data/test/measure_cpu_time_test.rb +0 -212
- data/test/measure_gc_runs_test.rb +0 -32
- data/test/measure_gc_time_test.rb +0 -36
- data/test/measure_memory_test.rb +0 -33
- data/test/method_elimination_test.rb +0 -84
- data/test/module_test.rb +0 -45
- 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
|
data/test/measure_memory_test.rb
DELETED
@@ -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
|
data/test/module_test.rb
DELETED
@@ -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
|
data/test/stack_test.rb
DELETED
@@ -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
|