1#include <stdio.h>
2#include <stdlib.h>
3#include <inttypes.h>
4#include "trace_reader.h"
5
6static const int kMaxHistEntries = 256;
7static const int kMaxHistEntries2 = kMaxHistEntries /  2;
8int hist[kMaxHistEntries];
9int underflow, overflow;
10
11int main(int argc, char **argv) {
12  if (argc != 2) {
13    fprintf(stderr, "Usage: %s trace_file\n", argv[0]);
14    exit(1);
15  }
16
17  char *trace_filename = argv[1];
18  TraceReaderBase *trace = new TraceReaderBase;
19  trace->Open(trace_filename);
20
21  uint64_t prev_bb_num = 0;
22  uint64_t prev_time = 0;
23  int total = 0;
24
25  while (1) {
26    BBEvent event;
27
28    if (trace->ReadBB(&event))
29      break;
30    int bb_diff = event.bb_num - prev_bb_num;
31    //int time_diff = event.time - prev_time;
32    //printf("bb_num: %llu prev: %llu, diff: %d\n",
33    // event.bb_num, prev_bb_num, bb_diff);
34    prev_bb_num = event.bb_num;
35    prev_time = event.time;
36
37    bb_diff += kMaxHistEntries2;
38    if (bb_diff < 0)
39      underflow += 1;
40    else if (bb_diff >= kMaxHistEntries)
41      overflow += 1;
42    else
43      hist[bb_diff] += 1;
44    total += 1;
45  }
46
47  int sum = 0;
48  double sum_per = 0;
49  double per = 0;
50  for (int ii = 0; ii < kMaxHistEntries; ++ii) {
51    if (hist[ii] == 0)
52      continue;
53    per = 100.0 * hist[ii] / total;
54    sum += hist[ii];
55    sum_per = 100.0 * sum / total;
56    printf(" %4d: %6d %6.2f %6.2f\n", ii - kMaxHistEntries2, hist[ii], per, sum_per);
57  }
58  per = 100.0 * underflow / total;
59  printf("under: %6d %6.2f\n", underflow, per);
60  per = 100.0 * overflow / total;
61  printf("over:  %6d %6.2f\n", overflow, per);
62  printf("total: %6d\n", total);
63  return 0;
64}
65