|
@@ -1,38 +1,45 @@
|
|
|
#!/usr/bin/python
|
|
|
|
|
|
-#
|
|
|
-# Copyright (C) 2000-2005 by Yasushi Saito (yasushi.saito@gmail.com)
|
|
|
-#
|
|
|
-# Pychart is free software; you can redistribute it and/or modify it
|
|
|
-# under the terms of the GNU General Public License as published by the
|
|
|
-# Free Software Foundation; either version 2, or (at your option) any
|
|
|
-# later version.
|
|
|
-#
|
|
|
-# Pychart is distributed in the hope that it will be useful, but WITHOUT
|
|
|
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
|
-# for more details.
|
|
|
-#
|
|
|
-
|
|
|
import sys
|
|
|
+import anydbm
|
|
|
from pychart import *
|
|
|
|
|
|
-def get_timing(filename):
|
|
|
- file_ = open(filename, 'r')
|
|
|
+def get_timing(kind):
|
|
|
+ database = anydbm.open('performance-numbers', 'r')
|
|
|
list_ = []
|
|
|
- for line in file_:
|
|
|
- fields = line.split()
|
|
|
- set_size = float(fields[0])
|
|
|
- duration = float(fields[1])
|
|
|
- list_.append( ( set_size, duration ) )
|
|
|
- file_.close()
|
|
|
+ for key in database.keys():
|
|
|
+ fields = key.split()
|
|
|
+ #print fields[0], kind
|
|
|
+ if fields[0] == kind:
|
|
|
+ set_size = float(fields[1])
|
|
|
+ duration = float(database[key])
|
|
|
+ list_.append( ( set_size, duration ) )
|
|
|
+ database.close()
|
|
|
+ list_.sort()
|
|
|
return list_
|
|
|
|
|
|
+#def get_timing(filename):
|
|
|
+# file_ = open(filename, 'r')
|
|
|
+# list_ = []
|
|
|
+# for line in file_:
|
|
|
+# fields = line.split()
|
|
|
+# set_size = float(fields[0])
|
|
|
+# duration = float(fields[1])
|
|
|
+# list_.append( ( set_size, duration ) )
|
|
|
+# file_.close()
|
|
|
+# return list_
|
|
|
+
|
|
|
+def get_hybrid_timing():
|
|
|
+ return get_timing('hybrid')
|
|
|
+
|
|
|
def get_array_timing():
|
|
|
- return get_timing('array.txt')
|
|
|
+ return get_timing('array')
|
|
|
|
|
|
def get_seek_timing():
|
|
|
- return get_timing('seek.txt')
|
|
|
+ return get_timing('seek')
|
|
|
+
|
|
|
+def get_mmap_timing():
|
|
|
+ return get_timing('mmap')
|
|
|
|
|
|
def desired_y_max(*list_):
|
|
|
maximum = 0.0
|
|
@@ -45,16 +52,24 @@ def main():
|
|
|
theme.get_options()
|
|
|
theme.output_format = 'pdf'
|
|
|
theme.use_color = 1
|
|
|
+ theme.output_file = 'performance-graph.pdf'
|
|
|
+ theme.default_font_size = 15
|
|
|
theme.reinitialize()
|
|
|
|
|
|
width = 800
|
|
|
height = width * 4 // 5
|
|
|
size = (width, height)
|
|
|
|
|
|
+ hybrid_timing_data = get_hybrid_timing()
|
|
|
+ print 'hybrid', hybrid_timing_data
|
|
|
array_timing_data = get_array_timing()
|
|
|
+ print 'array', array_timing_data
|
|
|
seek_timing_data = get_seek_timing()
|
|
|
+ print 'seek', seek_timing_data
|
|
|
+ mmap_timing_data = get_mmap_timing()
|
|
|
+ print 'mmap', mmap_timing_data
|
|
|
|
|
|
- y_max = desired_y_max(array_timing_data, seek_timing_data)
|
|
|
+ y_max = desired_y_max(array_timing_data, seek_timing_data, hybrid_timing_data, mmap_timing_data)
|
|
|
|
|
|
can = canvas.default_canvas()
|
|
|
|
|
@@ -65,8 +80,8 @@ def main():
|
|
|
y_range = (0.0001, y_max + 100),
|
|
|
x_coord = log_coord.T(),
|
|
|
y_coord = log_coord.T(),
|
|
|
- x_axis = axis.X(format="%d", label="Set size"),
|
|
|
- y_axis = axis.Y(format="%d", label="Time"),
|
|
|
+ x_axis = axis.X(format="%g", label="Number of elements in set"),
|
|
|
+ y_axis = axis.Y(format="%g", label="Seconds"),
|
|
|
)
|
|
|
|
|
|
lp = line_plot.T(data=array_timing_data, label="Array")
|
|
@@ -75,6 +90,12 @@ def main():
|
|
|
lp = line_plot.T(data=seek_timing_data, label="Seek")
|
|
|
ar.add_plot(lp)
|
|
|
|
|
|
+ lp = line_plot.T(data=hybrid_timing_data, label="Hybrid")
|
|
|
+ ar.add_plot(lp)
|
|
|
+
|
|
|
+ lp = line_plot.T(data=mmap_timing_data, label="mmap")
|
|
|
+ ar.add_plot(lp)
|
|
|
+
|
|
|
ar.draw()
|
|
|
|
|
|
#can.show(ar.x_pos(4), ar.y_pos(970), "/a50{}seek")
|