Class RubyProf::CallTreePrinter
In: lib/ruby-prof/call_tree_printer.rb
Parent: AbstractPrinter

Generate profiling information in calltree format for use by kcachegrind and similar tools.

Methods

convert   file   name   print   print_methods   print_threads  

Public Instance methods

[Source]

    # File lib/ruby-prof/call_tree_printer.rb, line 42
42:     def convert(value)
43:       (value * @value_scale).round
44:     end

[Source]

    # File lib/ruby-prof/call_tree_printer.rb, line 46
46:     def file(method)
47:       File.expand_path(method.source_file)
48:     end

[Source]

    # File lib/ruby-prof/call_tree_printer.rb, line 50
50:     def name(method)
51:       "#{method.klass_name}::#{method.method_name}"
52:     end

[Source]

    # File lib/ruby-prof/call_tree_printer.rb, line 8
 8:     def print(output = STDOUT, options = {})
 9:       @output = output
10:       setup_options(options)
11:         
12:       # add a header - this information is somewhat arbitrary
13:       @output << "events: "
14:       case RubyProf.measure_mode
15:         when RubyProf::PROCESS_TIME
16:           @value_scale = RubyProf::CLOCKS_PER_SEC;
17:           @output << 'process_time'
18:         when RubyProf::WALL_TIME
19:           @value_scale = 1_000_000
20:           @output << 'wall_time'
21:         when RubyProf.const_defined?(:CPU_TIME) && RubyProf::CPU_TIME
22:           @value_scale = RubyProf.cpu_frequency
23:           @output << 'cpu_time'
24:         when RubyProf.const_defined?(:ALLOCATIONS) && RubyProf::ALLOCATIONS
25:           @value_scale = 1
26:           @output << 'allocations'
27:         when RubyProf.const_defined?(:MEMORY) && RubyProf::MEMORY
28:           @value_scale = 1
29:           @output << 'memory'
30:       end
31:       @output << "\n\n"  
32: 
33:       print_threads
34:     end

[Source]

    # File lib/ruby-prof/call_tree_printer.rb, line 54
54:     def print_methods(thread_id, methods)
55:       methods.reverse_each do |method| 
56:         # Print out the file and method name
57:         @output << "fl=#{file(method)}\n"
58:         @output << "fn=#{name(method)}\n"
59: 
60:         # Now print out the function line number and its self time
61:         @output << "#{method.line} #{convert(method.self_time)}\n"
62: 
63:         # Now print out all the children methods
64:         method.children.each do |callee|
65:           @output << "cfl=#{file(callee.target)}\n"
66:           @output << "cfn=#{name(callee.target)}\n"
67:           @output << "calls=#{callee.called} #{callee.line}\n"
68: 
69:           # Print out total times here!
70:           @output << "#{callee.line} #{convert(callee.total_time)}\n"
71:         end
72:       @output << "\n"
73:       end
74:     end

[Source]

    # File lib/ruby-prof/call_tree_printer.rb, line 36
36:     def print_threads
37:       @result.threads.each do |thread_id, methods|
38:         print_methods(thread_id, methods)
39:       end
40:     end

[Validate]