diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2009-08-25 14:03:04 -0300 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2009-08-25 14:03:04 -0300 |
commit | 82c94f49e729b1272c2f11ede36096a177fa924b (patch) | |
tree | 3b8672653fd6e05dbb6dfe01b5d7cd6caa0b846b | |
parent | ed997b6a2b73f50c5c2c40482cb46752ef151688 (diff) | |
download | tuna-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-x | oscilloscope-cmd.py | 10 | ||||
-rwxr-xr-x | tuna/oscilloscope.py | 15 |
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] |