module TestProf::TagProf::Printers::Simple

def dump(result)

def dump(result)
  msgs = []
  msgs <<
    <<~MSG
      TagProf report for #{result.tag}
    MSG
  header = []
  header << format(
    "%15s  %12s  ",
    result.tag, "time"
  )
  events_format = nil
  unless result.events.empty?
    events_format = result.events.map { |event| "%#{event.size + 2}s  " }.join
    header << format(
      events_format,
      *result.events
    )
  end
  header << format(
    "%6s  %6s  %6s  %12s",
    "total", "%total", "%time", "avg"
  )
  msgs << header.join
  msgs << ""
  total = result.data.values.inject(0) { |acc, v| acc + v[:count] }
  total_time = result.data.values.inject(0) { |acc, v| acc + v[:time] }
  result.data.values.sort_by { |v| -v[:time] }.each do |tag|
    line = []
    line << format(
      "%15s  %12s  ",
      tag[:value], tag[:time].duration
    )
    unless result.events.empty?
      line << format(
        events_format,
        *result.events.map { |event| tag[event].duration }
      )
    end
    line << format(
      "%6d  %6.2f  %6.2f  %12s",
      tag[:count],
      100 * tag[:count].to_f / total,
      100 * tag[:time] / total_time,
      (tag[:time] / tag[:count]).duration
    )
    msgs << line.join
  end
  log :info, msgs.join("\n")
end