class StackProf::Report

def print_text(sort_by_total=false, limit=nil, select_files= nil, reject_files=nil, select_names=nil, reject_names=nil, f = STDOUT)

def print_text(sort_by_total=false, limit=nil, select_files= nil, reject_files=nil, select_names=nil, reject_names=nil, f = STDOUT)
  f.puts "=================================="
  f.printf "  Mode: #{modeline}\n"
  f.printf "  Samples: #{@data[:samples]} (%.2f%% miss rate)\n", 100.0*@data[:missed_samples]/(@data[:missed_samples]+@data[:samples])
  f.printf "  GC: #{@data[:gc_samples]} (%.2f%%)\n", 100.0*@data[:gc_samples]/@data[:samples]
  f.puts "=================================="
  f.printf "% 10s    (pct)  % 10s    (pct)     FRAME\n" % ["TOTAL", "SAMPLES"]
  list = frames(sort_by_total)
  list.select!{|_, info| select_files.any?{|path| info[:file].start_with?(path)}} if select_files
  list.select!{|_, info| select_names.any?{|reg| info[:name] =~ reg}} if select_names
  list.reject!{|_, info| reject_files.any?{|path| info[:file].start_with?(path)}} if reject_files
  list.reject!{|_, info| reject_names.any?{|reg| info[:name] =~ reg}} if reject_names
  list = list.first(limit) if limit
  list.each do |frame, info|
    call, total = info.values_at(:samples, :total_samples)
    f.printf "% 10d % 8s  % 10d % 8s     %s\n", total, "(%2.1f%%)" % (total*100.0/overall_samples), call, "(%2.1f%%)" % (call*100.0/overall_samples), info[:name]
  end
end