summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2009-08-25 14:03:04 -0300
committerArnaldo Carvalho de Melo <acme@redhat.com>2009-08-25 14:03:04 -0300
commit82c94f49e729b1272c2f11ede36096a177fa924b (patch)
tree3b8672653fd6e05dbb6dfe01b5d7cd6caa0b846b
parented997b6a2b73f50c5c2c40482cb46752ef151688 (diff)
downloadtuna-82c94f49e729b1272c2f11ede36096a177fa924b.tar.gz
oscilloscope: Fix scaling bugs and add --sample_multiplier
So that we can convert samples in, say, milliseconds to microseconts, using something like: oscilloscope --sample_multiplier 1000 -uus Reported-by: Tom Tracy <ttracy@redhat.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rwxr-xr-xoscilloscope-cmd.py10
-rwxr-xr-xtuna/oscilloscope.py15
2 files changed, 20 insertions, 5 deletions
diff --git a/oscilloscope-cmd.py b/oscilloscope-cmd.py
index 9864824..c6de41f 100755
--- a/oscilloscope-cmd.py
+++ b/oscilloscope-cmd.py
@@ -30,6 +30,7 @@ def usage():
-f, --field=FIELD FIELD to plot [Default: 2]
-g, --geometry=GEOMETRY X geometry specification (see "X" man page)
-m, --max_value=MAX_VALUE MAX_VALUE for the scale
+ -M, --sample_multiplier=VALUE VALUE to multiply each sample
-n, --noscale Do not scale when a sample is > MAX_SCALE
-s, --nr_samples_on_screen=NR Show NR samples on screen
-S, --snapshot_samples=NR Take NR samples, a snapshot and exit
@@ -39,9 +40,10 @@ def usage():
def main():
try:
opts, args = getopt.getopt(sys.argv[1:],
- "d:f:g:hm:ns:S:u:",
+ "d:f:g:hM:m:ns:S:u:",
("geometry=",
"help", "max_value=",
+ "sample_multiplier=",
"noscale",
"nr_samples_on_screen=",
"snapshot_samples=",
@@ -52,6 +54,7 @@ def main():
sys.exit(2)
max_value = 250
+ sample_multiplier = 1
snapshot_samples = 0
delimiter = ':'
field = 2
@@ -73,6 +76,8 @@ def main():
return
elif o in ("-m", "--max_value"):
max_value = int(a)
+ elif o in ("-M", "--sample_multiplier"):
+ sample_multiplier = float(a)
elif o in ("-n", "--noscale"):
scale = False
elif o in ("-s", "--nr_samples_on_screen"):
@@ -86,7 +91,8 @@ def main():
nr_samples_on_screen = nr_samples_on_screen,
delimiter = delimiter, field = field,
ylabel = "%s (%s)" % (ylabel, unitlabel),
- geometry = geometry, scale = scale)
+ geometry = geometry, scale = scale,
+ sample_multiplier = sample_multiplier)
o.run()
gtk.main()
diff --git a/tuna/oscilloscope.py b/tuna/oscilloscope.py
index ac9c515..f6247e8 100755
--- a/tuna/oscilloscope.py
+++ b/tuna/oscilloscope.py
@@ -30,6 +30,11 @@ class histogram_frame(gtk.Frame):
max_value = 500, nr_entries = 10,
facecolor = "white"):
gtk.Frame.__init__(self, title)
+
+ self.fraction = int(max_value / nr_entries)
+ if self.fraction == 0:
+ self.fraction = max_value
+ nr_entries = 1
self.max_value = max_value
self.nr_entries = nr_entries
self.nr_samples = 0
@@ -42,7 +47,6 @@ class histogram_frame(gtk.Frame):
self.buckets = [ 0, ] * (nr_entries + 1)
self.buckets_bar = [ None, ] * (nr_entries + 1)
self.buckets_counter = [ None, ] * (nr_entries + 1)
- self.fraction = int(self.max_value / self.nr_entries)
prefix = "<="
for bucket in range(self.nr_entries + 1):
@@ -384,7 +388,7 @@ class ftrace_window(gtk.Window):
class cyclictestoscope(oscilloscope):
def __init__(self, max_value, snapshot_samples = 0, nr_samples_on_screen = 500,
delimiter = ':', field = 2, ylabel = "Latency",
- geometry = None, scale = True):
+ geometry = None, scale = True, sample_multiplier = 1):
oscilloscope.__init__(self, self.get_sample,
title = "CyclictestoSCOPE",
nr_samples_on_screen = nr_samples_on_screen,
@@ -396,6 +400,7 @@ class cyclictestoscope(oscilloscope):
self.connect("destroy", self.quit)
self.delimiter = delimiter
+ self.sample_multiplier = sample_multiplier
self.field = field
self.latency_tracer = os.access("/sys/kernel/debug/tracing/trace", os.R_OK)
if self.latency_tracer:
@@ -412,7 +417,11 @@ class cyclictestoscope(oscilloscope):
def get_sample(self):
fields = sys.stdin.readline().split(self.delimiter)
- sample = float(fields[self.field])
+ try:
+ sample = float(fields[self.field]) * self.sample_multiplier
+ except:
+ print "fields=%s, self.field=%s,self.delimiter=%s" % (fields, self.field, self.delimiter)
+ return None
if self.latency_tracer:
del self.traces[0]