Sha256: e56c19b7e21f7d805c6598b85a579505b288df353c168611beeccbef44aeaa3a
Contents?: true
Size: 1.59 KB
Versions: 3
Compression:
Stored size: 1.59 KB
Contents
# encoding: utf-8 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 # 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 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) 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 end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ruby-prof-0.16.2 | lib/ruby-prof/profile.rb |
ruby-prof-0.16.1 | lib/ruby-prof/profile.rb |
ruby-prof-0.16.0 | lib/ruby-prof/profile.rb |