text: #!/usr/bin/env python
  # print histogram for perf.data
  import perfpd
  import pfeat
  import argparse
  
  p = argparse.ArgumentParser(description='Print histogram for perf.data')
  p.add_argument('datafiles', nargs='*', 
                 help='perf.data files (default perf.data)',
                 default=['perf.data'])
  p.add_argument('--sort', help='field to sort on (symbol, line)', 
                 default='symbol')
  p.add_argument('--min-percent', help='Minimum percent to print', default=1.0)
  args = p.parse_args()
  
  COLUMN_PAD = 5
  MAX_COLUMN = 70
  
  def compute_cols(names):
      return min(max(map(len, names)) + COLUMN_PAD, MAX_COLUMN)
  
  min_percent = float(args.min_percent) / 100.0
  for d in args.datafiles:
      df, et, feat = perfpd.read_samples(d, (args.sort == 'line'))
      pfeat.print_feat(feat)
  
      # xxx split by event
      if 'period' in df:
          total = float(df['period'].sum())
          g = df.groupby(args.sort)
          h = g.period.sum()
          h.sort(ascending=False)
          h = h.apply(lambda x: x / total)
      else:
          h = df[args.sort].value_counts(normalize=True)
      h = h[h >= min_percent]
  
      cols = compute_cols(h.index)
      for s, v in zip(h.index, h.values):
          print "%-*s %.2f%%" % (cols, s, v*100.0)
  