Class: RubyProf::MultiPrinter

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby-prof/printers/multi_printer.rb

Overview

Helper class to simplify printing profiles of several types from one profiling run. Currently prints a flat profile, a callgrind profile, a call stack profile and a graph profile.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(result, printers = [:stack, :graph, :tree, :flat]) ⇒ MultiPrinter

Returns a new instance of MultiPrinter.


8
9
10
11
12
13
# File 'lib/ruby-prof/printers/multi_printer.rb', line 8

def initialize(result, printers = [:stack, :graph, :tree, :flat])
  @stack_printer = CallStackPrinter.new(result) if printers.include?(:stack)
  @graph_printer = GraphHtmlPrinter.new(result) if printers.include?(:graph)
  @tree_printer = CallTreePrinter.new(result) if printers.include?(:tree)
  @flat_printer = FlatPrinter.new(result) if printers.include?(:flat)
end

Class Method Details

.needs_dir?Boolean

Returns:

  • (Boolean)

15
16
17
# File 'lib/ruby-prof/printers/multi_printer.rb', line 15

def self.needs_dir?
  true
end

Instance Method Details

#flat_profileObject

the name of the flat profile file


50
51
52
# File 'lib/ruby-prof/printers/multi_printer.rb', line 50

def flat_profile
  "#{@directory}/#{@profile}.flat.txt"
end

#graph_profileObject

the name of the graph profile file


40
41
42
# File 'lib/ruby-prof/printers/multi_printer.rb', line 40

def graph_profile
  "#{@directory}/#{@profile}.graph.html"
end

create profile files under options or the current directory. options is used as the base name for the pofile file, defaults to “profile”.


22
23
24
25
26
27
28
29
30
31
32
# File 'lib/ruby-prof/printers/multi_printer.rb', line 22

def print(options)
  validate_print_params(options)

  @profile = options.delete(:profile) || "profile"
  @directory = options.delete(:path) || File.expand_path(".")

  print_to_stack(options) if @stack_printer
  print_to_graph(options) if @graph_printer
  print_to_tree(options) if @tree_printer
  print_to_flat(options) if @flat_printer
end

70
71
72
73
74
# File 'lib/ruby-prof/printers/multi_printer.rb', line 70

def print_to_flat(options)
  File.open(flat_profile, "w") do |f|
    @flat_printer.print(f, options)
  end
end

60
61
62
63
64
# File 'lib/ruby-prof/printers/multi_printer.rb', line 60

def print_to_graph(options)
  File.open(graph_profile, "w") do |f|
    @graph_printer.print(f, options)
  end
end

54
55
56
57
58
# File 'lib/ruby-prof/printers/multi_printer.rb', line 54

def print_to_stack(options)
  File.open(stack_profile, "w") do |f|
    @stack_printer.print(f, options.merge(:graph => "#{@profile}.graph.html"))
  end
end

66
67
68
# File 'lib/ruby-prof/printers/multi_printer.rb', line 66

def print_to_tree(options)
  @tree_printer.print(options.merge(:path => @directory, :profile => @profile))
end

#stack_profileObject

the name of the call stack profile file


35
36
37
# File 'lib/ruby-prof/printers/multi_printer.rb', line 35

def stack_profile
  "#{@directory}/#{@profile}.stack.html"
end

#tree_profileObject

the name of the callgrind profile file


45
46
47
# File 'lib/ruby-prof/printers/multi_printer.rb', line 45

def tree_profile
  "#{@directory}/#{@profile}.callgrind.out.#{$$}"
end

#validate_print_params(options) ⇒ Object


76
77
78
79
80
81
82
# File 'lib/ruby-prof/printers/multi_printer.rb', line 76

def validate_print_params(options)
  if options.is_a?(IO)
    raise ArgumentError, "#{self.class.name}#print cannot print to IO objects"
  elsif !options.is_a?(Hash)
    raise ArgumentError, "#{self.class.name}#print requires an options hash"
  end
end