Class: RubyProf::CallTreePrinter
- Inherits:
-
AbstractPrinter
- Object
- AbstractPrinter
- RubyProf::CallTreePrinter
- Defined in:
- lib/ruby-prof/call_tree_printer.rb
Overview
Generate profiling information in calltree format for use by kcachegrind and similar tools.
Instance Method Summary collapse
- #convert(value) ⇒ Object
- #file(method) ⇒ Object
-
#print(output = STDOUT, options = {}) ⇒ Object
Specify print options.
- #print_methods(thread_id, methods) ⇒ Object
- #print_threads ⇒ Object
Methods inherited from AbstractPrinter
#initialize, #method_name, #min_percent, #print_file, #setup_options
Constructor Details
This class inherits a constructor from RubyProf::AbstractPrinter
Instance Method Details
#convert(value) ⇒ Object
61 62 63 |
# File 'lib/ruby-prof/call_tree_printer.rb', line 61 def convert(value) (value * @value_scale).round end |
#file(method) ⇒ Object
65 66 67 |
# File 'lib/ruby-prof/call_tree_printer.rb', line 65 def file(method) File.(method.source_file) end |
#print(output = STDOUT, options = {}) ⇒ Object
Specify print options.
options - Hash table
:min_percent - Number 0 to 100 that specifes the minimum
%self (the methods self time divided by the
overall total time) that a method must take
for it to be printed out in the report.
Default value is 0.
:print_file - True or false. Specifies if a method's source
file should be printed. Default value if false.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/ruby-prof/call_tree_printer.rb', line 19 def print(output = STDOUT, = {}) @output = output () # add a header - this information is somewhat arbitrary @output << "events: " case RubyProf.measure_mode when RubyProf::PROCESS_TIME @value_scale = RubyProf::CLOCKS_PER_SEC; @output << 'process_time' when RubyProf::WALL_TIME @value_scale = 1_000_000 @output << 'wall_time' when RubyProf.const_defined?(:CPU_TIME) && RubyProf::CPU_TIME @value_scale = RubyProf.cpu_frequency @output << 'cpu_time' when RubyProf.const_defined?(:ALLOCATIONS) && RubyProf::ALLOCATIONS @value_scale = 1 @output << 'allocations' when RubyProf.const_defined?(:MEMORY) && RubyProf::MEMORY @value_scale = 1 @output << 'memory' when RubyProf.const_defined?(:GC_RUNS) && RubyProf::GC_RUNS @value_scale = 1 @output << 'gc_runs' when RubyProf.const_defined?(:GC_TIME) && RubyProf::GC_TIME @value_scale = 1000000 @output << 'gc_time' else raise "Unknown measure mode: #{RubyProf.measure_mode}" end @output << "\n\n" print_threads end |
#print_methods(thread_id, methods) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/ruby-prof/call_tree_printer.rb', line 69 def print_methods(thread_id, methods) methods.reverse_each do |method| # Print out the file and method name @output << "fl=#{file(method)}\n" @output << "fn=#{method_name(method)}\n" # Now print out the function line number and its self time @output << "#{method.line} #{convert(method.self_time)}\n" # Now print out all the children methods method.children.each do |callee| @output << "cfl=#{file(callee.target)}\n" @output << "cfn=#{method_name(callee.target)}\n" @output << "calls=#{callee.called} #{callee.line}\n" # Print out total times here! @output << "#{callee.line} #{convert(callee.total_time)}\n" end @output << "\n" end end |
#print_threads ⇒ Object
55 56 57 58 59 |
# File 'lib/ruby-prof/call_tree_printer.rb', line 55 def print_threads @result.threads.each do |thread_id, methods| print_methods(thread_id, methods) end end |