Module: RubyProf

Defined in:
lib/ruby-prof/compatibility.rb,
lib/ruby-prof.rb,
lib/ruby-prof/task.rb,
lib/ruby-prof/thread.rb,
lib/ruby-prof/profile.rb,
lib/ruby-prof/version.rb,
lib/ruby-prof/call_info.rb,
lib/ruby-prof/method_info.rb,
lib/ruby-prof/call_info_visitor.rb,
lib/ruby-prof/aggregate_call_info.rb,
lib/ruby-prof/printers/dot_printer.rb,
lib/ruby-prof/printers/flat_printer.rb,
lib/ruby-prof/printers/graph_printer.rb,
lib/ruby-prof/printers/multi_printer.rb,
lib/ruby-prof/printers/abstract_printer.rb,
lib/ruby-prof/printers/call_info_printer.rb,
lib/ruby-prof/printers/call_tree_printer.rb,
lib/ruby-prof/printers/call_stack_printer.rb,
lib/ruby-prof/printers/graph_html_printer.rb,
lib/ruby-prof/printers/flat_printer_with_line_numbers.rb,
ext/ruby_prof/ruby_prof.c

Overview

The call info visitor class does a depth-first traversal across a list of method infos. 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.top_call_infos)

method_names = Array.new

visitor.visit do |call_info, event|
  method_names << call_info.target.full_name if event == :enter
end

puts method_names

Defined Under Namespace

Modules: Measure Classes: AbstractPrinter, AggregateCallInfo, CallInfo, CallInfoPrinter, CallInfoVisitor, CallStackPrinter, CallTreePrinter, DotPrinter, FlatPrinter, FlatPrinterWithLineNumbers, GraphHtmlPrinter, GraphPrinter, MethodInfo, MultiPrinter, Profile, ProfileTask, Thread

Constant Summary collapse

VERSION =
"0.15.7"
MEMORY =
INT2NUM(MEASURE_MEMORY)
MEMORY_ENABLED =
MEASURE_MEMORY_ENABLED
GC_RUNS =
INT2NUM(MEASURE_GC_RUNS)
GC_RUNS_ENABLED =
MEASURE_GC_RUNS_ENABLED
GC_TIME =
INT2NUM(MEASURE_GC_TIME)
GC_TIME_ENABLED =
MEASURE_GC_TIME_ENABLED
CPU_TIME =
INT2NUM(MEASURE_CPU_TIME)
CPU_TIME_ENABLED =
Qtrue
WALL_TIME =
INT2NUM(MEASURE_WALL_TIME)
WALL_TIME_ENABLED =
Qtrue
ALLOCATIONS =
INT2NUM(MEASURE_ALLOCATIONS)
ALLOCATIONS_ENABLED =
MEASURE_ALLOCATIONS_ENABLED
CLOCKS_PER_SEC =
INT2NUM(CLOCKS_PER_SEC)
PROCESS_TIME =
INT2NUM(MEASURE_PROCESS_TIME)
PROCESS_TIME_ENABLED =
Qtrue

Class Method Summary collapse

Class Method Details

.cpu_frequencyObject

Measurements



6
7
8
# File 'lib/ruby-prof/compatibility.rb', line 6

def self.cpu_frequency
  Measure::CpuTime.frequency
end

.exclude_threadsObject

call-seq: exclude_threads -> exclude_threads

Returns threads ruby-prof should exclude from profiling



88
89
90
# File 'lib/ruby-prof/compatibility.rb', line 88

def self.exclude_threads
  @exclude_threads ||= Array.new
end

.exclude_threads=(value) ⇒ Object

call-seq: exclude_threads= -> void

Specifies what threads ruby-prof should exclude from profiling



97
98
99
# File 'lib/ruby-prof/compatibility.rb', line 97

def self.exclude_threads=(value)
  @exclude_threads = value
end

.figure_measure_modeObject

Checks if the user specified the clock mode via the RUBY_PROF_MEASURE_MODE environment variable



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ruby-prof.rb', line 35

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"
    RubyProf.measure_mode = RubyProf::CPU_TIME
  when "allocations"
    RubyProf.measure_mode = RubyProf::ALLOCATIONS
  when "memory"
    RubyProf.measure_mode = RubyProf::MEMORY
  when "process", "process_time"
    RubyProf.measure_mode = RubyProf::PROCESS_TIME
  when "gc_time"
    RubyProf.measure_mode = RubyProf::GC_TIME
  when "gc_runs"
    RubyProf.measure_mode = RubyProf::GC_RUNS
  else
    # the default is defined in the measure_mode reader
  end
end

.measure_allocationsObject



10
11
12
# File 'lib/ruby-prof/compatibility.rb', line 10

def self.measure_allocations
  Measure::Allocations.measure
end

.measure_cpu_timeObject



14
15
16
# File 'lib/ruby-prof/compatibility.rb', line 14

def self.measure_cpu_time
  Measure::CpuTime.measure
end

.measure_gc_runsObject



18
19
20
# File 'lib/ruby-prof/compatibility.rb', line 18

def self.measure_gc_runs
  Measure::GcRuns.measure
end

.measure_gc_timeObject



22
23
24
# File 'lib/ruby-prof/compatibility.rb', line 22

def self.measure_gc_time
  Measure::GcTime.measure
end

.measure_memoryObject



26
27
28
# File 'lib/ruby-prof/compatibility.rb', line 26

def self.measure_memory
  Measure::Memory.measure
end

.measure_modeObject

call-seq: measure_mode -> measure_mode

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.*/



51
52
53
# File 'lib/ruby-prof/compatibility.rb', line 51

def self.measure_mode
  @measure_mode ||= RubyProf::WALL_TIME
end

.measure_mode=(value) ⇒ Object

call-seq: measure_mode=value -> void

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.*/



67
68
69
# File 'lib/ruby-prof/compatibility.rb', line 67

def self.measure_mode=(value)
  @measure_mode = value
end

.measure_mode_stringObject



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/ruby-prof/compatibility.rb', line 71

def self.measure_mode_string
  case measure_mode
  when WALL_TIME    then "wall_time"
  when CPU_TIME     then "cpu_time"
  when PROCESS_TIME then "process_time_time"
  when ALLOCATIONS  then "allocations"
  when MEMORY       then "memory"
  when GC_TIME      then "gc_time"
  when GC_RUNS      then "gc_runs"
  end
end

.measure_process_timeObject



30
31
32
# File 'lib/ruby-prof/compatibility.rb', line 30

def self.measure_process_time
  Measure::ProcessTime.measure
end

.measure_wall_timeObject



34
35
36
# File 'lib/ruby-prof/compatibility.rb', line 34

def self.measure_wall_time
  Measure::WallTime.measure
end

.pauseObject



114
115
116
117
118
# File 'lib/ruby-prof/compatibility.rb', line 114

def self.pause
  ensure_running!
  disable_gc_stats_if_needed
  @profile.pause
end

.profile(&block) ⇒ Object

Profile a block



143
144
145
146
147
148
149
# File 'lib/ruby-prof/compatibility.rb', line 143

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

.resumeObject



128
129
130
131
132
# File 'lib/ruby-prof/compatibility.rb', line 128

def self.resume
  ensure_running!
  enable_gc_stats_if_needed
  @profile.resume
end

.running?Boolean

Returns:

  • (Boolean)


120
121
122
123
124
125
126
# File 'lib/ruby-prof/compatibility.rb', line 120

def self.running?
  if defined?(@profile) and @profile
    @profile.running?
  else
    false
  end
end

.startObject



107
108
109
110
111
112
# File 'lib/ruby-prof/compatibility.rb', line 107

def self.start
  ensure_not_running!
  @profile = Profile.new(self.measure_mode, self.exclude_threads)
  enable_gc_stats_if_needed
  @profile.start
end

.start_script(script) ⇒ Object

Profiling



102
103
104
105
# File 'lib/ruby-prof/compatibility.rb', line 102

def self.start_script(script)
  start
  load script
end

.stopObject



134
135
136
137
138
139
140
# File 'lib/ruby-prof/compatibility.rb', line 134

def self.stop
  ensure_running!
  result = @profile.stop
  disable_gc_stats_if_needed
  @profile = nil
  result
end