Class: RubyProf::CallTreePrinter
- Inherits:
-
AbstractPrinter
- Object
- AbstractPrinter
- RubyProf::CallTreePrinter
- Defined in:
- lib/ruby-prof/printers/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_thread(thread) ⇒ Object
- #print_threads ⇒ Object
Methods inherited from AbstractPrinter
#initialize, #method_name, #min_percent, #print_file, #print_footer, #print_header, #setup_options, #sort_method
Constructor Details
This class inherits a constructor from RubyProf::AbstractPrinter
Instance Method Details
#convert(value) ⇒ Object
62 63 64 |
# File 'lib/ruby-prof/printers/call_tree_printer.rb', line 62 def convert(value) (value * @value_scale).round end |
#file(method) ⇒ Object
66 67 68 |
# File 'lib/ruby-prof/printers/call_tree_printer.rb', line 66 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.
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 54 |
# File 'lib/ruby-prof/printers/call_tree_printer.rb', line 20 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_thread(thread) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/ruby-prof/printers/call_tree_printer.rb', line 70 def print_thread(thread) thread.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
56 57 58 59 60 |
# File 'lib/ruby-prof/printers/call_tree_printer.rb', line 56 def print_threads @result.threads.each do |thread| print_thread(thread) end end |