summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGary Bressler <garybressler@nc.rr.com>2010-04-12 11:58:37 -0400
committerGary Bressler <garybressler@nc.rr.com>2010-04-12 11:58:37 -0400
commite3a1e19e87dbb3df413015bfc714283bc8602999 (patch)
treef59b14cdab486521065af473968b69f55244fc2b
parentceff6457bfeb5642616f4711f14e0bb652d12164 (diff)
Minor fixes
-rwxr-xr-xunit-trace10
-rw-r--r--unit_trace/viz/format.py6
-rw-r--r--unit_trace/viz/viewer.py61
-rwxr-xr-xunit_trace/viz/visualizer.py10
4 files changed, 50 insertions, 37 deletions
diff --git a/unit-trace b/unit-trace
index 43f752b..c66f5ac 100755
--- a/unit-trace
+++ b/unit-trace
@@ -22,7 +22,6 @@ from unit_trace import skipper
22from unit_trace import maxer 22from unit_trace import maxer
23from unit_trace import earliest 23from unit_trace import earliest
24from unit_trace import latest 24from unit_trace import latest
25from unit_trace import viz
26 25
27# Get trace files from command line arguments 26# Get trace files from command line arguments
28from optparse import OptionParser 27from optparse import OptionParser
@@ -42,12 +41,14 @@ parser.add_option("-o", "--stdout", action="store_true", dest="stdout",
42 default=False, help="Use stdout_printer") 41 default=False, help="Use stdout_printer")
43parser.add_option("-v", "--visual", action="store_true", dest="visualize", 42parser.add_option("-v", "--visual", action="store_true", dest="visualize",
44 default=False, help="Use visualizer") 43 default=False, help="Use visualizer")
44parser.add_option("-t", "--time-per-maj", default=10000000.0, type=float,
45 dest="time_per_maj", help="Time interval between major ticks, in the visualizer")
45parser.add_option("-c", "--clean", action="store_true", dest="clean", 46parser.add_option("-c", "--clean", action="store_true", dest="clean",
46 default=False, help="Use sanitizer to clean garbage records") 47 default=False, help="Use sanitizer to clean garbage records")
47parser.add_option("-e", "--earliest", default=0, type=int, dest="earliest", 48parser.add_option("-e", "--earliest", default=0, type=int, dest="earliest",
48 help="Earliest timestamp of interst") 49 help="Earliest timestamp of interest")
49parser.add_option("-l", "--latest", default=0, type=int, dest="latest", 50parser.add_option("-l", "--latest", default=0, type=int, dest="latest",
50 help="Latest timestamp of interst") 51 help="Latest timestamp of interest")
51(options, traces) = parser.parse_args() 52(options, traces) = parser.parse_args()
52traces = list(traces) 53traces = list(traces)
53if len(traces) < 1: 54if len(traces) < 1:
@@ -119,4 +120,5 @@ if options.num_inversions > -1:
119 120
120# Call visualizer 121# Call visualizer
121if options.visualize is True: 122if options.visualize is True:
122 viz.visualizer.visualizer(stream3) 123 from unit_trace import viz
124 viz.visualizer.visualizer(stream3, options.time_per_maj)
diff --git a/unit_trace/viz/format.py b/unit_trace/viz/format.py
index c544e26..d3ed4fd 100644
--- a/unit_trace/viz/format.py
+++ b/unit_trace/viz/format.py
@@ -80,9 +80,9 @@ class GraphFormat(object):
80 SMALL_ARROW_FACTOR = 0.6 80 SMALL_ARROW_FACTOR = 0.6
81 COMPLETION_MARKER_FACTOR = 1.6 81 COMPLETION_MARKER_FACTOR = 1.6
82 82
83 def __init__(self, time_per_maj=DEF_TIME_PER_MAJ, maj_sep=DEF_MAJ_SEP, \ 83 def __init__(self, time_per_maj=DEF_TIME_PER_MAJ, maj_sep=DEF_MAJ_SEP,
84 min_per_maj=DEF_MIN_PER_MAJ, y_item_size=DEF_Y_ITEM_SIZE, bar_fopts=DEF_FOPTS_BAR, \ 84 min_per_maj=DEF_MIN_PER_MAJ, y_item_size=DEF_Y_ITEM_SIZE, bar_fopts=DEF_FOPTS_BAR,
85 item_fopts=DEF_FOPTS_ITEM, show_min=False, majfopts=DEF_FOPTS_MAJ, \ 85 item_fopts=DEF_FOPTS_ITEM, show_min=False, majfopts=DEF_FOPTS_MAJ,
86 minfopts=DEF_FOPTS_MIN): 86 minfopts=DEF_FOPTS_MIN):
87 self.time_per_maj = time_per_maj 87 self.time_per_maj = time_per_maj
88 self.maj_sep = maj_sep 88 self.maj_sep = maj_sep
diff --git a/unit_trace/viz/viewer.py b/unit_trace/viz/viewer.py
index 4d1fb7f..5e707b8 100644
--- a/unit_trace/viz/viewer.py
+++ b/unit_trace/viz/viewer.py
@@ -116,19 +116,21 @@ class GraphArea(gtk.DrawingArea):
116 116
117 def get_schedule(self): 117 def get_schedule(self):
118 return self.renderer.get_schedule() 118 return self.renderer.get_schedule()
119 119
120 def zoom_in(self): 120 def zoom_in(self):
121 scale = self.scale + GraphArea.ZOOM_INCR 121 scale = self.scale + GraphArea.ZOOM_INCR
122 if scale > GraphArea.MAX_ZOOM_IN: 122 if scale > GraphArea.MAX_ZOOM_IN:
123 scale = GraphArea.MAX_ZOOM_IN 123 scale = GraphArea.MAX_ZOOM_IN
124 self.set_scale(scale) 124 self.set_scale(scale)
125 125 self.config_scrollbars(self.cur_x, self.cur_y, self.scale)
126
126 def zoom_out(self): 127 def zoom_out(self):
127 scale = self.scale - GraphArea.ZOOM_INCR 128 scale = self.scale - GraphArea.ZOOM_INCR
128 if scale < GraphArea.MIN_ZOOM_OUT: 129 if scale < GraphArea.MIN_ZOOM_OUT:
129 scale = GraphArea.MIN_ZOOM_OUT 130 scale = GraphArea.MIN_ZOOM_OUT
130 self.set_scale(scale) 131 self.set_scale(scale)
131 132 self.config_scrollbars(self.cur_x, self.cur_y, self.scale)
133
132 def set_scale(self, scale): 134 def set_scale(self, scale):
133 if scale == self.scale: 135 if scale == self.scale:
134 return 136 return
@@ -136,6 +138,22 @@ class GraphArea(gtk.DrawingArea):
136 self.scale = scale 138 self.scale = scale
137 self._dirty(0, 0, self.width, self.height) 139 self._dirty(0, 0, self.width, self.height)
138 140
141 def set_hvalue(self, value):
142 if self.horizontal is None:
143 return
144
145 value = max(value, self.horizontal.get_lower())
146 value = min(value, self.horizontal.get_upper() - self.horizontal.get_page_size())
147 self.horizontal.set_value(value)
148
149 def set_vvalue(self, value):
150 if self.vertical is None:
151 return
152
153 value = max(value, self.vertical.get_lower())
154 value = min(value, self.vertical.get_upper() - self.vertical.get_page_size())
155 self.vertical.set_value(value)
156
139 def set_scroll_adjustments(self, widget, horizontal, vertical, data=None): 157 def set_scroll_adjustments(self, widget, horizontal, vertical, data=None):
140 graph = self.renderer.get_graph() 158 graph = self.renderer.get_graph()
141 width = graph.get_width() 159 width = graph.get_width()
@@ -143,7 +161,7 @@ class GraphArea(gtk.DrawingArea):
143 161
144 self.horizontal = horizontal 162 self.horizontal = horizontal
145 self.vertical = vertical 163 self.vertical = vertical
146 self.config_scrollbars(self.cur_x, self.cur_y) 164 self.config_scrollbars(self.cur_x, self.cur_y, self.scale)
147 165
148 if self.horizontal is not None: 166 if self.horizontal is not None:
149 self.horizontal.connect('value-changed', self.horizontal_value_changed) 167 self.horizontal.connect('value-changed', self.horizontal_value_changed)
@@ -167,22 +185,26 @@ class GraphArea(gtk.DrawingArea):
167 def size_allocate(self, widget, allocation): 185 def size_allocate(self, widget, allocation):
168 self.width = allocation.width 186 self.width = allocation.width
169 self.height = allocation.height 187 self.height = allocation.height
170 self.config_scrollbars(self.cur_x, self.cur_y) 188 self.config_scrollbars(self.cur_x, self.cur_y, self.scale)
171 189
172 def config_scrollbars(self, hvalue, vvalue): 190 def config_scrollbars(self, hvalue, vvalue, scale):
173 graph = self.renderer.get_graph() 191 graph = self.renderer.get_graph()
174 width = graph.get_width() 192 width = graph.get_width()
175 height = graph.get_height() 193 height = graph.get_height()
176 194
177 if self.horizontal is not None: 195 if self.horizontal is not None:
178 self.horizontal.set_all(hvalue, 0.0, width + self.width, 196 self.horizontal.set_all(0.0, 0.0, width,
179 graph.get_attrs().maj_sep * GraphArea.HORIZ_STEP_SCROLL_FACTOR, 197 graph.get_attrs().maj_sep * GraphArea.HORIZ_STEP_SCROLL_FACTOR / scale,
180 graph.get_attrs().maj_sep * GraphArea.HORIZ_PAGE_SCROLL_FACTOR, self.width) 198 graph.get_attrs().maj_sep * GraphArea.HORIZ_PAGE_SCROLL_FACTOR / scale,
199 self.width / scale)
200 self.set_hvalue(hvalue)
181 if self.vertical is not None: 201 if self.vertical is not None:
182 self.vertical.set_all(vvalue, 0.0, height + self.height, 202 self.vertical.set_all(0.0, 0.0, height,
183 graph.get_attrs().y_item_size * GraphArea.VERT_STEP_SCROLL_FACTOR, 203 graph.get_attrs().y_item_size * GraphArea.VERT_STEP_SCROLL_FACTOR / scale,
184 graph.get_attrs().y_item_size * GraphArea.VERT_PAGE_SCROLL_FACTOR, self.height) 204 graph.get_attrs().y_item_size * GraphArea.VERT_PAGE_SCROLL_FACTOR / scale,
185 205 self.height / scale)
206 self.set_vvalue(vvalue)
207
186 def refresh_events(self, sender, new, old, replace): 208 def refresh_events(self, sender, new, old, replace):
187 """Even if the selected areas change on one graph, they change 209 """Even if the selected areas change on one graph, they change
188 everywhere, and different events might be in different regions on 210 everywhere, and different events might be in different regions on
@@ -485,16 +507,10 @@ class GraphWindow(gtk.ScrolledWindow):
485 return True 507 return True
486 508
487 def set_hvalue(self, value): 509 def set_hvalue(self, value):
488 if self.get_hadjustment() is None: 510 self.get_graph_area().set_hvalue(value)
489 return
490
491 self.get_hadjustment().set_value(value)
492 511
493 def set_vvalue(self, value): 512 def set_vvalue(self, value):
494 if self.get_vadjustment() is None: 513 self.get_graph_area().set_vvalue(value)
495 return
496
497 self.get_vadjustment().set_value(value)
498 514
499 def _scroll_direction(self, keystr): 515 def _scroll_direction(self, keystr):
500 hadj = self.get_hadjustment() 516 hadj = self.get_hadjustment()
@@ -721,9 +737,6 @@ class MainWindow(gtk.Window):
721 garea = self.notebook.get_nth_page(i).get_graph_area() 737 garea = self.notebook.get_nth_page(i).get_graph_area()
722 # Center as much as possible 738 # Center as much as possible
723 pos = garea.get_graph().get_time_xpos(time) - garea.get_width() / 2.0 739 pos = garea.get_graph().get_time_xpos(time) - garea.get_width() / 2.0
724 pos = max(0, pos)
725 pos = min(garea.get_graph().get_width(), pos)
726
727 self.notebook.get_nth_page(i).set_hvalue(pos) 740 self.notebook.get_nth_page(i).set_hvalue(pos)
728 else: 741 else:
729 err_dialog = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT, 742 err_dialog = gtk.MessageDialog(self, gtk.DIALOG_DESTROY_WITH_PARENT,
diff --git a/unit_trace/viz/visualizer.py b/unit_trace/viz/visualizer.py
index c0186f7..e80b764 100755
--- a/unit_trace/viz/visualizer.py
+++ b/unit_trace/viz/visualizer.py
@@ -8,16 +8,14 @@ import format
8import pygtk 8import pygtk
9import gtk 9import gtk
10 10
11TIME_PER_MAJ = 10000000 11def visualizer(stream, time_per_maj):
12
13def visualizer(stream):
14 sched = convert.convert_trace_to_schedule(stream) 12 sched = convert.convert_trace_to_schedule(stream)
15 sched.scan(TIME_PER_MAJ) 13 sched.scan(time_per_maj)
16 14
17 task_renderer = renderer.Renderer(sched) 15 task_renderer = renderer.Renderer(sched)
18 task_renderer.prepare_task_graph(attrs=format.GraphFormat(time_per_maj=TIME_PER_MAJ)) 16 task_renderer.prepare_task_graph(attrs=format.GraphFormat(time_per_maj=time_per_maj))
19 cpu_renderer = renderer.Renderer(sched) 17 cpu_renderer = renderer.Renderer(sched)
20 cpu_renderer.prepare_cpu_graph(attrs=format.GraphFormat(time_per_maj=TIME_PER_MAJ)) 18 cpu_renderer.prepare_cpu_graph(attrs=format.GraphFormat(time_per_maj=time_per_maj))
21 19
22 window = viewer.MainWindow() 20 window = viewer.MainWindow()
23 window.set_renderers({'Tasks' : task_renderer, 'CPUs' : cpu_renderer}) 21 window.set_renderers({'Tasks' : task_renderer, 'CPUs' : cpu_renderer})