Home Reference Source

cables_dev/cables/src/core/cg/sg_fpscounter.js

  1. import { Events } from "cables-shared-client";
  2.  
  3. export default class FpsCounter extends Events
  4. {
  5. constructor()
  6. {
  7. super();
  8. this._timeStartFrame = 0;
  9. this._timeStartSecond = 0;
  10. this._fpsCounter = 0;
  11. this._msCounter = 0;
  12. this._frameCount = 0;
  13.  
  14. this.stats = { "ms": 0, "fps": 0 };
  15. }
  16.  
  17. get frameCount()
  18. {
  19. return this._frameCount;
  20. }
  21.  
  22. startFrame()
  23. {
  24. this._timeStartFrame = CABLES.now();
  25. }
  26.  
  27. endFrame()
  28. {
  29. this._frameCount++;
  30. this._fpsCounter++;
  31.  
  32. const timeFrame = CABLES.now() - this._timeStartFrame;
  33. this._msCounter += timeFrame;
  34.  
  35. if (CABLES.now() - this._timeStartSecond > 1000)
  36. {
  37. this.endSecond();
  38. }
  39. }
  40.  
  41. endSecond()
  42. {
  43. this.stats.fps = this._fpsCounter;
  44. this.stats.ms = Math.round(this._msCounter / this._fpsCounter * 100) / 100;
  45.  
  46. this.emitEvent("performance", this.stats);
  47.  
  48. // reset
  49. this._fpsCounter = 0;
  50. this._msCounter = 0;
  51. this._timeStartSecond = CABLES.now();
  52. }
  53. }