ruby-prof 0.17.0 → 0.18.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 +5 -5
- data/CHANGES +500 -482
- data/LICENSE +24 -24
- data/README.rdoc +487 -485
- data/Rakefile +113 -113
- data/bin/ruby-prof +345 -345
- data/bin/ruby-prof-check-trace +45 -45
- data/examples/flat.txt +50 -50
- data/examples/graph.dot +84 -84
- data/examples/graph.html +823 -823
- data/examples/graph.txt +139 -139
- data/examples/multi.flat.txt +23 -23
- data/examples/multi.graph.html +760 -760
- data/examples/multi.grind.dat +114 -114
- data/examples/multi.stack.html +547 -547
- data/examples/stack.html +547 -547
- data/ext/ruby_prof/extconf.rb +68 -68
- data/ext/ruby_prof/rp_call_info.c +425 -425
- data/ext/ruby_prof/rp_call_info.h +53 -53
- data/ext/ruby_prof/rp_measure.c +40 -40
- data/ext/ruby_prof/rp_measure.h +45 -45
- data/ext/ruby_prof/rp_measure_allocations.c +76 -76
- data/ext/ruby_prof/rp_measure_cpu_time.c +136 -136
- data/ext/ruby_prof/rp_measure_gc_runs.c +73 -73
- data/ext/ruby_prof/rp_measure_gc_time.c +60 -60
- data/ext/ruby_prof/rp_measure_memory.c +77 -77
- data/ext/ruby_prof/rp_measure_process_time.c +71 -71
- data/ext/ruby_prof/rp_measure_wall_time.c +45 -45
- data/ext/ruby_prof/rp_method.c +630 -636
- data/ext/ruby_prof/rp_method.h +75 -75
- data/ext/ruby_prof/rp_stack.c +173 -173
- data/ext/ruby_prof/rp_stack.h +63 -63
- data/ext/ruby_prof/rp_thread.c +277 -276
- data/ext/ruby_prof/rp_thread.h +27 -27
- data/ext/ruby_prof/ruby_prof.c +794 -774
- data/ext/ruby_prof/ruby_prof.h +60 -59
- data/ext/ruby_prof/vc/ruby_prof.sln +20 -21
- data/ext/ruby_prof/vc/{ruby_prof_20.vcxproj → ruby_prof.vcxproj} +31 -0
- data/lib/ruby-prof.rb +68 -68
- data/lib/ruby-prof/aggregate_call_info.rb +76 -76
- data/lib/ruby-prof/assets/call_stack_printer.css.html +116 -116
- data/lib/ruby-prof/assets/call_stack_printer.js.html +384 -384
- data/lib/ruby-prof/call_info.rb +115 -115
- data/lib/ruby-prof/call_info_visitor.rb +40 -40
- data/lib/ruby-prof/compatibility.rb +179 -178
- data/lib/ruby-prof/method_info.rb +121 -121
- data/lib/ruby-prof/printers/abstract_printer.rb +104 -103
- data/lib/ruby-prof/printers/call_info_printer.rb +41 -41
- data/lib/ruby-prof/printers/call_stack_printer.rb +265 -265
- data/lib/ruby-prof/printers/call_tree_printer.rb +143 -143
- data/lib/ruby-prof/printers/dot_printer.rb +132 -132
- data/lib/ruby-prof/printers/flat_printer.rb +70 -70
- data/lib/ruby-prof/printers/flat_printer_with_line_numbers.rb +83 -83
- data/lib/ruby-prof/printers/graph_html_printer.rb +249 -249
- data/lib/ruby-prof/printers/graph_printer.rb +116 -116
- data/lib/ruby-prof/printers/multi_printer.rb +84 -84
- data/lib/ruby-prof/profile.rb +26 -26
- data/lib/ruby-prof/profile/exclude_common_methods.rb +207 -201
- data/lib/ruby-prof/profile/legacy_method_elimination.rb +50 -49
- data/lib/ruby-prof/rack.rb +174 -174
- data/lib/ruby-prof/task.rb +147 -147
- data/lib/ruby-prof/thread.rb +35 -35
- data/lib/ruby-prof/version.rb +3 -3
- data/lib/unprof.rb +10 -10
- data/ruby-prof.gemspec +58 -58
- data/test/abstract_printer_test.rb +53 -0
- data/test/aggregate_test.rb +136 -136
- data/test/basic_test.rb +128 -128
- data/test/block_test.rb +74 -74
- data/test/call_info_test.rb +78 -78
- data/test/call_info_visitor_test.rb +31 -31
- data/test/duplicate_names_test.rb +32 -32
- data/test/dynamic_method_test.rb +55 -55
- data/test/enumerable_test.rb +21 -21
- data/test/exceptions_test.rb +24 -16
- data/test/exclude_methods_test.rb +146 -146
- data/test/exclude_threads_test.rb +53 -53
- data/test/fiber_test.rb +79 -79
- data/test/issue137_test.rb +63 -63
- data/test/line_number_test.rb +80 -80
- data/test/measure_allocations_test.rb +26 -26
- data/test/measure_cpu_time_test.rb +212 -213
- data/test/measure_gc_runs_test.rb +32 -32
- data/test/measure_gc_time_test.rb +36 -36
- data/test/measure_memory_test.rb +33 -33
- data/test/measure_process_time_test.rb +61 -63
- data/test/measure_wall_time_test.rb +255 -255
- data/test/method_elimination_test.rb +84 -84
- data/test/module_test.rb +45 -45
- data/test/multi_printer_test.rb +104 -104
- data/test/no_method_class_test.rb +15 -15
- data/test/pause_resume_test.rb +166 -166
- data/test/prime.rb +54 -54
- data/test/printers_test.rb +275 -275
- data/test/printing_recursive_graph_test.rb +127 -127
- data/test/rack_test.rb +157 -157
- data/test/recursive_test.rb +215 -215
- data/test/singleton_test.rb +38 -38
- data/test/stack_printer_test.rb +77 -78
- data/test/stack_test.rb +138 -138
- data/test/start_stop_test.rb +112 -112
- data/test/test_helper.rb +267 -275
- data/test/thread_test.rb +187 -187
- data/test/unique_call_path_test.rb +202 -202
- data/test/yarv_test.rb +55 -55
- metadata +17 -96
- data/doc/LICENSE.html +0 -115
- data/doc/README_rdoc.html +0 -637
- data/doc/Rack.html +0 -96
- data/doc/Rack/RubyProf.html +0 -233
- data/doc/Rack/RubyProf/RackProfiler.html +0 -343
- data/doc/RubyProf.html +0 -974
- data/doc/RubyProf/AbstractPrinter.html +0 -625
- data/doc/RubyProf/AggregateCallInfo.html +0 -552
- data/doc/RubyProf/CallInfo.html +0 -579
- data/doc/RubyProf/CallInfoPrinter.html +0 -121
- data/doc/RubyProf/CallInfoVisitor.html +0 -199
- data/doc/RubyProf/CallStackPrinter.html +0 -1127
- data/doc/RubyProf/CallTreePrinter.html +0 -725
- data/doc/RubyProf/Cmd.html +0 -637
- data/doc/RubyProf/DeprecationWarnings.html +0 -148
- data/doc/RubyProf/DotPrinter.html +0 -258
- data/doc/RubyProf/FlatPrinter.html +0 -164
- data/doc/RubyProf/FlatPrinterWithLineNumbers.html +0 -210
- data/doc/RubyProf/GraphHtmlPrinter.html +0 -558
- data/doc/RubyProf/GraphPrinter.html +0 -140
- data/doc/RubyProf/MethodInfo.html +0 -676
- data/doc/RubyProf/MultiPrinter.html +0 -574
- data/doc/RubyProf/Profile.html +0 -908
- data/doc/RubyProf/Profile/ExcludeCommonMethods.html +0 -411
- data/doc/RubyProf/Profile/LegacyMethodElimination.html +0 -158
- data/doc/RubyProf/ProfileTask.html +0 -491
- data/doc/RubyProf/Thread.html +0 -275
- data/doc/created.rid +0 -33
- data/doc/css/fonts.css +0 -167
- data/doc/css/rdoc.css +0 -590
- data/doc/examples/flat_txt.html +0 -139
- data/doc/examples/graph_html.html +0 -910
- data/doc/examples/graph_txt.html +0 -248
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -666
- data/doc/js/darkfish.js +0 -161
- data/doc/js/jquery.js +0 -4
- data/doc/js/navigation.js +0 -142
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search.js +0 -109
- data/doc/js/search_index.js +0 -1
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +0 -229
- data/doc/js/searcher.js.gz +0 -0
- data/doc/table_of_contents.html +0 -1052
- data/examples/cachegrind.out.1 +0 -114
- data/examples/cachegrind.out.1.32313213 +0 -114
- data/ext/ruby_prof/vc/ruby_prof_18.vcxproj +0 -108
- data/ext/ruby_prof/vc/ruby_prof_19.vcxproj +0 -110
@@ -1,15 +1,15 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
require File.expand_path('../test_helper', __FILE__)
|
5
|
-
|
6
|
-
# Make sure this works with no class or method
|
7
|
-
result = RubyProf.profile do
|
8
|
-
sleep 1
|
9
|
-
end
|
10
|
-
|
11
|
-
methods = result.threads.first.methods
|
12
|
-
global_method = methods.sort_by {|method| method.full_name}.first
|
13
|
-
if global_method.full_name != 'Kernel#sleep'
|
14
|
-
raise(RuntimeError, "Wrong method name. Expected: Global#[No method]. Actual: #{global_method.full_name}")
|
15
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.expand_path('../test_helper', __FILE__)
|
5
|
+
|
6
|
+
# Make sure this works with no class or method
|
7
|
+
result = RubyProf.profile do
|
8
|
+
sleep 1
|
9
|
+
end
|
10
|
+
|
11
|
+
methods = result.threads.first.methods
|
12
|
+
global_method = methods.sort_by {|method| method.full_name}.first
|
13
|
+
if global_method.full_name != 'Kernel#sleep'
|
14
|
+
raise(RuntimeError, "Wrong method name. Expected: Global#[No method]. Actual: #{global_method.full_name}")
|
15
|
+
end
|
data/test/pause_resume_test.rb
CHANGED
@@ -1,166 +1,166 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
|
-
|
4
|
-
require File.expand_path('../test_helper', __FILE__)
|
5
|
-
|
6
|
-
class PauseResumeTest < TestCase
|
7
|
-
def setup
|
8
|
-
# Need to use wall time for this test due to the sleep calls
|
9
|
-
RubyProf::measure_mode = RubyProf::WALL_TIME
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_pause_resume
|
13
|
-
# Measured
|
14
|
-
RubyProf.start
|
15
|
-
RubyProf::C1.hello
|
16
|
-
|
17
|
-
# Not measured
|
18
|
-
RubyProf.pause
|
19
|
-
sleep 1
|
20
|
-
RubyProf::C1.hello
|
21
|
-
|
22
|
-
# Measured
|
23
|
-
RubyProf.resume
|
24
|
-
RubyProf::C1.hello
|
25
|
-
|
26
|
-
result = RubyProf.stop
|
27
|
-
|
28
|
-
# Length should be 3:
|
29
|
-
# PauseResumeTest#test_pause_resume
|
30
|
-
# <Class::RubyProf::C1>#hello
|
31
|
-
# Kernel#sleep
|
32
|
-
|
33
|
-
methods = result.threads.first.methods.sort_by {|method_info| method_info.full_name}
|
34
|
-
# remove methods called by pause/resume
|
35
|
-
called_methods = ['Array#include?', 'Fixnum#==', 'Kernel#respond_to?', 'Kernel#respond_to_missing?']
|
36
|
-
methods.reject!{|m| called_methods.include?(m.full_name) }
|
37
|
-
# TODO: fix pause/resume to not include those methods in the first place
|
38
|
-
assert_equal(3, methods.length)
|
39
|
-
|
40
|
-
# Check the names
|
41
|
-
assert_equal('<Class::RubyProf::C1>#hello', methods[0].full_name)
|
42
|
-
assert_equal('Kernel#sleep', methods[1].full_name)
|
43
|
-
assert_equal('PauseResumeTest#test_pause_resume', methods[2].full_name)
|
44
|
-
|
45
|
-
# Check times
|
46
|
-
assert_in_delta(0.2, methods[0].total_time, 0.02)
|
47
|
-
assert_in_delta(0, methods[0].wait_time, 0.02)
|
48
|
-
assert_in_delta(0, methods[0].self_time, 0.02)
|
49
|
-
|
50
|
-
assert_in_delta(0.2, methods[1].total_time, 0.02)
|
51
|
-
assert_in_delta(0, methods[1].wait_time, 0.02)
|
52
|
-
assert_in_delta(0.2, methods[1].self_time, 0.02)
|
53
|
-
|
54
|
-
assert_in_delta(0.2, methods[2].total_time, 0.02)
|
55
|
-
assert_in_delta(0, methods[2].wait_time, 0.02)
|
56
|
-
assert_in_delta(0, methods[2].self_time, 0.02)
|
57
|
-
end
|
58
|
-
|
59
|
-
# pause/resume in the same frame
|
60
|
-
def test_pause_resume_1
|
61
|
-
profile = RubyProf::Profile.new
|
62
|
-
|
63
|
-
profile.start
|
64
|
-
method_1a
|
65
|
-
|
66
|
-
profile.pause
|
67
|
-
method_1b
|
68
|
-
|
69
|
-
profile.resume
|
70
|
-
method_1c
|
71
|
-
|
72
|
-
result = profile.stop
|
73
|
-
assert_in_delta(0.6, result.threads[0].methods.select{|m| m.full_name =~ /test_pause_resume_1$/}[0].total_time, 0.05)
|
74
|
-
end
|
75
|
-
def method_1a; sleep 0.2 end
|
76
|
-
def method_1b; sleep 1 end
|
77
|
-
def method_1c; sleep 0.4 end
|
78
|
-
|
79
|
-
# pause in parent frame, resume in child
|
80
|
-
def test_pause_resume_2
|
81
|
-
profile = RubyProf::Profile.new
|
82
|
-
|
83
|
-
profile.start
|
84
|
-
method_2a
|
85
|
-
|
86
|
-
profile.pause
|
87
|
-
sleep 0.5
|
88
|
-
method_2b(profile)
|
89
|
-
|
90
|
-
result = profile.stop
|
91
|
-
assert_in_delta(0.6, result.threads[0].methods.select{|m| m.full_name =~ /test_pause_resume_2$/}[0].total_time, 0.05)
|
92
|
-
end
|
93
|
-
def method_2a; sleep 0.2 end
|
94
|
-
def method_2b(profile); sleep 0.5; profile.resume; sleep 0.4 end
|
95
|
-
|
96
|
-
# pause in child frame, resume in parent
|
97
|
-
def test_pause_resume_3
|
98
|
-
profile = RubyProf::Profile.new
|
99
|
-
|
100
|
-
profile.start
|
101
|
-
method_3a(profile)
|
102
|
-
|
103
|
-
sleep 0.5
|
104
|
-
profile.resume
|
105
|
-
method_3b
|
106
|
-
|
107
|
-
result = profile.stop
|
108
|
-
assert_in_delta(0.6, result.threads[0].methods.select{|m| m.full_name =~ /test_pause_resume_3$/}[0].total_time, 0.05)
|
109
|
-
end
|
110
|
-
def method_3a(profile); sleep 0.2; profile.pause; sleep 0.5 end
|
111
|
-
def method_3b; sleep 0.4 end
|
112
|
-
|
113
|
-
def test_pause_seq
|
114
|
-
profile = RubyProf::Profile.new
|
115
|
-
profile.start ; assert !profile.paused?
|
116
|
-
profile.pause ; assert profile.paused?
|
117
|
-
profile.resume; assert !profile.paused?
|
118
|
-
profile.pause ; assert profile.paused?
|
119
|
-
profile.pause ; assert profile.paused?
|
120
|
-
profile.resume; assert !profile.paused?
|
121
|
-
profile.resume; assert !profile.paused?
|
122
|
-
profile.stop ; assert !profile.paused?
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_pause_block
|
126
|
-
profile = RubyProf::Profile.new
|
127
|
-
profile.start
|
128
|
-
profile.pause
|
129
|
-
assert profile.paused?
|
130
|
-
|
131
|
-
times_block_invoked = 0
|
132
|
-
retval= profile.resume{
|
133
|
-
times_block_invoked += 1
|
134
|
-
120 + times_block_invoked
|
135
|
-
}
|
136
|
-
assert_equal 1, times_block_invoked
|
137
|
-
assert profile.paused?
|
138
|
-
|
139
|
-
assert_equal 121, retval, "resume() should return the result of the given block."
|
140
|
-
|
141
|
-
profile.stop
|
142
|
-
end
|
143
|
-
|
144
|
-
def test_pause_block_with_error
|
145
|
-
profile = RubyProf::Profile.new
|
146
|
-
profile.start
|
147
|
-
profile.pause
|
148
|
-
assert profile.paused?
|
149
|
-
|
150
|
-
begin
|
151
|
-
profile.resume{ raise }
|
152
|
-
flunk 'Exception expected.'
|
153
|
-
rescue
|
154
|
-
assert profile.paused?
|
155
|
-
end
|
156
|
-
|
157
|
-
profile.stop
|
158
|
-
end
|
159
|
-
|
160
|
-
def test_resume_when_not_paused
|
161
|
-
profile = RubyProf::Profile.new
|
162
|
-
profile.start ; assert !profile.paused?
|
163
|
-
profile.resume; assert !profile.paused?
|
164
|
-
profile.stop ; assert !profile.paused?
|
165
|
-
end
|
166
|
-
end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
require File.expand_path('../test_helper', __FILE__)
|
5
|
+
|
6
|
+
class PauseResumeTest < TestCase
|
7
|
+
def setup
|
8
|
+
# Need to use wall time for this test due to the sleep calls
|
9
|
+
RubyProf::measure_mode = RubyProf::WALL_TIME
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_pause_resume
|
13
|
+
# Measured
|
14
|
+
RubyProf.start
|
15
|
+
RubyProf::C1.hello
|
16
|
+
|
17
|
+
# Not measured
|
18
|
+
RubyProf.pause
|
19
|
+
sleep 1
|
20
|
+
RubyProf::C1.hello
|
21
|
+
|
22
|
+
# Measured
|
23
|
+
RubyProf.resume
|
24
|
+
RubyProf::C1.hello
|
25
|
+
|
26
|
+
result = RubyProf.stop
|
27
|
+
|
28
|
+
# Length should be 3:
|
29
|
+
# PauseResumeTest#test_pause_resume
|
30
|
+
# <Class::RubyProf::C1>#hello
|
31
|
+
# Kernel#sleep
|
32
|
+
|
33
|
+
methods = result.threads.first.methods.sort_by {|method_info| method_info.full_name}
|
34
|
+
# remove methods called by pause/resume
|
35
|
+
called_methods = ['Array#include?', 'Fixnum#==', 'Kernel#respond_to?', 'Kernel#respond_to_missing?']
|
36
|
+
methods.reject!{|m| called_methods.include?(m.full_name) }
|
37
|
+
# TODO: fix pause/resume to not include those methods in the first place
|
38
|
+
assert_equal(3, methods.length)
|
39
|
+
|
40
|
+
# Check the names
|
41
|
+
assert_equal('<Class::RubyProf::C1>#hello', methods[0].full_name)
|
42
|
+
assert_equal('Kernel#sleep', methods[1].full_name)
|
43
|
+
assert_equal('PauseResumeTest#test_pause_resume', methods[2].full_name)
|
44
|
+
|
45
|
+
# Check times
|
46
|
+
assert_in_delta(0.2, methods[0].total_time, 0.02)
|
47
|
+
assert_in_delta(0, methods[0].wait_time, 0.02)
|
48
|
+
assert_in_delta(0, methods[0].self_time, 0.02)
|
49
|
+
|
50
|
+
assert_in_delta(0.2, methods[1].total_time, 0.02)
|
51
|
+
assert_in_delta(0, methods[1].wait_time, 0.02)
|
52
|
+
assert_in_delta(0.2, methods[1].self_time, 0.02)
|
53
|
+
|
54
|
+
assert_in_delta(0.2, methods[2].total_time, 0.02)
|
55
|
+
assert_in_delta(0, methods[2].wait_time, 0.02)
|
56
|
+
assert_in_delta(0, methods[2].self_time, 0.02)
|
57
|
+
end
|
58
|
+
|
59
|
+
# pause/resume in the same frame
|
60
|
+
def test_pause_resume_1
|
61
|
+
profile = RubyProf::Profile.new
|
62
|
+
|
63
|
+
profile.start
|
64
|
+
method_1a
|
65
|
+
|
66
|
+
profile.pause
|
67
|
+
method_1b
|
68
|
+
|
69
|
+
profile.resume
|
70
|
+
method_1c
|
71
|
+
|
72
|
+
result = profile.stop
|
73
|
+
assert_in_delta(0.6, result.threads[0].methods.select{|m| m.full_name =~ /test_pause_resume_1$/}[0].total_time, 0.05)
|
74
|
+
end
|
75
|
+
def method_1a; sleep 0.2 end
|
76
|
+
def method_1b; sleep 1 end
|
77
|
+
def method_1c; sleep 0.4 end
|
78
|
+
|
79
|
+
# pause in parent frame, resume in child
|
80
|
+
def test_pause_resume_2
|
81
|
+
profile = RubyProf::Profile.new
|
82
|
+
|
83
|
+
profile.start
|
84
|
+
method_2a
|
85
|
+
|
86
|
+
profile.pause
|
87
|
+
sleep 0.5
|
88
|
+
method_2b(profile)
|
89
|
+
|
90
|
+
result = profile.stop
|
91
|
+
assert_in_delta(0.6, result.threads[0].methods.select{|m| m.full_name =~ /test_pause_resume_2$/}[0].total_time, 0.05)
|
92
|
+
end
|
93
|
+
def method_2a; sleep 0.2 end
|
94
|
+
def method_2b(profile); sleep 0.5; profile.resume; sleep 0.4 end
|
95
|
+
|
96
|
+
# pause in child frame, resume in parent
|
97
|
+
def test_pause_resume_3
|
98
|
+
profile = RubyProf::Profile.new
|
99
|
+
|
100
|
+
profile.start
|
101
|
+
method_3a(profile)
|
102
|
+
|
103
|
+
sleep 0.5
|
104
|
+
profile.resume
|
105
|
+
method_3b
|
106
|
+
|
107
|
+
result = profile.stop
|
108
|
+
assert_in_delta(0.6, result.threads[0].methods.select{|m| m.full_name =~ /test_pause_resume_3$/}[0].total_time, 0.05)
|
109
|
+
end
|
110
|
+
def method_3a(profile); sleep 0.2; profile.pause; sleep 0.5 end
|
111
|
+
def method_3b; sleep 0.4 end
|
112
|
+
|
113
|
+
def test_pause_seq
|
114
|
+
profile = RubyProf::Profile.new
|
115
|
+
profile.start ; assert !profile.paused?
|
116
|
+
profile.pause ; assert profile.paused?
|
117
|
+
profile.resume; assert !profile.paused?
|
118
|
+
profile.pause ; assert profile.paused?
|
119
|
+
profile.pause ; assert profile.paused?
|
120
|
+
profile.resume; assert !profile.paused?
|
121
|
+
profile.resume; assert !profile.paused?
|
122
|
+
profile.stop ; assert !profile.paused?
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_pause_block
|
126
|
+
profile = RubyProf::Profile.new
|
127
|
+
profile.start
|
128
|
+
profile.pause
|
129
|
+
assert profile.paused?
|
130
|
+
|
131
|
+
times_block_invoked = 0
|
132
|
+
retval= profile.resume{
|
133
|
+
times_block_invoked += 1
|
134
|
+
120 + times_block_invoked
|
135
|
+
}
|
136
|
+
assert_equal 1, times_block_invoked
|
137
|
+
assert profile.paused?
|
138
|
+
|
139
|
+
assert_equal 121, retval, "resume() should return the result of the given block."
|
140
|
+
|
141
|
+
profile.stop
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_pause_block_with_error
|
145
|
+
profile = RubyProf::Profile.new
|
146
|
+
profile.start
|
147
|
+
profile.pause
|
148
|
+
assert profile.paused?
|
149
|
+
|
150
|
+
begin
|
151
|
+
profile.resume{ raise }
|
152
|
+
flunk 'Exception expected.'
|
153
|
+
rescue
|
154
|
+
assert profile.paused?
|
155
|
+
end
|
156
|
+
|
157
|
+
profile.stop
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_resume_when_not_paused
|
161
|
+
profile = RubyProf::Profile.new
|
162
|
+
profile.start ; assert !profile.paused?
|
163
|
+
profile.resume; assert !profile.paused?
|
164
|
+
profile.stop ; assert !profile.paused?
|
165
|
+
end
|
166
|
+
end
|
data/test/prime.rb
CHANGED
@@ -1,54 +1,54 @@
|
|
1
|
-
# A silly little test program that finds prime numbers. It
|
2
|
-
# is intentionally badly designed to show off the use
|
3
|
-
# of ruby-prof.
|
4
|
-
#
|
5
|
-
# Source from http://people.cs.uchicago.edu/~bomb154/154/maclabs/profilers-lab/
|
6
|
-
|
7
|
-
def make_random_array(length, maxnum)
|
8
|
-
result = Array.new(length)
|
9
|
-
result.each_index do |i|
|
10
|
-
result[i] = rand(maxnum)
|
11
|
-
end
|
12
|
-
|
13
|
-
result
|
14
|
-
end
|
15
|
-
|
16
|
-
def is_prime(x)
|
17
|
-
y = 2
|
18
|
-
y.upto(x-1) do |i|
|
19
|
-
return false if (x % i) == 0
|
20
|
-
end
|
21
|
-
true
|
22
|
-
end
|
23
|
-
|
24
|
-
def find_primes(arr)
|
25
|
-
result = arr.select do |value|
|
26
|
-
is_prime(value)
|
27
|
-
end
|
28
|
-
result
|
29
|
-
end
|
30
|
-
|
31
|
-
def find_largest(primes)
|
32
|
-
largest = primes.first
|
33
|
-
|
34
|
-
# Intentionally use upto for example purposes
|
35
|
-
# (upto is also called from is_prime)
|
36
|
-
0.upto(primes.length-1) do |i|
|
37
|
-
prime = primes[i]
|
38
|
-
if prime > largest
|
39
|
-
largest = prime
|
40
|
-
end
|
41
|
-
end
|
42
|
-
largest
|
43
|
-
end
|
44
|
-
|
45
|
-
def run_primes(length=10, maxnum=1000)
|
46
|
-
# Create random numbers
|
47
|
-
random_array = make_random_array(length, maxnum)
|
48
|
-
|
49
|
-
# Find the primes
|
50
|
-
primes = find_primes(random_array)
|
51
|
-
|
52
|
-
# Find the largest primes
|
53
|
-
find_largest(primes)
|
54
|
-
end
|
1
|
+
# A silly little test program that finds prime numbers. It
|
2
|
+
# is intentionally badly designed to show off the use
|
3
|
+
# of ruby-prof.
|
4
|
+
#
|
5
|
+
# Source from http://people.cs.uchicago.edu/~bomb154/154/maclabs/profilers-lab/
|
6
|
+
|
7
|
+
def make_random_array(length, maxnum)
|
8
|
+
result = Array.new(length)
|
9
|
+
result.each_index do |i|
|
10
|
+
result[i] = rand(maxnum)
|
11
|
+
end
|
12
|
+
|
13
|
+
result
|
14
|
+
end
|
15
|
+
|
16
|
+
def is_prime(x)
|
17
|
+
y = 2
|
18
|
+
y.upto(x-1) do |i|
|
19
|
+
return false if (x % i) == 0
|
20
|
+
end
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def find_primes(arr)
|
25
|
+
result = arr.select do |value|
|
26
|
+
is_prime(value)
|
27
|
+
end
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_largest(primes)
|
32
|
+
largest = primes.first
|
33
|
+
|
34
|
+
# Intentionally use upto for example purposes
|
35
|
+
# (upto is also called from is_prime)
|
36
|
+
0.upto(primes.length-1) do |i|
|
37
|
+
prime = primes[i]
|
38
|
+
if prime > largest
|
39
|
+
largest = prime
|
40
|
+
end
|
41
|
+
end
|
42
|
+
largest
|
43
|
+
end
|
44
|
+
|
45
|
+
def run_primes(length=10, maxnum=1000)
|
46
|
+
# Create random numbers
|
47
|
+
random_array = make_random_array(length, maxnum)
|
48
|
+
|
49
|
+
# Find the primes
|
50
|
+
primes = find_primes(random_array)
|
51
|
+
|
52
|
+
# Find the largest primes
|
53
|
+
find_largest(primes)
|
54
|
+
end
|