class RubyProf::MethodInfo

Public Instance Methods

<=>(other) click to toggle source
# File lib/ruby-prof/method_info.rb, line 6
def <=>(other)
  if self.total_time < other.total_time
    -1
  elsif self.total_time > other.total_time
    1
  elsif self.min_depth < other.min_depth
    1
  elsif self.min_depth > other.min_depth
    -1
  else
    self.full_name <=> other.full_name
  end
end
aggregate_children() click to toggle source
# File lib/ruby-prof/method_info.rb, line 104
def aggregate_children
  # group call infos based on their targets
  groups = self.children.each_with_object({}) do |call_info, hash|
    key = call_info.target
    (hash[key] ||= []) << call_info
  end

  groups.map do |key, value|
    AggregateCallInfo.new(value, self)
  end
end
aggregate_parents() click to toggle source
# File lib/ruby-prof/method_info.rb, line 92
def aggregate_parents
  # group call infos based on their parents
  groups = self.call_infos.each_with_object({}) do |call_info, hash|
    key = call_info.parent ? call_info.parent.target : self
    (hash[key] ||= []) << call_info
  end

  groups.map do |key, value|
    AggregateCallInfo.new(value, self)
  end
end
called() click to toggle source
# File lib/ruby-prof/method_info.rb, line 24
def called
  @called ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum + call_info.called
    end
  end
end
children() click to toggle source
# File lib/ruby-prof/method_info.rb, line 84
def children
  @children ||= call_infos.map(&:children).flatten
end
children_time() click to toggle source
# File lib/ruby-prof/method_info.rb, line 59
def children_time
  @children_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.children_time unless call_info.recursive
      sum
    end
  end
end
detect_recursion() click to toggle source
# File lib/ruby-prof/method_info.rb, line 20
def detect_recursion
  call_infos.each(&:detect_recursion)
end
eliminate!() click to toggle source

remove method from the call graph. should not be called directly.

# File lib/ruby-prof/method_info.rb, line 121
def eliminate!
  # $stderr.puts "eliminating #{self}"
  call_infos.each{ |call_info| call_info.eliminate! }
  call_infos.clear
end
min_depth() click to toggle source
# File lib/ruby-prof/method_info.rb, line 68
def min_depth
  @min_depth ||= call_infos.map(&:depth).min
end
parents() click to toggle source
# File lib/ruby-prof/method_info.rb, line 88
def parents
  @parents ||= call_infos.map(&:parent)
end
recursive?() click to toggle source
# File lib/ruby-prof/method_info.rb, line 80
def recursive?
  (@recursive ||= call_infos.detect(&:recursive) ? :true : :false) == :true
end
root?() click to toggle source
# File lib/ruby-prof/method_info.rb, line 72
def root?
  @root ||= begin
    call_infos.find do |call_info|
      not call_info.root?
    end.nil?
  end
end
self_time() click to toggle source
# File lib/ruby-prof/method_info.rb, line 41
def self_time
  @self_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.self_time unless call_info.recursive
      sum
    end
  end
end
to_s() click to toggle source
# File lib/ruby-prof/method_info.rb, line 116
def to_s
  "#{self.full_name} (c: #{self.called}, tt: #{self.total_time}, st: #{self.self_time}, ct: #{self.children_time})"
end
total_time() click to toggle source
# File lib/ruby-prof/method_info.rb, line 32
def total_time
  @total_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.total_time unless call_info.recursive
      sum
    end
  end
end
wait_time() click to toggle source
# File lib/ruby-prof/method_info.rb, line 50
def wait_time
  @wait_time ||= begin
    call_infos.inject(0) do |sum, call_info|
      sum += call_info.wait_time unless call_info.recursive
      sum
    end
  end
end