aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarren Hart <dvhltc@us.ibm.com>2009-12-28 20:30:42 -0500
committerDarren Hart <dvhltc@us.ibm.com>2009-12-30 12:22:40 -0500
commit6d1b5fd541ec3358c39f08f80d316fee8346a60d (patch)
tree1dd545432f10282e19ba98349a1b1a422df05bde
parentc52d8d059d46dcd359b11c9137962ac0b7679d52 (diff)
trace-cmd: Add Python GTK Event Viewer example
Signed-off-by: Darren Hart <dvhltc@us.ibm.com>
-rwxr-xr-xevent-viewer.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/event-viewer.py b/event-viewer.py
new file mode 100755
index 0000000..bbafff0
--- /dev/null
+++ b/event-viewer.py
@@ -0,0 +1,129 @@
1#!/usr/bin/env python
2
3from gobject import *
4import gtk
5from tracecmd import *
6
7app = None
8data_func_cnt = 0
9
10class EventStore(gtk.ListStore):
11 def __init__(self, trace):
12 gtk.ListStore.__init__(self, gobject.TYPE_PYOBJECT)
13 self.trace = trace
14 for cpu in range(0, trace.cpus):
15 ev = trace.read_event(cpu)
16 while ev:
17 # store the record offset into the trace file
18 self.append([record_offset_get(ev.rec)])
19 ev = trace.read_event(cpu)
20 print "Loaded %d events across %d cpus" % (len(self), trace.cpus)
21
22 def get_event(self, iter):
23 offset = self.get_value(iter, 0)
24 return self.trace.read_event_at(offset)
25
26
27class EventView(gtk.TreeView):
28 def __init__(self, model):
29 gtk.TreeView.__init__(self, model)
30
31 ts_col = gtk.TreeViewColumn("Time (s)")
32 ts_cell = gtk.CellRendererText()
33 ts_col.pack_start(ts_cell, False)
34 ts_col.set_cell_data_func(ts_cell, self.data_func, "ts")
35 self.append_column(ts_col)
36
37 cpu_col = gtk.TreeViewColumn("CPU")
38 cpu_cell = gtk.CellRendererText()
39 cpu_col.pack_start(cpu_cell, False)
40 cpu_col.set_cell_data_func(cpu_cell, self.data_func, "cpu")
41 self.append_column(cpu_col)
42
43 event_col = gtk.TreeViewColumn("Event")
44 event_cell = gtk.CellRendererText()
45 event_col.pack_start(event_cell, False)
46 event_col.set_cell_data_func(event_cell, self.data_func, "event")
47 self.append_column(event_col)
48
49 pid_col = gtk.TreeViewColumn("PID")
50 pid_cell = gtk.CellRendererText()
51 pid_col.pack_start(pid_cell, False)
52 pid_col.set_cell_data_func(pid_cell, self.data_func, "pid")
53 self.append_column(pid_col)
54
55 comm_col = gtk.TreeViewColumn("Comm")
56 comm_cell = gtk.CellRendererText()
57 comm_col.pack_start(comm_cell, False)
58 comm_col.set_cell_data_func(comm_cell, self.data_func, "comm")
59 self.append_column(comm_col)
60
61 def data_func(self, col, cell, model, iter, data):
62 global app, data_func_cnt
63 data_func_cnt = data_func_cnt + 1
64 if app:
65 app.inc_data_func()
66
67 ev = model.get_event(iter)
68 if not ev:
69 return False
70 if data == "ts":
71 cell.set_property("markup", "%d.%d" % (ev.ts/1000000000,
72 ev.ts%1000000000))
73 return True
74 if data == "cpu":
75 cell.set_property("markup", ev.cpu)
76 return True
77 if data == "event":
78 cell.set_property("markup", ev.name)
79 return True
80 if data == "pid":
81 cell.set_property("markup", ev.pid)
82 return True
83 if data == "comm":
84 cell.set_property("markup", ev.comm)
85 return True
86
87 return False
88
89
90class EventViewerApp(gtk.Window):
91 def __init__(self, trace):
92 gtk.Window.__init__(self)
93
94 self.set_size_request(650, 400)
95 self.set_position(gtk.WIN_POS_CENTER)
96
97 self.connect("destroy", gtk.main_quit)
98 self.set_title("Event Viewer")
99
100
101 es = EventStore(trace)
102 view = EventView(es)
103
104 sw = gtk.ScrolledWindow()
105 sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
106 sw.add(view)
107
108 # track how often the treeview data_func is called
109 self.data_func_label = gtk.Label("0")
110 hbox = gtk.HBox()
111 hbox.pack_start(gtk.Label("Data Func Calls:"), False, False)
112 hbox.pack_start(self.data_func_label, False, False)
113
114 vbox = gtk.VBox()
115 vbox.pack_start(hbox, False)
116 vbox.pack_end(sw)
117
118 self.add(vbox)
119 self.show_all()
120
121 def inc_data_func(self):
122 global data_func_cnt
123 self.data_func_label.set_text(str(data_func_cnt))
124
125
126if __name__ == "__main__":
127 trace = Trace("trace.dat")
128 app = EventViewerApp(trace)
129 gtk.main()