module RubyProf::Profile::LegacyMethodElimination

Public Instance Methods

eliminate_methods!(matchers) click to toggle source

eliminate some calls from the graph by merging the information into callers. matchers can be a list of strings or regular expressions or the name of a file containing regexps.

# File lib/ruby-prof/profile/legacy_method_elimination.rb, line 6
def eliminate_methods!(matchers)
  RubyProf.deprecation_warning(
    "Method 'eliminate_methods!' is dprecated",
    "Please call 'exclude_methods!' before starting the profile run instead."
  )
  matchers = read_regexps_from_file(matchers) if matchers.is_a?(String)
  eliminated = []
  threads.each do |thread|
    matchers.each{ |matcher| eliminated.concat(eliminate_methods(thread.methods, matcher)) }
  end
  eliminated
end

Private Instance Methods

eliminate_methods(methods, matcher) click to toggle source

eliminate methods matching matcher

# File lib/ruby-prof/profile/legacy_method_elimination.rb, line 31
def eliminate_methods(methods, matcher)
  eliminated = []
  i = 0
  while i < methods.size
    method_info = methods[i]
    method_name = method_info.full_name
    if matcher === method_name
      raise "can't eliminate root method" if method_info.root?
      eliminated << methods.delete_at(i)
      method_info.eliminate!
    else
      i += 1
    end
  end
  eliminated
end
read_regexps_from_file(file_name) click to toggle source

read regexps from file

# File lib/ruby-prof/profile/legacy_method_elimination.rb, line 22
def read_regexps_from_file(file_name)
  matchers = []
  File.open(file_name).each_line do |l|
    next if (l =~ /^(#.*|\s*)$/) # emtpy lines and lines starting with #
    matchers << Regexp.new(l.strip)
  end
end