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