ruby-prof 1.6.1-x64-mingw-ucrt → 1.6.2-x64-mingw-ucrt
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 +6 -0
- data/bin/ruby-prof +105 -87
- data/ext/ruby_prof/rp_call_tree.c +502 -464
- data/ext/ruby_prof/rp_call_tree.h +47 -44
- data/ext/ruby_prof/rp_call_trees.c +1 -1
- data/ext/ruby_prof/rp_method.c +35 -3
- data/ext/ruby_prof/rp_method.h +63 -62
- data/ext/ruby_prof/rp_profile.c +933 -933
- data/ext/ruby_prof/rp_thread.c +433 -420
- data/ext/ruby_prof/rp_thread.h +39 -39
- data/ext/ruby_prof/vc/ruby_prof.vcxproj +5 -2
- data/lib/3.1/ruby_prof.so +0 -0
- data/lib/3.2/ruby_prof.so +0 -0
- data/lib/ruby-prof/printers/abstract_printer.rb +1 -0
- data/lib/ruby-prof/profile.rb +70 -70
- data/lib/ruby-prof/version.rb +1 -1
- data/test/call_tree_test.rb +94 -197
- data/test/fiber_test.rb +0 -51
- data/test/gc_test.rb +0 -1
- data/test/measure_process_time_test.rb +3 -2
- data/test/merge_test.rb +146 -0
- data/test/scheduler.rb +9 -0
- data/test/test_helper.rb +7 -0
- data/test/thread_test.rb +71 -4
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b4e4760579e79fbe1f366a04b3fe39aad288034c2db4ac4683c0f892ac3b8e7
|
4
|
+
data.tar.gz: a1a82b7f129560014af92d6256f6e4a0ef06ee909cf2fff7fd643e92ab92f770
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58af0b67459d001ba4781b4d25544fb3d75d6806877c4695b2fd41357333bc5e8ba8b9425e7ed8b8f3aba6daaf00f32b5045757ca1284d1aa0eb131f51dcbbec
|
7
|
+
data.tar.gz: f3c3e5953671deca67472e3740bd5757dc2cab05cb4c364080e43d5b33803611b404351fbadf5402ad6118974957db40df3fa858d736231c3269c6a1e4d3995f
|
data/CHANGES
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
1.6.2 (2023-04-17)
|
2
|
+
=====================
|
3
|
+
* Fix Profile#merge! implementation (asksurya)
|
4
|
+
* Fix ruby-prof command line program (Charlie Savage)
|
5
|
+
* Added CMakeLists.txt file (Charlie Savage)
|
6
|
+
|
1
7
|
1.6.1 (2023-02-21)
|
2
8
|
=====================
|
3
9
|
* Fix loading C extension for MacOS (Charlie Savage)
|
data/bin/ruby-prof
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
|
3
|
+
# To make testing/debugging easier test within this source tree versus an installed gem
|
4
|
+
require 'bundler/setup'
|
5
|
+
ext_path = File.expand_path(File.join(__dir__, '..', 'ext', 'ruby_prof'))
|
6
|
+
$LOAD_PATH.unshift(File.expand_path(ext_path))
|
7
|
+
|
3
8
|
# First require ruby-prof
|
4
9
|
require 'ruby-prof'
|
5
10
|
|
@@ -16,37 +21,38 @@ module RubyProf
|
|
16
21
|
# ruby-prof [options] <script.rb> [--] [profiled-script-command-line-options]
|
17
22
|
#
|
18
23
|
# Options:
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
# multi - Creates several reports in output directory
|
24
|
+
# --allow_exceptions Raise exceptions encountered during profiling (true) or suppress them (false)
|
25
|
+
# -E, --eval-noprof=code execute the ruby statements (not profiled)
|
26
|
+
# --exclude=methods A comma separated list of methods to exclude.
|
27
|
+
# Specify instance methods via # (Integer#times)
|
28
|
+
# Specify class methods via . (Integer.superclass)
|
29
|
+
# --exclude-common Remove common methods from the profile
|
30
|
+
# -f, --file=path Output results to a file instead of standard out.
|
27
31
|
# -m, --min_percent=min_percent The minimum percent a method must take before
|
28
32
|
# being included in output reports.
|
29
33
|
# This option is not supported for call tree.
|
30
|
-
# -f, --file=path Output results to a file instead of standard out.
|
31
34
|
# --mode=measure_mode Select what ruby-prof should measure:
|
32
35
|
# wall - Wall time (default).
|
33
36
|
# process - Process time.
|
34
37
|
# allocations - Object allocations (requires patched Ruby interpreter).
|
35
38
|
# memory - Allocated memory in KB (requires patched Ruby interpreter).
|
39
|
+
# -p, --printer=printer Select a printer:
|
40
|
+
# flat - Prints a flat profile as text (default).
|
41
|
+
# graph - Prints a graph profile as text.
|
42
|
+
# graph_html - Prints a graph profile as html.
|
43
|
+
# call_tree - format for KCacheGrind
|
44
|
+
# call_stack - prints a HTML visualization of the call tree
|
45
|
+
# dot - Prints a graph profile as a dot file
|
46
|
+
# multi - Creates several reports in output directory
|
47
|
+
# -R, --require-noprof=lib require a specific library (not profiled)
|
36
48
|
# -s, --sort=sort_mode Select how ruby-prof results should be sorted:
|
37
49
|
# total - Total time
|
38
50
|
# self - Self time
|
39
51
|
# wait - Wait time
|
40
52
|
# child - Child time
|
41
|
-
# --
|
42
|
-
# -R, --require-noprof=lib require a specific library (not profiled)
|
43
|
-
# -E, --eval-noprof=code execute the ruby statements (not profiled)
|
44
|
-
# --exclude=methods A comma separated list of methods to exclude.
|
45
|
-
# Specify instance methods via # (Integer#times)
|
46
|
-
# Specify class methods via . (Integer.superclass)
|
47
|
-
# --exclude-common Remove common methods from the profile
|
48
|
-
# -h, --help Show help message
|
53
|
+
# --track_allocations Track allocations while profiling
|
49
54
|
# -v, --version version Show version (1.1.0)
|
55
|
+
# -h, --help Show help message
|
50
56
|
|
51
57
|
class Cmd
|
52
58
|
# :enddoc:
|
@@ -63,15 +69,16 @@ module RubyProf
|
|
63
69
|
|
64
70
|
def setup_options
|
65
71
|
@options = OpenStruct.new
|
66
|
-
options.printer = RubyProf::FlatPrinter
|
67
|
-
options.measure_mode = RubyProf::WALL_TIME
|
68
|
-
options.min_percent = 0
|
69
|
-
options.file = nil
|
70
72
|
options.allow_exceptions = false
|
71
|
-
options.exclude_common = false
|
72
73
|
options.exclude = Array.new
|
74
|
+
options.exclude_common = false
|
75
|
+
options.file = nil
|
76
|
+
options.measure_mode = RubyProf::WALL_TIME
|
77
|
+
options.min_percent = 0
|
73
78
|
options.pre_libs = Array.new
|
74
79
|
options.pre_execs = Array.new
|
80
|
+
options.printer = RubyProf::FlatPrinter
|
81
|
+
options.track_allocations = false
|
75
82
|
end
|
76
83
|
|
77
84
|
# This is copied from ActiveSupport:
|
@@ -118,40 +125,31 @@ module RubyProf
|
|
118
125
|
opts.separator ""
|
119
126
|
opts.separator "Options:"
|
120
127
|
|
121
|
-
opts.on('
|
122
|
-
|
123
|
-
|
124
|
-
' graph - Prints a graph profile as text.',
|
125
|
-
' graph_html - Prints a graph profile as html.',
|
126
|
-
' call_tree - format for KCacheGrind',
|
127
|
-
' call_stack - prints a HTML visualization of the call tree',
|
128
|
-
' dot - Prints a graph profile as a dot file',
|
129
|
-
' multi - Creates several reports in output directory'
|
130
|
-
) do |printer|
|
128
|
+
opts.on('--allow_exceptions', 'Raise exceptions encountered during profiling (true) or suppress them (false)') do
|
129
|
+
options.allow_exceptions = true
|
130
|
+
end
|
131
131
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
132
|
+
opts.on('-E code', '--eval-noprof=code', 'execute the ruby statements (not profiled)') do |code|
|
133
|
+
options.pre_execs << code
|
134
|
+
end
|
135
|
+
|
136
|
+
opts.on('--exclude=methods', String,
|
137
|
+
'A comma separated list of methods to exclude.',
|
138
|
+
' Specify instance methods via # (Integer#times)',
|
139
|
+
' Specify class methods via . (Integer.superclass)') do |exclude_string|
|
140
|
+
exclude_string.split(',').each do |string|
|
141
|
+
match = string.strip.match(/(.*)(#|\.)(.*)/)
|
142
|
+
klass = constantize(match[1])
|
143
|
+
if match[2] == '.'
|
144
|
+
klass = klass.singleton_class
|
145
|
+
end
|
146
|
+
method = match[3].to_sym
|
147
|
+
options.exclude << [klass, method]
|
147
148
|
end
|
148
149
|
end
|
149
150
|
|
150
|
-
opts.on('-
|
151
|
-
|
152
|
-
' being included in output reports.',
|
153
|
-
' This option is not supported for call tree.') do |min_percent|
|
154
|
-
options.min_percent = min_percent
|
151
|
+
opts.on('--exclude-common', 'Remove common methods from the profile') do
|
152
|
+
options.exclude_common = true
|
155
153
|
end
|
156
154
|
|
157
155
|
opts.on('-f path', '--file=path',
|
@@ -160,6 +158,13 @@ module RubyProf
|
|
160
158
|
options.old_wd = Dir.pwd
|
161
159
|
end
|
162
160
|
|
161
|
+
opts.on('-m min_percent', '--min_percent=min_percent', Float,
|
162
|
+
'The minimum percent a method must take before ',
|
163
|
+
' being included in output reports.',
|
164
|
+
' This option is not supported for call tree.') do |min_percent|
|
165
|
+
options.min_percent = min_percent
|
166
|
+
end
|
167
|
+
|
163
168
|
opts.on('--mode=measure_mode',
|
164
169
|
[:process, :wall, :allocations, :memory],
|
165
170
|
'Select what ruby-prof should measure:',
|
@@ -180,6 +185,39 @@ module RubyProf
|
|
180
185
|
end
|
181
186
|
end
|
182
187
|
|
188
|
+
opts.on('-p printer', '--printer=printer', [:flat, :flat_with_line_numbers, :graph, :graph_html, :call_tree, :call_stack, :dot, :multi],
|
189
|
+
'Select a printer:',
|
190
|
+
' flat - Prints a flat profile as text (default).',
|
191
|
+
' graph - Prints a graph profile as text.',
|
192
|
+
' graph_html - Prints a graph profile as html.',
|
193
|
+
' call_tree - format for KCacheGrind',
|
194
|
+
' call_stack - prints a HTML visualization of the call tree',
|
195
|
+
' dot - Prints a graph profile as a dot file',
|
196
|
+
' multi - Creates several reports in output directory'
|
197
|
+
) do |printer|
|
198
|
+
|
199
|
+
case printer
|
200
|
+
when :flat
|
201
|
+
options.printer = RubyProf::FlatPrinter
|
202
|
+
when :graph
|
203
|
+
options.printer = RubyProf::GraphPrinter
|
204
|
+
when :graph_html
|
205
|
+
options.printer = RubyProf::GraphHtmlPrinter
|
206
|
+
when :call_tree
|
207
|
+
options.printer = RubyProf::CallTreePrinter
|
208
|
+
when :call_stack
|
209
|
+
options.printer = RubyProf::CallStackPrinter
|
210
|
+
when :dot
|
211
|
+
options.printer = RubyProf::DotPrinter
|
212
|
+
when :multi
|
213
|
+
options.printer = RubyProf::MultiPrinter
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
opts.on('-R lib', '--require-noprof=lib', 'require a specific library (not profiled)') do |lib|
|
218
|
+
options.pre_libs << lib
|
219
|
+
end
|
220
|
+
|
183
221
|
opts.on('-s sort_mode', '--sort=sort_mode', [:total, :self, :wait, :child],
|
184
222
|
'Select how ruby-prof results should be sorted:',
|
185
223
|
' total - Total time',
|
@@ -199,9 +237,8 @@ module RubyProf
|
|
199
237
|
end
|
200
238
|
end
|
201
239
|
|
202
|
-
opts.
|
203
|
-
|
204
|
-
exit
|
240
|
+
opts.on('--track_allocations', 'Track allocations while profiling') do
|
241
|
+
options.track_allocations = true
|
205
242
|
end
|
206
243
|
|
207
244
|
opts.on_tail("-v version", "--version", "Show version (#{RubyProf::VERSION})") do
|
@@ -209,35 +246,9 @@ module RubyProf
|
|
209
246
|
exit
|
210
247
|
end
|
211
248
|
|
212
|
-
opts.
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
opts.on('-R lib', '--require-noprof=lib', 'require a specific library (not profiled)') do |lib|
|
217
|
-
options.pre_libs << lib
|
218
|
-
end
|
219
|
-
|
220
|
-
opts.on('-E code', '--eval-noprof=code', 'execute the ruby statements (not profiled)') do |code|
|
221
|
-
options.pre_execs << code
|
222
|
-
end
|
223
|
-
|
224
|
-
opts.on('--exclude=methods', String,
|
225
|
-
'A comma separated list of methods to exclude.',
|
226
|
-
' Specify instance methods via # (Integer#times)',
|
227
|
-
' Specify class methods via . (Integer.superclass)') do |exclude_string|
|
228
|
-
exclude_string.split(',').each do |string|
|
229
|
-
match = string.strip.match(/(.*)(#|\.)(.*)/)
|
230
|
-
klass = constantize(match[1])
|
231
|
-
if match[2] == '.'
|
232
|
-
klass = klass.singleton_class
|
233
|
-
end
|
234
|
-
method = match[3].to_sym
|
235
|
-
options.exclude << [klass, method]
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
opts.on('--exclude-common', 'Remove common methods from the profile') do
|
240
|
-
options.exclude_common = true
|
249
|
+
opts.on_tail("-h", "--help", "Show help message") do
|
250
|
+
puts opts
|
251
|
+
exit
|
241
252
|
end
|
242
253
|
end
|
243
254
|
end
|
@@ -281,12 +292,18 @@ module RubyProf
|
|
281
292
|
end
|
282
293
|
|
283
294
|
def run
|
284
|
-
|
285
|
-
|
295
|
+
profile_options = {:allow_exceptions => options.allow_exceptions,
|
296
|
+
:exclude_common => options.exclude_common,
|
297
|
+
:measure_mode => options.measure_mode,
|
298
|
+
:track_allocations => options.track_allocations}
|
299
|
+
|
300
|
+
@profile = Profile.new(**profile_options)
|
301
|
+
|
286
302
|
options.exclude.each do |klass, method|
|
287
303
|
@profile.exclude_method!(klass, method)
|
288
304
|
end
|
289
305
|
|
306
|
+
script = ARGV.shift
|
290
307
|
profile.profile do
|
291
308
|
load script
|
292
309
|
end
|
@@ -304,7 +321,8 @@ cmd = RubyProf::Cmd.new
|
|
304
321
|
at_exit {
|
305
322
|
# Create a printer
|
306
323
|
printer = cmd.options.printer.new(cmd.profile)
|
307
|
-
printer_options = {:min_percent => cmd.options.min_percent,
|
324
|
+
printer_options = {:min_percent => cmd.options.min_percent,
|
325
|
+
:sort_method => cmd.options.sort_method}
|
308
326
|
|
309
327
|
# Get output
|
310
328
|
if cmd.options.file
|