PageRenderTime 47ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/python/framerate.py

https://bitbucket.org/lonkero173/pulse
Python | 105 lines | 57 code | 25 blank | 23 comment | 6 complexity | 781cc3da586fa4243bde05337a16990c MD5 | raw file
Possible License(s): GPL-2.0
  1. # -*- coding: utf-8 -*-
  2. import fofclone
  3. class framerate:
  4. def __init__(self):
  5. import fofclone #having trouble with some aspects of python embedding.... this is necessary at the moment, wish I knew why...
  6. self.module_ref=fofclone
  7. self.render_time=self.module_ref.EVERY_FRAME
  8. self.is_global=True
  9. self.name="Framerate display" #required
  10. self.description="Prints framerate data, lots of it" #required
  11. self.sframerate=0.0
  12. self.hframerate=0.0
  13. self.framecount=0
  14. self.framedelay=0
  15. self.updatetime=0
  16. self.low=100000000.0 #this is an impossible framerate a.t.m (if SDL_Delay(10) is respected...)
  17. self.high=0.0
  18. self.average=0.0
  19. self.time_played=0
  20. def render(self):
  21. # do the updating work, there is so little of it that there is no point in a seperate update function
  22. self.framecount+=1;
  23. self.framedelay=self.module_ref.get_framedelay()
  24. self.time_played+=self.framedelay
  25. self.updatetime = self.module_ref.get_updatetime()
  26. if(self.framedelay>0.0):
  27. self.sframerate*=0.99
  28. self.sframerate+=10.0/self.framedelay
  29. self.hframerate=1000.0/self.framedelay
  30. #self.average=(self.average*(self.framecount-1)+self.hframerate)/self.framecount
  31. self.average+=(self.hframerate-self.average)/self.framecount
  32. else:
  33. # getting a frame in <1 ms means on average +1000 to the framerate
  34. self.sframerate*=0.95
  35. self.sframerate+=50.0/1000.0
  36. self.hframerate+=1000.0
  37. # ignore first 10 frames for minimum framerate calculations as there is only one frame update during the entire loading process (but more may come...)
  38. if(self.hframerate<self.low and self.framecount>10): self.low=self.hframerate;
  39. if(self.hframerate>self.high): self.high=self.hframerate;
  40. # print the frame that is being drawn
  41. self.module_ref.simple_print("Frame:",0.50,0.60)
  42. self.module_ref.simple_print("%d"%(self.framecount),0.80,0.60)
  43. # print the render time
  44. self.module_ref.simple_print("Update Time:",0.50,0.55)
  45. self.module_ref.simple_print("%d"%(self.updatetime),0.80,0.55)
  46. # a smooth framerate
  47. self.module_ref.simple_print("Fps (Smooth):",0.50,0.50)
  48. self.module_ref.simple_print("%5.3f "%(self.sframerate),0.80,0.50)
  49. # a hard framerate, no averaging out
  50. self.module_ref.simple_print("Fps (Absolute):",0.50,0.45)
  51. self.module_ref.simple_print("%5.3f"%(self.hframerate),0.80,0.45)
  52. #high
  53. self.module_ref.simple_print("High:",0.50,0.40)
  54. self.module_ref.simple_print("%5.3f"%(self.high),0.80,0.40)
  55. #low
  56. self.module_ref.simple_print("Low:",0.50,0.35)
  57. self.module_ref.simple_print("%5.3f"%(self.low),0.80,0.35)
  58. #average
  59. self.module_ref.simple_print("Average:",0.50,0.30)
  60. self.module_ref.simple_print("%5.3f"%(self.average),0.80,0.30)
  61. #print self.sframerate
  62. def save_settings(self):
  63. self.module_ref.save_setting("time_played",str(self.time_played))
  64. def load_settings(self):
  65. temp=self.module_ref.load_setting("time_played")
  66. try:
  67. self.time_played=long(temp)
  68. except:
  69. pass
  70. """
  71. unused functions
  72. def build_menu(self):
  73. pass
  74. def update(self):
  75. pass
  76. """
  77. #print "a",hasattr(scoredisplayer(), "name"),"b"
  78. fofclone.add_widget(framerate)