summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMac Mollison <mollison@cs.unc.edu>2010-04-13 12:28:49 -0400
committerMac Mollison <mollison@cs.unc.edu>2010-04-13 12:28:49 -0400
commit51e246d367d043913a882080abde3d8bae5ce4d4 (patch)
tree8da2a8071f6fbfb36b3362c2bf46a63e99373116
parentde297ade4c09eb63b30d567598bf33c0e1c38fc9 (diff)
parent533dd1ba6651f14c68e9323b5cc5a4f938f4e495 (diff)
Merge branch 'wip-gary'
- Adds time_per_maj option to visualizer Conflicts: unit-trace
-rwxr-xr-xunit-trace8
-rw-r--r--unit_trace/viz/format.py6
-rw-r--r--unit_trace/viz/viewer.py53
-rwxr-xr-xunit_trace/viz/visualizer.py10
4 files changed, 45 insertions, 32 deletions
diff --git a/unit-trace b/unit-trace
index f56344f..5362113 100755
--- a/unit-trace
+++ b/unit-trace
@@ -27,12 +27,14 @@ parser.add_option("-o", "--stdout", action="store_true", dest="stdout",
27 default=False, help="Use stdout_printer") 27 default=False, help="Use stdout_printer")
28parser.add_option("-v", "--visual", action="store_true", dest="visualize", 28parser.add_option("-v", "--visual", action="store_true", dest="visualize",
29 default=False, help="Use visualizer") 29 default=False, help="Use visualizer")
30parser.add_option("-t", "--time-per-maj", default=10000000.0, type=float,
31 dest="time_per_maj", help="Time interval between major ticks, in the visualizer")
30parser.add_option("-c", "--clean", action="store_true", dest="clean", 32parser.add_option("-c", "--clean", action="store_true", dest="clean",
31 default=False, help="Use sanitizer to clean garbage records") 33 default=False, help="Use sanitizer to clean garbage records")
32parser.add_option("-e", "--earliest", default=0, type=int, dest="earliest", 34parser.add_option("-e", "--earliest", default=0, type=int, dest="earliest",
33 help="Earliest timestamp of interst") 35 help="Earliest timestamp of interest")
34parser.add_option("-l", "--latest", default=0, type=int, dest="latest", 36parser.add_option("-l", "--latest", default=0, type=int, dest="latest",
35 help="Latest timestamp of interst") 37 help="Latest timestamp of interest")
36(options, traces) = parser.parse_args() 38(options, traces) = parser.parse_args()
37traces = list(traces) 39traces = list(traces)
38if len(traces) < 1: 40if len(traces) < 1:
@@ -118,4 +120,4 @@ if options.num_inversions > -1:
118# Call visualizer 120# Call visualizer
119if options.visualize is True: 121if options.visualize is True:
120 from unit_trace import viz 122 from unit_trace import viz
121 viz.visualizer.visualizer(stream3) 123 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..fb31e8a 100644
--- a/unit_trace/viz/viewer.py
+++ b/unit_trace/viz/viewer.py
@@ -122,12 +122,14 @@ class GraphArea(gtk.DrawingArea):
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 self.config_scrollbars(self.cur_x, self.cur_y, self.scale)
125 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)
132 self.config_scrollbars(self.cur_x, self.cur_y, self.scale)
131 133
132 def set_scale(self, scale): 134 def set_scale(self, scale):
133 if scale == self.scale: 135 if scale == self.scale:
@@ -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,21 +185,25 @@ 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,
205 self.height / scale)
206 self.set_vvalue(vvalue)
185 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
@@ -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})