The call info visitor class does a depth-first traversal across a thread’s call stack. At each call_info node, the visitor executes the block provided in the visit method. The block is passed two parameters, the event and the call_info instance. Event will be either :enter or :exit.
visitor = RubyProf::CallInfoVisitor.new(result.threads.first) method_names = Array.new visitor.visit do |call_info, event| method_names << call_info.target.full_name if event == :enter end puts method_names
These methods are here for backwards compatability with previous RubyProf releases
Measurements
# File lib/ruby-prof/compatibility.rb, line 5 def self.cpu_frequency Measure::CpuTime.frequency end
# File lib/ruby-prof/compatibility.rb, line 9 def self.cpu_frequency=(value) Measure::CpuTime.frequency = value end
Returns threads ruby-prof should exclude from profiling
# File lib/ruby-prof/compatibility.rb, line 79 def self.exclude_threads @exclude_threads ||= Array.new end
Specifies what threads ruby-prof should exclude from profiling
# File lib/ruby-prof/compatibility.rb, line 88 def self.exclude_threads=(value) @exclude_threads = value end
Checks if the user specified the clock mode via the RUBY_PROF_MEASURE_MODE environment variable
# File lib/ruby-prof.rb, line 33 def self.figure_measure_mode case ENV["RUBY_PROF_MEASURE_MODE"] when "wall" || "wall_time" RubyProf.measure_mode = RubyProf::WALL_TIME when "cpu" || "cpu_time" if ENV.key?("RUBY_PROF_CPU_FREQUENCY") RubyProf.cpu_frequency = ENV["RUBY_PROF_CPU_FREQUENCY"].to_f else begin open("/proc/cpuinfo") do |f| f.each_line do |line| s = line.slice(%rcpu MHz\s*:\s*(.*)/, 1) if s RubyProf.cpu_frequency = s.to_f * 1000000 break end end end rescue Errno::ENOENT end end RubyProf.measure_mode = RubyProf::CPU_TIME when "allocations" RubyProf.measure_mode = RubyProf::ALLOCATIONS when "memory" RubyProf.measure_mode = RubyProf::MEMORY else # the default... RubyProf.measure_mode = RubyProf::PROCESS_TIME end end
# File lib/ruby-prof/compatibility.rb, line 13 def self.measure_allocations Measure::Allocations.measure end
# File lib/ruby-prof/compatibility.rb, line 17 def self.measure_cpu_time Measure::CpuTime.measure end
# File lib/ruby-prof/compatibility.rb, line 21 def self.measure_gc_runs Measure::GcRuns.measure end
# File lib/ruby-prof/compatibility.rb, line 25 def self.measure_gc_time Measure::GcTime.measure end
# File lib/ruby-prof/compatibility.rb, line 29 def self.measure_memory Measure::Memory.measure end
Returns what ruby-prof is measuring. Valid values include:
*RubyProf::PROCESS_TIME - Measure process time. This is default. It is implemented using the clock functions in the C Runtime library. *RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and GetLocalTime on Windows *RubyProf::CPU_TIME - Measure time using the CPU clock counter. This mode is only supported on Pentium or PowerPC platforms. *RubyProf::ALLOCATIONS - Measure object allocations. This requires a patched Ruby interpreter. *RubyProf::MEMORY - Measure memory size. This requires a patched Ruby interpreter. *RubyProf::GC_RUNS - Measure number of garbage collections. This requires a patched Ruby interpreter. *RubyProf::GC_TIME - Measure time spent doing garbage collection. This requires a patched Ruby interpreter.*/
# File lib/ruby-prof/compatibility.rb, line 54 def self.measure_mode @measure_mode ||= RubyProf::WALL_TIME end
Specifies what ruby-prof should measure. Valid values include:
*RubyProf::PROCESS_TIME - Measure process time. This is default. It is implemented using the clock functions in the C Runtime library. *RubyProf::WALL_TIME - Measure wall time using gettimeofday on Linx and GetLocalTime on Windows *RubyProf::CPU_TIME - Measure time using the CPU clock counter. This mode is only supported on Pentium or PowerPC platforms. *RubyProf::ALLOCATIONS - Measure object allocations. This requires a patched Ruby interpreter. *RubyProf::MEMORY - Measure memory size. This requires a patched Ruby interpreter. *RubyProf::GC_RUNS - Measure number of garbage collections. This requires a patched Ruby interpreter. *RubyProf::GC_TIME - Measure time spent doing garbage collection. This requires a patched Ruby interpreter.*/
# File lib/ruby-prof/compatibility.rb, line 70 def self.measure_mode=(value) @measure_mode = value end
# File lib/ruby-prof/compatibility.rb, line 33 def self.measure_process_time Measure::ProcessTime.measure end
# File lib/ruby-prof/compatibility.rb, line 37 def self.measure_wall_time Measure::WallTime.measure end
# File lib/ruby-prof/compatibility.rb, line 105 def self.pause ensure_running! disable_gc_stats_if_needed @profile.pause end
Profile a block
# File lib/ruby-prof/compatibility.rb, line 134 def self.profile(&block) ensure_not_running! gc_stat_was_enabled = enable_gc_stats_if_needed res = Profile.profile(self.measure_mode, self.exclude_threads, &block) disable_gc_stats_if_needed(gc_stat_was_enabled) res end
# File lib/ruby-prof/compatibility.rb, line 119 def self.resume ensure_running! enable_gc_stats_if_needed @profile.resume end
# File lib/ruby-prof/compatibility.rb, line 111 def self.running? if defined?(@profile) and @profile @profile.running? else false end end
# File lib/ruby-prof/compatibility.rb, line 98 def self.start ensure_not_running! @profile = Profile.new(self.measure_mode, self.exclude_threads) enable_gc_stats_if_needed @profile.start end
Profiling
# File lib/ruby-prof/compatibility.rb, line 93 def self.start_script(script) start load script end
# File lib/ruby-prof/compatibility.rb, line 125 def self.stop ensure_running! result = @profile.stop disable_gc_stats_if_needed @profile = nil result end