Module: TestProf::RubyProf

Extended by:
Logging
Defined in:
lib/test_prof/ruby_prof.rb,
lib/test_prof/ruby_prof/rspec.rb,
lib/test_prof/ruby_prof/rspec_exclusions.rb

Overview

RubyProf wrapper.

Has 2 modes: global and per-example.

Example:

# To activate global profiling you can use env variable
TEST_RUBY_PROF=1 rspec ...

# or in your code
TestProf::RubyProf.run

To profile a specific examples add :rprof tag to it:

it "is doing heavy stuff", :rprof do
  ...
end

Defined Under Namespace

Modules: RSpecExclusions Classes: Configuration, Listener, Report

Constant Summary

Constants included from Logging

Logging::COLORS

Class Method Summary collapse

Methods included from Logging

log

Class Method Details

.configObject



156
157
158
# File 'lib/test_prof/ruby_prof.rb', line 156

def config
  @config ||= Configuration.new
end

.configure {|config| ... } ⇒ Object

Yields:



160
161
162
# File 'lib/test_prof/ruby_prof.rb', line 160

def configure
  yield config
end

.profileObject



180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
# File 'lib/test_prof/ruby_prof.rb', line 180

def profile
  if locked?
    log :warn, <<~MSG
      RubyProf is activated globally, you cannot generate per-example report.

      Make sure you haven't set the TEST_RUBY_PROF environmental variable.
    MSG
    return
  end

  return unless init_ruby_prof

  options = {}

  options[:include_threads] = [Thread.current] unless
    config.include_threads?
  options[:measure_mode] = config.ruby_prof_mode

  profiler = ::RubyProf::Profile.new(options)
  profiler.exclude_common_methods! if config.exclude_common_methods?

  if config.test_prof_exclusions_enabled?
    # custom test-prof exclusions
    exclude_rspec_methods(profiler)

    # custom global exclusions
    exclude_common_methods(profiler)
  end

  config.custom_exclusions.each do |klass, mids|
    profiler.exclude_methods! klass, *mids
  end

  profiler.start

  Report.new(profiler)
end

.runObject

Run RubyProf and automatically dump a report when the process exits.

Use this method to profile the whole run.



168
169
170
171
172
173
174
175
176
177
178
# File 'lib/test_prof/ruby_prof.rb', line 168

def run
  report = profile

  return unless report

  @locked = true

  log :info, "RubyProf enabled globally"

  at_exit { report.dump("total") }
end