summaryrefslogtreecommitdiff
path: root/pt
diff options
context:
space:
mode:
authorJulian Blake Kongslie2022-10-15 14:12:31 -0700
committerJulian Blake Kongslie2022-10-15 14:12:31 -0700
commitecf940e34b42f78f9651a73e8bcd0c6dc3c75cb5 (patch)
tree36a290bf7a6ed585cf040964c8e7481f4df1d631 /pt
parentMove shared_bus into arbiter (diff)
downloadbiggolf-ecf940e34b42f78f9651a73e8bcd0c6dc3c75cb5.tar.xz
Depend on external nanosim dependency.
Diffstat (limited to '')
l---------[-rwxr-xr-x]pt105
1 files changed, 1 insertions, 104 deletions
diff --git a/pt b/pt
index 206795f..d6f3bd4 100755..120000
--- a/pt
+++ b/pt
@@ -1,104 +1 @@
1#!/usr/bin/ruby nanosim/pt \ No newline at end of file
2
3$filter = ARGV
4
5$parents = {}
6$events = {}
7$has = {}
8$data = {}
9$horiz = {}
10$maxtime = -1
11
12$stats = false
13
14$stdin.each_line do | line |
15 case line
16
17 when /^(\d+) parent (\d+)$/
18 child = $1.to_i
19 parent = $2.to_i
20 $parents[child] = parent
21
22 when /^@(\d+) (\d+) (\S*) (.*)$/
23 time = $1.to_i
24 rec = $2.to_i
25 event = $3
26 data = $4
27 if event.size > 0
28 $events[rec] ||= {}
29 $events[rec][time] = event
30 $has[rec] ||= {}
31 $has[rec][event] = true
32 $horiz[event] ||= ""
33 $horiz[event] = $horiz[event].ljust(time)
34 $horiz[event][time] = event
35 end
36 if data.size > 0
37 $data[rec] ||= ""
38 $data[rec] += " #{event}@#{time}:" if event.size > 0
39 $data[rec] += " #{data}"
40 end
41 $maxtime = [$maxtime, time+1].max
42
43 when /^#\s*(.*)$/
44 $stats = true
45 $stdout.write("#{$1}\n")
46
47 else
48 raise "Unexpected line: #{line}"
49 end
50end
51
52$stdout.write("\n") if $stats
53
54$hier = {}
55$hier_direct = {}
56
57$events.each_key do | rec |
58 subhier = {}
59 $hier_direct[rec] = subhier
60 if $parents.key?(rec)
61 $hier_direct[$parents[rec]][rec] = subhier
62 else
63 $hier[rec] = subhier
64 end
65end
66
67$order = []
68
69def flatten(hier)
70 hier.each do | rec, subhier |
71 $order << rec
72 flatten(subhier)
73 end
74end
75flatten($hier)
76
77rwidth = $order.map { | x | x.to_s.size }.max
78
79$horiz.keys.sort.each do | occ |
80 $stdout.write(" " * rwidth + " #{$horiz[occ].ljust($maxtime)}")
81 count = $horiz[occ].delete(" ").size
82 $stdout.write(" #{($maxtime.to_f / count.to_f).round(2).to_s.rjust(5)} cyc/evt\n")
83end
84$stdout.write("\n")
85
86mwidth = 0
87
88$order.each do | rec |
89 estr = ""
90 filter_match = $filter.empty?
91 $has[rec].each_key do | event |
92 filter_match ||= $filter.include?(event)
93 end
94 next unless filter_match
95 $events[rec].keys.sort.each do | time |
96 estr = estr.ljust(time + 1, estr.size == 0 ? " " : "-")
97 estr[time] = $events[rec][time] if $events[rec][time].size > 0
98 end
99 estr += " " * 5
100 estr = estr.ljust(mwidth - 1)
101 estr = estr.ljust(estr.size + 20 - estr.size % 20)
102 mwidth = [mwidth, estr.size].max
103 $stdout.write(rec.to_s.rjust(rwidth) + ": #{estr}#{$data[rec]}\n")
104end