gen-performance-graph 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/usr/bin/python
  2. import sys
  3. import anydbm
  4. from pychart import *
  5. def get_timing(kind):
  6. database = anydbm.open('performance-numbers', 'c')
  7. list_ = []
  8. for key in database.keys():
  9. fields = key.split()
  10. #print fields[0], kind
  11. if fields[0] == kind:
  12. set_size = float(fields[1])
  13. duration = float(database[key])
  14. list_.append( ( set_size, duration ) )
  15. database.close()
  16. list_.sort()
  17. return list_
  18. #def get_timing(filename):
  19. # file_ = open(filename, 'r')
  20. # list_ = []
  21. # for line in file_:
  22. # fields = line.split()
  23. # set_size = float(fields[0])
  24. # duration = float(fields[1])
  25. # list_.append( ( set_size, duration ) )
  26. # file_.close()
  27. # return list_
  28. def get_hybrid_timing():
  29. return get_timing('hybrid')
  30. def get_array_timing():
  31. return get_timing('array')
  32. def get_seek_timing():
  33. return get_timing('seek')
  34. def get_mmap_timing():
  35. return get_timing('mmap')
  36. def desired_y_max(*list_):
  37. maximum = 0.0
  38. for element in list_:
  39. for set_size, duration in element:
  40. maximum = max(duration, maximum)
  41. return maximum
  42. def main():
  43. theme.get_options()
  44. theme.output_format = 'pdf'
  45. theme.use_color = 1
  46. theme.output_file = 'performance-graph.pdf'
  47. theme.default_font_size = 15
  48. theme.reinitialize()
  49. width = 800
  50. height = width * 4 // 5
  51. size = (width, height)
  52. hybrid_timing_data = get_hybrid_timing()
  53. print 'hybrid', hybrid_timing_data
  54. array_timing_data = get_array_timing()
  55. print 'array', array_timing_data
  56. seek_timing_data = get_seek_timing()
  57. print 'seek', seek_timing_data
  58. mmap_timing_data = get_mmap_timing()
  59. print 'mmap', mmap_timing_data
  60. y_max = desired_y_max(array_timing_data, seek_timing_data, hybrid_timing_data, mmap_timing_data)
  61. can = canvas.default_canvas()
  62. ar = area.T(
  63. size = size,
  64. legend=legend.T(),
  65. x_range = (1, None),
  66. y_range = (0.0001, y_max + 100),
  67. x_coord = log_coord.T(),
  68. y_coord = log_coord.T(),
  69. x_axis = axis.X(format="%g", label="Number of elements in set"),
  70. y_axis = axis.Y(format="%g", label="Seconds"),
  71. )
  72. lp = line_plot.T(data=array_timing_data, label="Array")
  73. ar.add_plot(lp)
  74. lp = line_plot.T(data=seek_timing_data, label="Seek")
  75. ar.add_plot(lp)
  76. lp = line_plot.T(data=hybrid_timing_data, label="Hybrid")
  77. ar.add_plot(lp)
  78. lp = line_plot.T(data=mmap_timing_data, label="mmap")
  79. ar.add_plot(lp)
  80. ar.draw()
  81. #can.show(ar.x_pos(4), ar.y_pos(970), "/a50{}seek")
  82. main()