ruby-prof 0.8.1-x86-mingw32 → 0.11.0.rc1-x86-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.
- data/CHANGES +89 -13
- data/LICENSE +4 -3
- data/{README → README.rdoc} +155 -162
- data/Rakefile +50 -123
- data/bin/ruby-prof +86 -47
- data/examples/empty.png +0 -0
- data/examples/graph.dot +106 -0
- data/examples/graph.png +0 -0
- data/examples/minus.png +0 -0
- data/examples/multi.flat.txt +23 -0
- data/examples/multi.graph.html +906 -0
- data/examples/multi.grind.dat +194 -0
- data/examples/multi.stack.html +573 -0
- data/examples/plus.png +0 -0
- data/examples/stack.html +573 -0
- data/ext/ruby_prof/extconf.rb +53 -0
- data/ext/ruby_prof/rp_call_info.c +369 -0
- data/ext/ruby_prof/rp_call_info.h +46 -0
- data/ext/ruby_prof/rp_measure.c +48 -0
- data/ext/ruby_prof/rp_measure.h +45 -0
- data/ext/ruby_prof/rp_measure_allocations.c +86 -0
- data/ext/ruby_prof/rp_measure_cpu_time.c +112 -0
- data/ext/ruby_prof/rp_measure_gc_runs.c +87 -0
- data/ext/ruby_prof/rp_measure_gc_time.c +73 -0
- data/ext/ruby_prof/rp_measure_memory.c +81 -0
- data/ext/ruby_prof/rp_measure_process_time.c +71 -0
- data/ext/ruby_prof/rp_measure_wall_time.c +42 -0
- data/ext/ruby_prof/rp_method.c +363 -0
- data/ext/ruby_prof/rp_method.h +55 -0
- data/ext/ruby_prof/rp_stack.c +61 -0
- data/ext/ruby_prof/rp_stack.h +40 -0
- data/ext/ruby_prof/rp_thread.c +113 -0
- data/ext/ruby_prof/rp_thread.h +20 -0
- data/ext/ruby_prof/ruby_prof.c +332 -1377
- data/ext/ruby_prof/ruby_prof.h +54 -188
- data/ext/ruby_prof/version.h +6 -3
- data/lib/1.8/ruby_prof.so +0 -0
- data/lib/1.9/ruby_prof.exp +0 -0
- data/lib/1.9/ruby_prof.ilk +0 -0
- data/lib/1.9/ruby_prof.lib +0 -0
- data/lib/1.9/ruby_prof.pdb +0 -0
- data/lib/1.9/ruby_prof.so +0 -0
- data/lib/ruby-prof.rb +32 -18
- data/lib/ruby-prof/abstract_printer.rb +15 -5
- data/lib/ruby-prof/aggregate_call_info.rb +11 -3
- data/lib/ruby-prof/call_info.rb +68 -1
- data/lib/ruby-prof/call_stack_printer.rb +775 -0
- data/lib/ruby-prof/call_tree_printer.rb +17 -9
- data/lib/ruby-prof/compatibility.rb +134 -0
- data/lib/ruby-prof/dot_printer.rb +152 -0
- data/lib/ruby-prof/empty.png +0 -0
- data/lib/ruby-prof/flat_printer.rb +23 -24
- data/lib/ruby-prof/flat_printer_with_line_numbers.rb +17 -21
- data/lib/ruby-prof/graph_html_printer.rb +69 -39
- data/lib/ruby-prof/graph_printer.rb +35 -35
- data/lib/ruby-prof/method_info.rb +26 -4
- data/lib/ruby-prof/minus.png +0 -0
- data/lib/ruby-prof/multi_printer.rb +56 -0
- data/lib/ruby-prof/plus.png +0 -0
- data/lib/ruby-prof/profile.rb +72 -0
- data/lib/ruby-prof/rack.rb +31 -0
- data/lib/ruby-prof/symbol_to_proc.rb +3 -1
- data/lib/ruby-prof/task.rb +20 -19
- data/lib/ruby-prof/test.rb +5 -3
- data/lib/ruby_prof.exp +0 -0
- data/lib/ruby_prof.ilk +0 -0
- data/lib/ruby_prof.lib +0 -0
- data/lib/ruby_prof.pdb +0 -0
- data/lib/ruby_prof.so +0 -0
- data/lib/unprof.rb +2 -0
- data/test/aggregate_test.rb +29 -14
- data/test/basic_test.rb +3 -251
- data/test/bug_test.rb +6 -0
- data/test/duplicate_names_test.rb +4 -4
- data/test/dynamic_method_test.rb +61 -0
- data/test/enumerable_test.rb +4 -4
- data/test/exceptions_test.rb +6 -5
- data/test/exclude_threads_test.rb +47 -47
- data/test/exec_test.rb +5 -5
- data/test/line_number_test.rb +16 -16
- data/test/measure_allocations_test.rb +25 -0
- data/test/measure_cpu_time_test.rb +212 -0
- data/test/measure_gc_runs_test.rb +29 -0
- data/test/measure_gc_time_test.rb +29 -0
- data/test/measure_memory_test.rb +36 -0
- data/test/measure_process_time_test.rb +205 -0
- data/test/measure_wall_time_test.rb +209 -0
- data/test/method_elimination_test.rb +74 -0
- data/test/module_test.rb +12 -21
- data/test/multi_printer_test.rb +81 -0
- data/test/no_method_class_test.rb +5 -3
- data/test/prime.rb +7 -10
- data/test/prime_test.rb +3 -3
- data/test/printers_test.rb +180 -54
- data/test/recursive_test.rb +34 -72
- data/test/singleton_test.rb +5 -4
- data/test/stack_printer_test.rb +73 -0
- data/test/stack_test.rb +7 -7
- data/test/start_stop_test.rb +23 -6
- data/test/test_helper.rb +81 -0
- data/test/test_suite.rb +35 -21
- data/test/thread_test.rb +40 -39
- data/test/unique_call_path_test.rb +6 -6
- metadata +106 -51
- data/ext/ruby_prof/measure_allocations.h +0 -58
- data/ext/ruby_prof/measure_cpu_time.h +0 -152
- data/ext/ruby_prof/measure_gc_runs.h +0 -76
- data/ext/ruby_prof/measure_gc_time.h +0 -57
- data/ext/ruby_prof/measure_memory.h +0 -101
- data/ext/ruby_prof/measure_process_time.h +0 -52
- data/ext/ruby_prof/measure_wall_time.h +0 -53
- data/ext/ruby_prof/mingw/Rakefile +0 -23
- data/ext/ruby_prof/mingw/build.rake +0 -38
- data/rails/environment/profile.rb +0 -24
- data/rails/example/example_test.rb +0 -9
- data/rails/profile_test_helper.rb +0 -21
- data/test/current_failures_windows +0 -8
- data/test/measurement_test.rb +0 -121
- data/test/ruby-prof-bin +0 -20
data/test/singleton_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
2
3
|
|
3
|
-
require '
|
4
|
-
require 'ruby-prof'
|
4
|
+
require File.expand_path('../test_helper', __FILE__)
|
5
5
|
require 'timeout'
|
6
6
|
|
7
7
|
# -- Test for bug [#5657]
|
@@ -32,6 +32,7 @@ class SingletonTest < Test::Unit::TestCase
|
|
32
32
|
assert_equal(1, a.as.size)
|
33
33
|
end
|
34
34
|
printer = RubyProf::FlatPrinter.new(result)
|
35
|
-
|
35
|
+
output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : ''
|
36
|
+
printer.print(output)
|
36
37
|
end
|
37
|
-
end
|
38
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.expand_path('../test_helper', __FILE__)
|
5
|
+
require 'tmpdir'
|
6
|
+
|
7
|
+
# Test data
|
8
|
+
# A
|
9
|
+
# / \
|
10
|
+
# B C
|
11
|
+
# \
|
12
|
+
# B
|
13
|
+
|
14
|
+
class STPT
|
15
|
+
def a
|
16
|
+
100.times{b}
|
17
|
+
300.times{c}
|
18
|
+
c;c;c
|
19
|
+
end
|
20
|
+
|
21
|
+
def b
|
22
|
+
sleep 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def c
|
26
|
+
5.times{b}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class StackPrinterTest < Test::Unit::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_stack_can_be_printed
|
37
|
+
start_time = Time.now
|
38
|
+
RubyProf.start
|
39
|
+
5.times{STPT.new.a}
|
40
|
+
result = RubyProf.stop
|
41
|
+
end_time = Time.now
|
42
|
+
expected_time = end_time - start_time
|
43
|
+
|
44
|
+
file_contents = nil
|
45
|
+
assert_nothing_raised { file_contents = print(result) }
|
46
|
+
assert file_contents =~ /Thread: (\d+) \(100\.00% ~ ([.0-9]+)\)/
|
47
|
+
actual_time = $2.to_f
|
48
|
+
assert_in_delta(expected_time, actual_time, 0.01)
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_method_elimination
|
52
|
+
RubyProf.start
|
53
|
+
5.times{STPT.new.a}
|
54
|
+
result = RubyProf.stop
|
55
|
+
assert_nothing_raised {
|
56
|
+
# result.dump
|
57
|
+
result.eliminate_methods!([/Integer#times/])
|
58
|
+
# $stderr.puts "================================"
|
59
|
+
# result.dump
|
60
|
+
print(result)
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
def print(result)
|
66
|
+
test = caller.first =~ /in `(.*)'/ ? $1 : "test"
|
67
|
+
testfile_name = "#{Dir::tmpdir}/ruby_prof_#{test}.html"
|
68
|
+
printer = RubyProf::CallStackPrinter.new(result)
|
69
|
+
File.open(testfile_name, "w") {|f| printer.print(f, :threshold => 0, :min_percent => 0, :title => "ruby_prof #{test}")}
|
70
|
+
system("open '#{testfile_name}'") if RUBY_PLATFORM =~ /darwin/ && ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT']=="1"
|
71
|
+
File.open(testfile_name, "r"){|f| f.read}
|
72
|
+
end
|
73
|
+
end
|
data/test/stack_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
2
3
|
|
3
|
-
require '
|
4
|
-
require 'ruby-prof'
|
4
|
+
require File.expand_path('../test_helper', __FILE__)
|
5
5
|
|
6
6
|
# Test data
|
7
7
|
# A
|
@@ -76,7 +76,7 @@ class StackTest < Test::Unit::TestCase
|
|
76
76
|
call_info = method.call_infos[0]
|
77
77
|
assert_equal('StackTest#test_call_sequence->StackClass#a', call_info.call_sequence)
|
78
78
|
assert_equal(3, call_info.children.length)
|
79
|
-
|
79
|
+
|
80
80
|
# Check Kernel#sleep
|
81
81
|
method = methods[2]
|
82
82
|
assert_equal('Kernel#sleep', method.full_name)
|
@@ -107,10 +107,10 @@ class StackTest < Test::Unit::TestCase
|
|
107
107
|
method = methods[3]
|
108
108
|
assert_equal('StackClass#c', method.full_name)
|
109
109
|
assert_equal(1, method.called)
|
110
|
-
assert_in_delta(5, method.total_time, 0.
|
110
|
+
assert_in_delta(5, method.total_time, 0.05)
|
111
111
|
assert_in_delta(0, method.wait_time, 0.01)
|
112
112
|
assert_in_delta(0, method.self_time, 0.01)
|
113
|
-
assert_in_delta(5, method.children_time, 0.
|
113
|
+
assert_in_delta(5, method.children_time, 0.05)
|
114
114
|
assert_equal(1, method.call_infos.length)
|
115
115
|
|
116
116
|
call_info = method.call_infos[0]
|
@@ -121,10 +121,10 @@ class StackTest < Test::Unit::TestCase
|
|
121
121
|
method = methods[4]
|
122
122
|
assert_equal('StackClass#b', method.full_name)
|
123
123
|
assert_equal(2, method.called)
|
124
|
-
assert_in_delta(4, method.total_time, 0.
|
124
|
+
assert_in_delta(4, method.total_time, 0.05)
|
125
125
|
assert_in_delta(0, method.wait_time, 0.01)
|
126
126
|
assert_in_delta(0, method.self_time, 0.01)
|
127
|
-
assert_in_delta(4, method.children_time, 0.
|
127
|
+
assert_in_delta(4, method.children_time, 0.05)
|
128
128
|
assert_equal(2, method.call_infos.length)
|
129
129
|
|
130
130
|
call_info = method.call_infos[0]
|
data/test/start_stop_test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
5
|
|
3
|
-
require 'test/unit'
|
4
|
-
require 'ruby-prof'
|
5
|
-
|
6
6
|
class StartStopTest < Test::Unit::TestCase
|
7
7
|
def setup
|
8
8
|
# Need to use wall time for this test due to the sleep calls
|
@@ -22,6 +22,23 @@ class StartStopTest < Test::Unit::TestCase
|
|
22
22
|
sleep(2)
|
23
23
|
@result = RubyProf.stop
|
24
24
|
end
|
25
|
+
|
26
|
+
def test_extra_stop_should_raise
|
27
|
+
RubyProf.start
|
28
|
+
assert_raise(RuntimeError) do
|
29
|
+
RubyProf.start
|
30
|
+
end
|
31
|
+
|
32
|
+
assert_raise(RuntimeError) do
|
33
|
+
RubyProf.profile {}
|
34
|
+
end
|
35
|
+
|
36
|
+
RubyProf.stop # ok
|
37
|
+
assert_raise(RuntimeError) do
|
38
|
+
RubyProf.stop
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
25
42
|
|
26
43
|
def test_different_methods
|
27
44
|
method1
|
@@ -56,10 +73,10 @@ class StartStopTest < Test::Unit::TestCase
|
|
56
73
|
method = methods[1]
|
57
74
|
assert_equal('StartStopTest#method2', method.full_name)
|
58
75
|
assert_equal(1, method.called)
|
59
|
-
assert_in_delta(2, method.total_time, 0.
|
76
|
+
assert_in_delta(2, method.total_time, 0.05)
|
60
77
|
assert_in_delta(0, method.wait_time, 0.01)
|
61
78
|
assert_in_delta(0, method.self_time, 0.01)
|
62
|
-
assert_in_delta(2, method.children_time, 0.
|
79
|
+
assert_in_delta(2, method.children_time, 0.05)
|
63
80
|
assert_equal(1, method.call_infos.length)
|
64
81
|
|
65
82
|
call_info = method.call_infos[0]
|
@@ -92,4 +109,4 @@ class StartStopTest < Test::Unit::TestCase
|
|
92
109
|
assert_equal('StartStopTest#method1->StartStopTest#method2->StartStopTest#method3->Kernel#sleep', call_info.call_sequence)
|
93
110
|
assert_equal(0, call_info.children.length)
|
94
111
|
end
|
95
|
-
end
|
112
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
# Make RubyMine happy
|
4
|
+
if ENV["RM_INFO"] || ENV["TEAMCITY_VERSION"]
|
5
|
+
gem 'win32console'
|
6
|
+
gem 'minitest-reporters'
|
7
|
+
require 'minitest/reporters'
|
8
|
+
MiniTest::Unit.runner = MiniTest::SuiteRunner.new
|
9
|
+
MiniTest::Unit.runner.reporters << MiniTest::Reporters::RubyMineReporter.new
|
10
|
+
end
|
11
|
+
|
12
|
+
# To make testing/debugging easier, test within this source tree versus an installed gem
|
13
|
+
|
14
|
+
dir = File.dirname(__FILE__)
|
15
|
+
root = File.expand_path(File.join(dir, '..'))
|
16
|
+
lib = File.expand_path(File.join(root, 'lib'))
|
17
|
+
ext = File.expand_path(File.join(root, 'ext', 'ruby_prof'))
|
18
|
+
|
19
|
+
$LOAD_PATH << lib
|
20
|
+
$LOAD_PATH << ext
|
21
|
+
|
22
|
+
require 'ruby-prof'
|
23
|
+
require 'test/unit'
|
24
|
+
require File.expand_path('../prime', __FILE__)
|
25
|
+
|
26
|
+
# Some classes used in measurement tests
|
27
|
+
module RubyProf
|
28
|
+
class C1
|
29
|
+
def C1.hello
|
30
|
+
sleep(0.1)
|
31
|
+
end
|
32
|
+
|
33
|
+
def hello
|
34
|
+
sleep(0.2)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module M1
|
39
|
+
def hello
|
40
|
+
sleep(0.3)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class C2
|
45
|
+
include M1
|
46
|
+
extend M1
|
47
|
+
end
|
48
|
+
|
49
|
+
class C3
|
50
|
+
def hello
|
51
|
+
sleep(0.4)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
module M4
|
56
|
+
def hello
|
57
|
+
sleep(0.5)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
module M5
|
62
|
+
include M4
|
63
|
+
def goodbye
|
64
|
+
hello
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class C6
|
69
|
+
include M5
|
70
|
+
def test
|
71
|
+
goodbye
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
if RUBY_VERSION < '1.9'
|
76
|
+
PARENT = Object
|
77
|
+
else
|
78
|
+
PARENT = BasicObject
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
data/test/test_suite.rb
CHANGED
@@ -1,23 +1,37 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
2
|
|
3
|
-
require
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
3
|
+
require File.expand_path("../test_helper", __FILE__)
|
4
|
+
|
5
|
+
%w(aggregate_test
|
6
|
+
basic_test
|
7
|
+
duplicate_names_test
|
8
|
+
dynamic_method_test
|
9
|
+
enumerable_test
|
10
|
+
exceptions_test
|
11
|
+
exclude_threads_test
|
12
|
+
line_number_test
|
13
|
+
|
14
|
+
measure_allocations_test
|
15
|
+
measure_cpu_time_test
|
16
|
+
measure_gc_runs_test
|
17
|
+
measure_gc_time_test
|
18
|
+
measure_memory_test
|
19
|
+
measure_process_time_test
|
20
|
+
measure_wall_time_test
|
21
|
+
|
22
|
+
method_elimination_test
|
23
|
+
module_test
|
24
|
+
multi_printer_test
|
25
|
+
no_method_class_test
|
26
|
+
prime_test
|
27
|
+
printers_test
|
28
|
+
recursive_test
|
29
|
+
singleton_test
|
30
|
+
stack_test
|
31
|
+
stack_printer_test
|
32
|
+
start_stop_test
|
33
|
+
thread_test
|
34
|
+
unique_call_path_test).each do |test|
|
35
|
+
require File.expand_path("../#{test}", __FILE__)
|
36
|
+
end
|
19
37
|
|
20
|
-
# Can't use this one here cause it breaks
|
21
|
-
# the rest of the unit tets (Ruby Prof gets
|
22
|
-
# started twice).
|
23
|
-
#require 'profile_unit_test'
|
data/test/thread_test.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.expand_path('../test_helper', __FILE__)
|
4
5
|
require 'timeout'
|
5
6
|
|
6
7
|
# -- Tests ----
|
@@ -21,11 +22,11 @@ class ThreadTest < Test::Unit::TestCase
|
|
21
22
|
result = RubyProf.stop
|
22
23
|
assert_equal(2, result.threads.keys.length) # this should pass...
|
23
24
|
end
|
24
|
-
|
25
|
+
|
25
26
|
def test_thread_identity
|
26
27
|
RubyProf.start
|
27
28
|
thread = Thread.new do
|
28
|
-
sleep(1)
|
29
|
+
sleep(1)
|
29
30
|
end
|
30
31
|
thread.join
|
31
32
|
result = RubyProf.stop
|
@@ -36,16 +37,16 @@ class ThreadTest < Test::Unit::TestCase
|
|
36
37
|
|
37
38
|
assert(thread_ids.include?(threads[0].object_id))
|
38
39
|
assert(thread_ids.include?(threads[1].object_id))
|
39
|
-
|
40
|
+
|
40
41
|
assert_instance_of(Thread, ObjectSpace._id2ref(thread_ids[0]))
|
41
42
|
assert(threads.include?(ObjectSpace._id2ref(thread_ids[0])))
|
42
|
-
|
43
|
+
|
43
44
|
assert_instance_of(Thread, ObjectSpace._id2ref(thread_ids[1]))
|
44
45
|
assert(threads.include?(ObjectSpace._id2ref(thread_ids[1])))
|
45
46
|
end
|
46
47
|
|
47
48
|
def test_thread_timings
|
48
|
-
|
49
|
+
RubyProf.start
|
49
50
|
thread = Thread.new do
|
50
51
|
sleep 0 # force it to hit thread.join, below, first
|
51
52
|
# thus forcing sleep(1), below, to be counted as (wall) self_time
|
@@ -55,7 +56,7 @@ class ThreadTest < Test::Unit::TestCase
|
|
55
56
|
end
|
56
57
|
thread.join
|
57
58
|
result = RubyProf.stop
|
58
|
-
|
59
|
+
|
59
60
|
# Check background thread
|
60
61
|
assert_equal(2, result.threads.length)
|
61
62
|
methods = result.threads[thread.object_id].sort.reverse
|
@@ -65,9 +66,9 @@ class ThreadTest < Test::Unit::TestCase
|
|
65
66
|
assert_equal('ThreadTest#test_thread_timings', method.full_name)
|
66
67
|
assert_equal(1, method.called)
|
67
68
|
assert_in_delta(1, method.total_time, 0.05)
|
68
|
-
assert_in_delta(0, method.self_time, 0.
|
69
|
-
assert_in_delta(0, method.wait_time, 0.
|
70
|
-
assert_in_delta(1, method.children_time, 0.
|
69
|
+
assert_in_delta(0, method.self_time, 0.05)
|
70
|
+
assert_in_delta(0, method.wait_time, 0.05)
|
71
|
+
assert_in_delta(1, method.children_time, 0.05)
|
71
72
|
assert_equal(1, method.call_infos.length)
|
72
73
|
call_info = method.call_infos[0]
|
73
74
|
assert_equal('ThreadTest#test_thread_timings', call_info.call_sequence)
|
@@ -76,10 +77,10 @@ class ThreadTest < Test::Unit::TestCase
|
|
76
77
|
method = methods[1]
|
77
78
|
assert_equal('Kernel#sleep', method.full_name)
|
78
79
|
assert_equal(2, method.called)
|
79
|
-
assert_in_delta(1, method.total_time, 0.
|
80
|
-
assert_in_delta(1.0, method.self_time, 0.
|
81
|
-
assert_in_delta(0, method.wait_time, 0.
|
82
|
-
assert_in_delta(0, method.children_time, 0.
|
80
|
+
assert_in_delta(1, method.total_time, 0.05)
|
81
|
+
assert_in_delta(1.0, method.self_time, 0.05)
|
82
|
+
assert_in_delta(0, method.wait_time, 0.05)
|
83
|
+
assert_in_delta(0, method.children_time, 0.05)
|
83
84
|
|
84
85
|
assert_equal(1, method.call_infos.length)
|
85
86
|
call_info = method.call_infos[0]
|
@@ -96,11 +97,11 @@ class ThreadTest < Test::Unit::TestCase
|
|
96
97
|
# the sub calls to Object#new, when popped,
|
97
98
|
# cause the parent frame to be created for method #test_thread_timings, which means a +1 when it's popped in the end
|
98
99
|
# xxxx a test that shows it the other way, too (never creates parent frame--if that's even possible)
|
99
|
-
assert_equal(1, method.called)
|
100
|
-
assert_in_delta(1, method.total_time, 0.
|
100
|
+
assert_equal(1, method.called)
|
101
|
+
assert_in_delta(1, method.total_time, 0.05)
|
101
102
|
assert_in_delta(0, method.self_time, 0.05)
|
102
103
|
assert_in_delta(0, method.wait_time, 0.05)
|
103
|
-
assert_in_delta(1, method.children_time, 0.
|
104
|
+
assert_in_delta(1, method.children_time, 0.05)
|
104
105
|
|
105
106
|
assert_equal(1, method.call_infos.length)
|
106
107
|
call_info = method.call_infos[0]
|
@@ -110,10 +111,10 @@ class ThreadTest < Test::Unit::TestCase
|
|
110
111
|
method = methods[1]
|
111
112
|
assert_equal('Thread#join', method.full_name)
|
112
113
|
assert_equal(1, method.called)
|
113
|
-
assert_in_delta(1, method.total_time, 0.
|
114
|
-
assert_in_delta(0, method.self_time, 0.
|
115
|
-
assert_in_delta(1.0, method.wait_time, 0.
|
116
|
-
assert_in_delta(0, method.children_time, 0.
|
114
|
+
assert_in_delta(1, method.total_time, 0.05)
|
115
|
+
assert_in_delta(0, method.self_time, 0.05)
|
116
|
+
assert_in_delta(1.0, method.wait_time, 0.05)
|
117
|
+
assert_in_delta(0, method.children_time, 0.05)
|
117
118
|
|
118
119
|
assert_equal(1, method.call_infos.length)
|
119
120
|
call_info = method.call_infos[0]
|
@@ -123,10 +124,10 @@ class ThreadTest < Test::Unit::TestCase
|
|
123
124
|
method = methods[2]
|
124
125
|
assert_equal('<Class::Thread>#new', method.full_name)
|
125
126
|
assert_equal(1, method.called)
|
126
|
-
assert_in_delta(0, method.total_time, 0.
|
127
|
-
assert_in_delta(0, method.self_time, 0.
|
128
|
-
assert_in_delta(0, method.wait_time, 0.
|
129
|
-
assert_in_delta(0, method.children_time, 0.
|
127
|
+
assert_in_delta(0, method.total_time, 0.05)
|
128
|
+
assert_in_delta(0, method.self_time, 0.05)
|
129
|
+
assert_in_delta(0, method.wait_time, 0.05)
|
130
|
+
assert_in_delta(0, method.children_time, 0.05)
|
130
131
|
|
131
132
|
assert_equal(1, method.call_infos.length)
|
132
133
|
call_info = method.call_infos[0]
|
@@ -136,28 +137,28 @@ class ThreadTest < Test::Unit::TestCase
|
|
136
137
|
method = methods[3]
|
137
138
|
assert_equal('Thread#initialize', method.full_name)
|
138
139
|
assert_equal(1, method.called)
|
139
|
-
assert_in_delta(0, method.total_time, 0.
|
140
|
-
assert_in_delta(0, method.self_time, 0.
|
141
|
-
assert_in_delta(0, method.wait_time, 0.
|
142
|
-
assert_in_delta(0, method.children_time, 0.
|
140
|
+
assert_in_delta(0, method.total_time, 0.05)
|
141
|
+
assert_in_delta(0, method.self_time, 0.05)
|
142
|
+
assert_in_delta(0, method.wait_time, 0.05)
|
143
|
+
assert_in_delta(0, method.children_time, 0.05)
|
143
144
|
|
144
145
|
assert_equal(1, method.call_infos.length)
|
145
146
|
call_info = method.call_infos[0]
|
146
147
|
assert_equal('ThreadTest#test_thread_timings-><Class::Thread>#new->Thread#initialize', call_info.call_sequence)
|
147
148
|
assert_equal(0, call_info.children.length)
|
148
149
|
end
|
149
|
-
|
150
|
+
|
150
151
|
# useless test
|
151
152
|
def test_thread_back_and_forth
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
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.
|
159
160
|
end
|
160
|
-
|
161
|
+
|
161
162
|
def test_thread
|
162
163
|
result = RubyProf.profile do
|
163
164
|
begin
|