lib/ruby-prof/profile.rb in ruby-prof-0.16.2 vs lib/ruby-prof/profile.rb in ruby-prof-0.17.0

- old
+ new

@@ -1,55 +1,26 @@ # encoding: utf-8 +require 'ruby-prof/profile/exclude_common_methods' +require 'ruby-prof/profile/legacy_method_elimination' + module RubyProf class Profile - # This method gets called once profiling has been completed - # but before results are returned to the user. Thus it provides - # a hook to do any necessary post-processing on the call graph. - def post_process - self.threads.each do |thread| - thread.detect_recursion - end - end + include LegacyMethodElimination - # 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. - def eliminate_methods!(matchers) - 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 + # Hides methods that, when represented as a call graph, have + # extremely large in and out degrees and make navigation impossible. + def exclude_common_methods! + ExcludeCommonMethods.apply!(self) end - private - - # read regexps from file - 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) + def exclude_methods!(mod, *method_or_methods) + [method_or_methods].flatten.each do |name| + exclude_method!(mod, name) end end - # eliminate methods matching matcher - 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 + def exclude_singleton_methods!(mod, *method_or_methods) + exclude_methods!(mod.singleton_class, *method_or_methods) end - end end