ruby-prof 0.15.9 → 0.16.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 +27 -1
- data/README.rdoc +83 -31
- data/bin/ruby-prof +4 -4
- data/doc/LICENSE.html +1 -1
- data/doc/README_rdoc.html +92 -33
- data/doc/Rack.html +1 -1
- data/doc/Rack/RubyProf.html +17 -14
- data/doc/RubyProf.html +30 -29
- data/doc/RubyProf/AbstractPrinter.html +1 -1
- data/doc/RubyProf/AggregateCallInfo.html +1 -1
- data/doc/RubyProf/CallInfo.html +1 -1
- data/doc/RubyProf/CallInfoPrinter.html +1 -1
- data/doc/RubyProf/CallInfoVisitor.html +1 -1
- data/doc/RubyProf/CallStackPrinter.html +1 -1
- data/doc/RubyProf/CallTreePrinter.html +349 -67
- data/doc/RubyProf/Cmd.html +5 -5
- data/doc/RubyProf/DotPrinter.html +2 -2
- data/doc/RubyProf/FlatPrinter.html +1 -1
- data/doc/RubyProf/FlatPrinterWithLineNumbers.html +1 -1
- data/doc/RubyProf/GraphHtmlPrinter.html +1 -1
- data/doc/RubyProf/GraphPrinter.html +1 -1
- data/doc/RubyProf/MethodInfo.html +2 -2
- data/doc/RubyProf/MultiPrinter.html +11 -9
- data/doc/RubyProf/Profile.html +94 -44
- data/doc/RubyProf/ProfileTask.html +1 -1
- data/doc/RubyProf/Thread.html +43 -1
- data/doc/created.rid +16 -16
- data/doc/examples/flat_txt.html +1 -1
- data/doc/examples/graph_html.html +1 -1
- data/doc/examples/graph_txt.html +3 -3
- data/doc/index.html +85 -30
- data/doc/js/navigation.js.gz +0 -0
- data/doc/js/search_index.js +1 -1
- data/doc/js/search_index.js.gz +0 -0
- data/doc/js/searcher.js +2 -2
- data/doc/js/searcher.js.gz +0 -0
- data/doc/table_of_contents.html +117 -68
- data/examples/cachegrind.out.1 +114 -0
- data/examples/cachegrind.out.1.32313213 +114 -0
- data/examples/graph.txt +1 -1
- data/ext/ruby_prof/extconf.rb +6 -2
- data/ext/ruby_prof/rp_measure_cpu_time.c +29 -31
- data/ext/ruby_prof/rp_method.c +1 -1
- data/ext/ruby_prof/rp_thread.c +57 -52
- data/ext/ruby_prof/ruby_prof.c +122 -66
- data/ext/ruby_prof/ruby_prof.h +2 -0
- data/lib/ruby-prof.rb +14 -13
- data/lib/ruby-prof/assets/call_stack_printer.js.html +1 -1
- data/lib/ruby-prof/compatibility.rb +9 -8
- data/lib/ruby-prof/method_info.rb +1 -1
- data/lib/ruby-prof/printers/call_tree_printer.rb +88 -50
- data/lib/ruby-prof/printers/dot_printer.rb +1 -1
- data/lib/ruby-prof/printers/multi_printer.rb +6 -4
- data/lib/ruby-prof/profile.rb +0 -1
- data/lib/ruby-prof/rack.rb +53 -16
- data/lib/ruby-prof/thread.rb +11 -0
- data/lib/ruby-prof/version.rb +1 -1
- data/test/exclude_threads_test.rb +2 -3
- data/test/fiber_test.rb +21 -7
- data/test/measure_cpu_time_test.rb +84 -24
- data/test/multi_printer_test.rb +5 -4
- data/test/pause_resume_test.rb +7 -7
- data/test/printers_test.rb +6 -4
- data/test/rack_test.rb +26 -1
- data/test/test_helper.rb +28 -3
- data/test/thread_test.rb +1 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34157be7a5a12bf59f9a32a87772865ffdfcd4d5
|
4
|
+
data.tar.gz: b8e596d1691d4a7c06219fa565f3aa59d4c6c454
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86b2dad68efbc23d8c20d76f030cc9261ad1a6db209319d4eb18e9ad840f7c8c85d4ea08f18dc0855970d8faecbff53ae71282ddf640e9b8840622985f318bc3
|
7
|
+
data.tar.gz: f68457fd69407d964b329937f4eb87459fdb1b7a0fffc4a8f64002d6600106bc916f60a73d7edfa2e4c335fb6b44d7a76844793c7ee3f586c837fc162abd9698
|
data/CHANGES
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
-
0.16.0 (
|
1
|
+
0.16.0 (2016-08-24)
|
2
|
+
=====================
|
3
|
+
* ruby-prof can now be installed if ruby has been compiled with --disable-gems or
|
4
|
+
RUBYOPT includes --disable-gems (thx to Arthur Nogueira Neves)
|
5
|
+
* Profile.new now accepts and prefers an options hash:
|
6
|
+
- measure_mode: one of the RubyProf measure mode constants
|
7
|
+
- exclude_threads: an array of threads to ignore when collecting profile data
|
8
|
+
- include_threads: an array of threads to include when collecting profile data
|
9
|
+
- merge_fibers: whether or not to merge the profile data for all fibers under their creating thread
|
10
|
+
* overhauled printer for cachegrind profiles:
|
11
|
+
- profile data for each thread dumped to a separate file, as kcachegrind does not
|
12
|
+
fully implement the cachegrind specification
|
13
|
+
- this required a change in interface: it's now necessary to specify a directory
|
14
|
+
where to dump the cachegrind files
|
15
|
+
- naming convention for cachegrind files changed so that kcachegrind shows them
|
16
|
+
all in the open dialog
|
17
|
+
* improved Rack middleware:
|
18
|
+
- it's now possible to use the MultiPrinter
|
19
|
+
- new option ignore_existing_threads: will ignore all prexisiting threads
|
20
|
+
when profiling a request, except the thread perfoming the request.
|
21
|
+
- new option request_thread_only: will ignore all preexisting threads, but also
|
22
|
+
all threads spwaned during the execution of the rack request.
|
23
|
+
- new option merge_fibers: whether or not to merge the profile data for all fibers under their creating thread
|
24
|
+
* fixed setting threshold bug when displaying stack profiles (thx to Michal Konarski)
|
25
|
+
* code related to printing profiles is now autoloaded for efficiency (thx to Dave Gynn)
|
26
|
+
|
27
|
+
0.15.9 (2015-12-08)
|
2
28
|
======================
|
3
29
|
* rack profiler now supports lambdas for generating profile paths (thx to Jean Rougé)
|
4
30
|
* fixed a bug when printing graph profiles
|
data/README.rdoc
CHANGED
@@ -21,7 +21,7 @@ ruby-prof requires Ruby 1.9.3 or higher. Please note some ruby
|
|
21
21
|
releases have known bugs which cause ruby-prof problems, like
|
22
22
|
incorrect measurements. We suggest to use the latest minor patch level
|
23
23
|
release if possible. In particular, on the 2.1 branch of ruby you
|
24
|
-
should use 2.1.7.
|
24
|
+
should use at least 2.1.7.
|
25
25
|
|
26
26
|
If you are running Linux or Unix you'll need a C compiler so the
|
27
27
|
extension can be compiled when it is installed.
|
@@ -41,20 +41,20 @@ can compile.
|
|
41
41
|
|
42
42
|
== Usage
|
43
43
|
|
44
|
-
There are
|
45
|
-
its API.
|
44
|
+
There are three major options for running ruby-prof: via the command
|
45
|
+
line, via its convenience API or via its core API.
|
46
46
|
|
47
|
-
=== ruby-prof
|
47
|
+
=== ruby-prof Executable
|
48
48
|
|
49
49
|
The first is to use ruby-prof to run the Ruby program you want to
|
50
|
-
profile.
|
50
|
+
profile. For more information refer to the documentation of the
|
51
51
|
ruby-prof command.
|
52
52
|
|
53
53
|
|
54
|
-
=== ruby-prof API
|
54
|
+
=== ruby-prof Convenience API
|
55
55
|
|
56
|
-
The second way is to use the ruby-prof API to profile
|
57
|
-
segments of code.
|
56
|
+
The second way is to use the ruby-prof convenience API to profile
|
57
|
+
particular segments of code.
|
58
58
|
|
59
59
|
require 'ruby-prof'
|
60
60
|
|
@@ -95,8 +95,8 @@ ruby-prof also supports pausing and resuming profiling runs.
|
|
95
95
|
# ... code to profile ...
|
96
96
|
result = RubyProf.stop
|
97
97
|
|
98
|
-
Note that resume will
|
99
|
-
|
98
|
+
Note that resume will only work if start has been called previously.
|
99
|
+
In addition, resume can also take a block:
|
100
100
|
|
101
101
|
require 'ruby-prof'
|
102
102
|
|
@@ -104,13 +104,56 @@ has not yet started. In addition, resume can also take a block:
|
|
104
104
|
# ... code to profile...
|
105
105
|
end
|
106
106
|
|
107
|
-
|
107
|
+
result = RubyProf.stop
|
108
108
|
|
109
109
|
With this usage, resume will automatically call pause at the
|
110
110
|
end of the block.
|
111
111
|
|
112
|
+
=== Profiling Selected Threads (Core API)
|
113
|
+
|
114
|
+
The convenience API does not support running multiple profiles in
|
115
|
+
separate threads concurrently, but the RubyProf::Profile API does. In
|
116
|
+
fact, the convenience layer uses the Profile API internally. It all
|
117
|
+
revolves around Profile objects:
|
118
|
+
|
119
|
+
RubyProf::Profile.new::
|
120
|
+
Create a profile object given an options hash (see below)
|
121
|
+
|
122
|
+
The following options are available when creating Profile instances:
|
123
|
+
|
124
|
+
measure_mode::
|
125
|
+
One of the defined measure modes
|
126
|
+
|
127
|
+
exclude_threads::
|
128
|
+
Array of threads which should not be profiled.
|
129
|
+
|
130
|
+
include_threads::
|
131
|
+
Array of threads which should be profiled. All other threads will
|
132
|
+
be ignored.
|
133
|
+
|
134
|
+
merge_fibers::
|
135
|
+
Whether profiling data for a given thread's fibers should all be
|
136
|
+
subsumed under a single entry. Basically only useful to produce
|
137
|
+
callgrind profiles.
|
138
|
+
|
139
|
+
RubyProf::Profile#start::
|
140
|
+
Start profiling
|
141
|
+
|
142
|
+
RubyProf::Profile#pause::
|
143
|
+
Pause profiling
|
144
|
+
|
145
|
+
RubyProf::Profile#resume::
|
146
|
+
Resume profiling
|
147
|
+
|
148
|
+
RubyProf::Profile#stop::
|
149
|
+
Stop profiling and return self
|
112
150
|
|
113
|
-
|
151
|
+
RubyProf::Profile#profile::
|
152
|
+
Perform a profile run and return result. Accepts the same arguments
|
153
|
+
as RubyProf::Profile.new.
|
154
|
+
|
155
|
+
|
156
|
+
== Method Elimination
|
114
157
|
|
115
158
|
ruby-prof supports eliminating specific methods and threads from
|
116
159
|
profiling results. This is useful for reducing connectivity in the
|
@@ -136,13 +179,6 @@ regular expressions (line separated text).
|
|
136
179
|
After eliminating methods the resulting profile will appear exactly as if those methods
|
137
180
|
had been inlined at their call sites.
|
138
181
|
|
139
|
-
In a similar manner, threads can be excluded so they are not profiled at all. To do this,
|
140
|
-
pass an array of threads to exclude to ruby-prof:
|
141
|
-
|
142
|
-
RubyProf::exclude_threads = [ thread2 ]
|
143
|
-
RubyProf.start
|
144
|
-
|
145
|
-
Note that the excluded threads must be specified *before* profiling.
|
146
182
|
|
147
183
|
== Profiling Rails
|
148
184
|
|
@@ -158,7 +194,7 @@ So to profile Rails:
|
|
158
194
|
1. Create a new profile.rb environment. Make sure to turn on
|
159
195
|
<tt>cache_classes</tt> and
|
160
196
|
<tt>cache_template_loading</tt>. Otherwise your profiling results
|
161
|
-
will be
|
197
|
+
will be overwhelmed by the time Rails spends loading required
|
162
198
|
files. You should likely turn off caching.
|
163
199
|
|
164
200
|
2. Add the ruby-prof to your gemfile:
|
@@ -325,8 +361,17 @@ RubyProf::GC_RUNS::
|
|
325
361
|
is invoked during a profiling session. This support was added by
|
326
362
|
Jeremy Kemper and requires a patched Ruby interpreter. See below.
|
327
363
|
|
364
|
+
== Patching ruby
|
365
|
+
|
328
366
|
All of the patches to Ruby are included in the railsexpress patchsets
|
329
|
-
for rvm, see https://github.com/skaes/rvm-patchsets
|
367
|
+
for rvm, see https://github.com/skaes/rvm-patchsets. You can also use
|
368
|
+
these patches manually with other ruby managers (ruby-install,
|
369
|
+
ruby-build, etc.).
|
370
|
+
|
371
|
+
Note if you rebuild your ruby with patches you must uninstall and
|
372
|
+
reinstall the ruby-prof gem to take advantage of the new capabilities.
|
373
|
+
|
374
|
+
== Measure modes
|
330
375
|
|
331
376
|
To set the measurement:
|
332
377
|
|
@@ -371,16 +416,15 @@ otherwise quiescent.
|
|
371
416
|
|
372
417
|
== Multi-threaded Applications
|
373
418
|
|
374
|
-
Unfortunately, Ruby does not provide an internal API
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
operation before going to sleep.
|
419
|
+
Unfortunately, Ruby does not provide an internal API for detecting
|
420
|
+
thread context switches. As a result, the timings ruby-prof reports
|
421
|
+
for each thread may be slightly inaccurate. In particular, this will
|
422
|
+
happen for newly spawned threads that go to sleep immediately (their
|
423
|
+
first call). For instance, if you use Ruby's timeout library to wait
|
424
|
+
for 2 seconds, the 2 seconds will be assigned to the foreground thread
|
425
|
+
and not the newly created background thread. These errors can largely
|
426
|
+
be avoided if the background thread performs any operation before
|
427
|
+
going to sleep.
|
384
428
|
|
385
429
|
== Performance
|
386
430
|
|
@@ -395,6 +439,14 @@ will run three times slower.
|
|
395
439
|
|
396
440
|
See LICENSE for license information.
|
397
441
|
|
442
|
+
== API Documentation
|
443
|
+
|
444
|
+
The ruby-prof API documentation for the latest released gem version
|
445
|
+
can be found here: http://www.rubydoc.info/gems/ruby-prof/
|
446
|
+
|
447
|
+
The ruby-prof API documentation for the master branch is available
|
448
|
+
here: http://www.rubydoc.info/github/ruby-prof/ruby-prof/
|
449
|
+
|
398
450
|
== Development
|
399
451
|
|
400
452
|
Code is located at https://github.com/ruby-prof/ruby-prof
|
data/bin/ruby-prof
CHANGED
@@ -102,8 +102,8 @@ module RubyProf
|
|
102
102
|
opts.on('--mode=measure_mode',
|
103
103
|
[:process, :wall, :cpu, :allocations, :memory, :gc_runs, :gc_time],
|
104
104
|
'Select what ruby-prof should measure:',
|
105
|
-
'
|
106
|
-
'
|
105
|
+
' wall - Wall time (default).',
|
106
|
+
' process - Process time.',
|
107
107
|
' cpu - CPU time (Pentium and PowerPCs only).',
|
108
108
|
' allocations - Object allocations (requires patched Ruby interpreter).',
|
109
109
|
' memory - Allocated memory in KB (requires patched Ruby interpreter).',
|
@@ -111,10 +111,10 @@ module RubyProf
|
|
111
111
|
' gc_time - Time spent in garbage collection (requires patched Ruby interpreter).') do |measure_mode|
|
112
112
|
|
113
113
|
case measure_mode
|
114
|
-
when :process
|
115
|
-
options.measure_mode = RubyProf::PROCESS_TIME
|
116
114
|
when :wall
|
117
115
|
options.measure_mode = RubyProf::WALL_TIME
|
116
|
+
when :process
|
117
|
+
options.measure_mode = RubyProf::PROCESS_TIME
|
118
118
|
when :cpu
|
119
119
|
options.measure_mode = RubyProf::CPU_TIME
|
120
120
|
when :allocations
|
data/doc/LICENSE.html
CHANGED
@@ -108,7 +108,7 @@ DAMAGE.</p>
|
|
108
108
|
|
109
109
|
<footer id="validator-badges" role="contentinfo">
|
110
110
|
<p><a href="http://validator.w3.org/check/referer">Validate</a>
|
111
|
-
<p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.
|
111
|
+
<p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
|
112
112
|
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
113
113
|
</footer>
|
114
114
|
|
data/doc/README_rdoc.html
CHANGED
@@ -60,16 +60,20 @@
|
|
60
60
|
<li><a href="#label-Requirements">Requirements</a>
|
61
61
|
<li><a href="#label-Install">Install</a>
|
62
62
|
<li><a href="#label-Usage">Usage</a>
|
63
|
-
<li><a href="#label-ruby-prof+
|
64
|
-
<li><a href="#label-ruby-prof+API">ruby-prof API</a>
|
65
|
-
<li><a href="#label-
|
63
|
+
<li><a href="#label-ruby-prof+Executable">ruby-prof Executable</a>
|
64
|
+
<li><a href="#label-ruby-prof+Convenience+API">ruby-prof Convenience API</a>
|
65
|
+
<li><a href="#label-Profiling+Selected+Threads+-28Core+API-29">Profiling Selected Threads (Core API)</a>
|
66
|
+
<li><a href="#label-Method+Elimination">Method Elimination</a>
|
66
67
|
<li><a href="#label-Profiling+Rails">Profiling Rails</a>
|
67
68
|
<li><a href="#label-Reports">Reports</a>
|
68
69
|
<li><a href="#label-Printers">Printers</a>
|
69
70
|
<li><a href="#label-Measurements">Measurements</a>
|
71
|
+
<li><a href="#label-Patching+ruby">Patching ruby</a>
|
72
|
+
<li><a href="#label-Measure+modes">Measure modes</a>
|
70
73
|
<li><a href="#label-Multi-threaded+Applications">Multi-threaded Applications</a>
|
71
74
|
<li><a href="#label-Performance">Performance</a>
|
72
75
|
<li><a href="#label-License">License</a>
|
76
|
+
<li><a href="#label-API+Documentation">API Documentation</a>
|
73
77
|
<li><a href="#label-Development">Development</a>
|
74
78
|
</ul>
|
75
79
|
</div>
|
@@ -137,7 +141,8 @@ the KCacheGrind profiling tool.</p>
|
|
137
141
|
<p>ruby-prof requires Ruby 1.9.3 or higher. Please note some ruby releases
|
138
142
|
have known bugs which cause ruby-prof problems, like incorrect
|
139
143
|
measurements. We suggest to use the latest minor patch level release if
|
140
|
-
possible. In particular, on the 2.1 branch of ruby you should use
|
144
|
+
possible. In particular, on the 2.1 branch of ruby you should use at least
|
145
|
+
2.1.7.</p>
|
141
146
|
|
142
147
|
<p>If you are running Linux or Unix you'll need a C compiler so the
|
143
148
|
extension can be compiled when it is installed.</p>
|
@@ -158,18 +163,18 @@ can compile.</p>
|
|
158
163
|
|
159
164
|
<h2 id="label-Usage">Usage<span><a href="#label-Usage">¶</a> <a href="#top">↑</a></span></h2>
|
160
165
|
|
161
|
-
<p>There are
|
162
|
-
API.</p>
|
166
|
+
<p>There are three major options for running ruby-prof: via the command line,
|
167
|
+
via its convenience API or via its core API.</p>
|
163
168
|
|
164
|
-
<h3 id="label-ruby-prof+
|
169
|
+
<h3 id="label-ruby-prof+Executable">ruby-prof Executable<span><a href="#label-ruby-prof+Executable">¶</a> <a href="#top">↑</a></span></h3>
|
165
170
|
|
166
|
-
<p>The first is to use ruby-prof to run the Ruby program you want to profile.
|
171
|
+
<p>The first is to use ruby-prof to run the Ruby program you want to profile.
|
167
172
|
For more information refer to the documentation of the ruby-prof command.</p>
|
168
173
|
|
169
|
-
<h3 id="label-ruby-prof+API">ruby-prof API<span><a href="#label-ruby-prof+API">¶</a> <a href="#top">↑</a></span></h3>
|
174
|
+
<h3 id="label-ruby-prof+Convenience+API">ruby-prof Convenience API<span><a href="#label-ruby-prof+Convenience+API">¶</a> <a href="#top">↑</a></span></h3>
|
170
175
|
|
171
|
-
<p>The second way is to use the ruby-prof API to profile
|
172
|
-
of code.</p>
|
176
|
+
<p>The second way is to use the ruby-prof convenience API to profile
|
177
|
+
particular segments of code.</p>
|
173
178
|
|
174
179
|
<pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'ruby-prof'</span>
|
175
180
|
|
@@ -213,8 +218,8 @@ of code.</p>
|
|
213
218
|
<span class="ruby-identifier">result</span> = <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">stop</span>
|
214
219
|
</pre>
|
215
220
|
|
216
|
-
<p>Note that resume will
|
217
|
-
|
221
|
+
<p>Note that resume will only work if start has been called previously. In
|
222
|
+
addition, resume can also take a block:</p>
|
218
223
|
|
219
224
|
<pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'ruby-prof'</span>
|
220
225
|
|
@@ -222,13 +227,59 @@ yet started. In addition, resume can also take a block:</p>
|
|
222
227
|
<span class="ruby-comment"># ... code to profile...</span>
|
223
228
|
<span class="ruby-keyword">end</span>
|
224
229
|
|
225
|
-
<span class="ruby-identifier">
|
230
|
+
<span class="ruby-identifier">result</span> = <span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">stop</span>
|
226
231
|
</pre>
|
227
232
|
|
228
233
|
<p>With this usage, resume will automatically call pause at the end of the
|
229
234
|
block.</p>
|
230
235
|
|
231
|
-
<
|
236
|
+
<h3 id="label-Profiling+Selected+Threads+-28Core+API-29">Profiling Selected Threads (Core API)<span><a href="#label-Profiling+Selected+Threads+-28Core+API-29">¶</a> <a href="#top">↑</a></span></h3>
|
237
|
+
|
238
|
+
<p>The convenience API does not support running multiple profiles in separate
|
239
|
+
threads concurrently, but the <a
|
240
|
+
href="RubyProf/Profile.html">RubyProf::Profile</a> API does. In fact, the
|
241
|
+
convenience layer uses the Profile API internally. It all revolves around
|
242
|
+
Profile objects:</p>
|
243
|
+
<dl class="rdoc-list note-list"><dt><a href="RubyProf/Profile.html#method-c-new">RubyProf::Profile.new</a>
|
244
|
+
<dd>
|
245
|
+
<p>Create a profile object given an options hash (see below)</p>
|
246
|
+
|
247
|
+
<p>The following options are available when creating Profile instances:</p>
|
248
|
+
<dl class="rdoc-list note-list"><dt>measure_mode
|
249
|
+
<dd>
|
250
|
+
<p>One of the defined measure modes</p>
|
251
|
+
</dd><dt>exclude_threads
|
252
|
+
<dd>
|
253
|
+
<p>Array of threads which should not be profiled.</p>
|
254
|
+
</dd><dt>include_threads
|
255
|
+
<dd>
|
256
|
+
<p>Array of threads which should be profiled. All other threads will be
|
257
|
+
ignored.</p>
|
258
|
+
</dd><dt>merge_fibers
|
259
|
+
<dd>
|
260
|
+
<p>Whether profiling data for a given thread's fibers should all be
|
261
|
+
subsumed under a single entry. Basically only useful to produce callgrind
|
262
|
+
profiles.</p>
|
263
|
+
</dd></dl>
|
264
|
+
</dd><dt><a href="RubyProf/Profile.html#method-i-start">RubyProf::Profile#start</a>
|
265
|
+
<dd>
|
266
|
+
<p>Start profiling</p>
|
267
|
+
</dd><dt><a href="RubyProf/Profile.html#method-i-pause">RubyProf::Profile#pause</a>
|
268
|
+
<dd>
|
269
|
+
<p>Pause profiling</p>
|
270
|
+
</dd><dt><a href="RubyProf/Profile.html#method-i-resume">RubyProf::Profile#resume</a>
|
271
|
+
<dd>
|
272
|
+
<p>Resume profiling</p>
|
273
|
+
</dd><dt><a href="RubyProf/Profile.html#method-i-stop">RubyProf::Profile#stop</a>
|
274
|
+
<dd>
|
275
|
+
<p>Stop profiling and return self</p>
|
276
|
+
</dd><dt>RubyProf::Profile#profile
|
277
|
+
<dd>
|
278
|
+
<p>Perform a profile run and return result. Accepts the same arguments as <a
|
279
|
+
href="RubyProf/Profile.html#method-c-new">RubyProf::Profile.new</a>.</p>
|
280
|
+
</dd></dl>
|
281
|
+
|
282
|
+
<h2 id="label-Method+Elimination">Method Elimination<span><a href="#label-Method+Elimination">¶</a> <a href="#top">↑</a></span></h2>
|
232
283
|
|
233
284
|
<p>ruby-prof supports eliminating specific methods and threads from profiling
|
234
285
|
results. This is useful for reducing connectivity in the call graph, making
|
@@ -255,16 +306,6 @@ expressions (line separated text).</p>
|
|
255
306
|
<p>After eliminating methods the resulting profile will appear exactly as if
|
256
307
|
those methods had been inlined at their call sites.</p>
|
257
308
|
|
258
|
-
<p>In a similar manner, threads can be excluded so they are not profiled at
|
259
|
-
all. To do this, pass an array of threads to exclude to ruby-prof:</p>
|
260
|
-
|
261
|
-
<pre class="ruby"><span class="ruby-constant">RubyProf</span><span class="ruby-operator">::</span><span class="ruby-identifier">exclude_threads</span> = [ <span class="ruby-identifier">thread2</span> ]
|
262
|
-
<span class="ruby-constant">RubyProf</span>.<span class="ruby-identifier">start</span>
|
263
|
-
</pre>
|
264
|
-
|
265
|
-
<p>Note that the excluded threads must be specified <strong>before</strong>
|
266
|
-
profiling.</p>
|
267
|
-
|
268
309
|
<h2 id="label-Profiling+Rails">Profiling Rails<span><a href="#label-Profiling+Rails">¶</a> <a href="#top">↑</a></span></h2>
|
269
310
|
|
270
311
|
<p>To profile a Rails application it is vital to run it using production like
|
@@ -278,7 +319,7 @@ profile.rb.</p>
|
|
278
319
|
<ol><li>
|
279
320
|
<p>Create a new profile.rb environment. Make sure to turn on
|
280
321
|
<code>cache_classes</code> and <code>cache_template_loading</code>.
|
281
|
-
Otherwise your profiling results will be
|
322
|
+
Otherwise your profiling results will be overwhelmed by the time Rails
|
282
323
|
spends loading required files. You should likely turn off caching.</p>
|
283
324
|
</li><li>
|
284
325
|
<p>Add the ruby-prof to your gemfile:</p>
|
@@ -455,9 +496,18 @@ is invoked during a profiling session. This support was added by Jeremy
|
|
455
496
|
Kemper and requires a patched Ruby interpreter. See below.</p>
|
456
497
|
</dd></dl>
|
457
498
|
|
499
|
+
<h2 id="label-Patching+ruby">Patching ruby<span><a href="#label-Patching+ruby">¶</a> <a href="#top">↑</a></span></h2>
|
500
|
+
|
458
501
|
<p>All of the patches to Ruby are included in the railsexpress patchsets for
|
459
502
|
rvm, see <a
|
460
|
-
href="https://github.com/skaes/rvm-patchsets">github.com/skaes/rvm-patchsets</a
|
503
|
+
href="https://github.com/skaes/rvm-patchsets">github.com/skaes/rvm-patchsets</a>.
|
504
|
+
You can also use these patches manually with other ruby managers
|
505
|
+
(ruby-install, ruby-build, etc.).</p>
|
506
|
+
|
507
|
+
<p>Note if you rebuild your ruby with patches you must uninstall and reinstall
|
508
|
+
the ruby-prof gem to take advantage of the new capabilities.</p>
|
509
|
+
|
510
|
+
<h2 id="label-Measure+modes">Measure modes<span><a href="#label-Measure+modes">¶</a> <a href="#top">↑</a></span></h2>
|
461
511
|
|
462
512
|
<p>To set the measurement:</p>
|
463
513
|
|
@@ -504,11 +554,11 @@ profiling run and is otherwise quiescent.</p>
|
|
504
554
|
<h2 id="label-Multi-threaded+Applications">Multi-threaded Applications<span><a href="#label-Multi-threaded+Applications">¶</a> <a href="#top">↑</a></span></h2>
|
505
555
|
|
506
556
|
<p>Unfortunately, Ruby does not provide an internal API for detecting thread
|
507
|
-
context switches
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
557
|
+
context switches. As a result, the timings ruby-prof reports for each
|
558
|
+
thread may be slightly inaccurate. In particular, this will happen for
|
559
|
+
newly spawned threads that go to sleep immediately (their first call). For
|
560
|
+
instance, if you use Ruby's timeout library to wait for 2 seconds, the
|
561
|
+
2 seconds will be assigned to the foreground thread and not the newly
|
512
562
|
created background thread. These errors can largely be avoided if the
|
513
563
|
background thread performs any operation before going to sleep.</p>
|
514
564
|
|
@@ -524,6 +574,15 @@ programs (like the fibonacci series test) will run three times slower.</p>
|
|
524
574
|
|
525
575
|
<p>See <a href="LICENSE.html">LICENSE</a> for license information.</p>
|
526
576
|
|
577
|
+
<h2 id="label-API+Documentation">API Documentation<span><a href="#label-API+Documentation">¶</a> <a href="#top">↑</a></span></h2>
|
578
|
+
|
579
|
+
<p>The ruby-prof API documentation for the latest released gem version can be
|
580
|
+
found here: <a
|
581
|
+
href="http://www.rubydoc.info/gems/ruby-prof">www.rubydoc.info/gems/ruby-prof</a>/</p>
|
582
|
+
|
583
|
+
<p>The ruby-prof API documentation for the master branch is available here: <a
|
584
|
+
href="http://www.rubydoc.info/github/ruby-prof/ruby-prof">www.rubydoc.info/github/ruby-prof/ruby-prof</a>/</p>
|
585
|
+
|
527
586
|
<h2 id="label-Development">Development<span><a href="#label-Development">¶</a> <a href="#top">↑</a></span></h2>
|
528
587
|
|
529
588
|
<p>Code is located at <a
|
@@ -538,7 +597,7 @@ or open a github issue.</p>
|
|
538
597
|
|
539
598
|
<footer id="validator-badges" role="contentinfo">
|
540
599
|
<p><a href="http://validator.w3.org/check/referer">Validate</a>
|
541
|
-
<p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.
|
600
|
+
<p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.2.
|
542
601
|
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
543
602
|
</footer>
|
544
603
|
|