stats.min.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // stats.js - http://github.com/mrdoob/stats.js
  2. var Stats = function() {
  3. function h(a) {
  4. c.appendChild(a.dom);
  5. return a
  6. }
  7. function k(a) {
  8. for (var d = 0; d < c.children.length; d++)
  9. c.children[d].style.display = d === a ? "block" : "none";
  10. l = a
  11. }
  12. var l = 0
  13. , c = document.createElement("div");
  14. c.style.cssText = "position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";
  15. c.addEventListener("click", function(a) {
  16. a.preventDefault();
  17. k(++l % c.children.length)
  18. }, !1);
  19. var g = (performance || Date).now()
  20. , e = g
  21. , a = 0
  22. , r = h(new Stats.Panel("FPS","#0ff","#002"))
  23. , f = h(new Stats.Panel("MS","#0f0","#020"));
  24. var info = {dur:0, aveFps:0}
  25. if (self.performance && self.performance.memory)
  26. var t = h(new Stats.Panel("MB","#f08","#201"));
  27. k(0);
  28. return {
  29. REVISION: 16,
  30. dom: c,
  31. addPanel: h,
  32. showPanel: k,
  33. begin: function() {
  34. g = (performance || Date).now()
  35. },
  36. end: function() {
  37. /* a++;
  38. var c = (performance || Date).now();
  39. if(f.dom.clientWidth) f.update(c - g, 200);
  40. if (c > e + 1E3 && (r.dom.clientWidth && r.update(1E3 * a / (c - e), 100),
  41. e = c,
  42. a = 0,
  43. t && t.dom.clientWidth)) {
  44. var d = performance.memory;
  45. t.update(d.usedJSHeapSize / 1048576, d.jsHeapSizeLimit / 1048576)
  46. }
  47. return 1E3 * a / (c - e)//c */
  48. a++;
  49. var c = (performance || Date).now();
  50. if(c > e + 1E3){
  51. var v = 1E3 * a / (c - e)
  52. var {min,max} = r.update(v, 100)
  53. e = c
  54. a = 0
  55. info = {min, max, fps:v, dur : c - g, aveFps:(info.aveFps * (info.dur / 1000 ) + v ) / ((c - g) / 1000)}
  56. return info
  57. }
  58. },
  59. update: function() {
  60. var a1 = this.end()
  61. return a1
  62. },
  63. domElement: c,
  64. setMode: k
  65. }
  66. };
  67. Stats.Panel = function(h, k, l) {
  68. var c = Infinity
  69. , g = 0
  70. , e = Math.round
  71. , a = e(window.devicePixelRatio || 1)
  72. , r = 80 * a
  73. , f = 48 * a
  74. , t = 3 * a
  75. , u = 2 * a
  76. , d = 3 * a
  77. , m = 15 * a
  78. , n = 74 * a
  79. , p = 30 * a
  80. , q = document.createElement("canvas");
  81. q.width = r;
  82. q.height = f;
  83. q.style.cssText = "width:80px;height:48px";
  84. var b = q.getContext("2d");
  85. b.font = "bold " + 9 * a + "px Helvetica,Arial,sans-serif";
  86. b.textBaseline = "top";
  87. b.fillStyle = l;
  88. b.fillRect(0, 0, r, f);
  89. b.fillStyle = k;
  90. b.fillText(h, t, u);
  91. b.fillRect(d, m, n, p);
  92. b.fillStyle = l;
  93. b.globalAlpha = .9;
  94. b.fillRect(d, m, n, p);
  95. return {
  96. dom: q,
  97. update: function(f, v) {
  98. c = Math.min(c, f);
  99. g = Math.max(g, f);
  100. b.fillStyle = l;
  101. b.globalAlpha = 1;
  102. b.fillRect(0, 0, r, m);
  103. b.fillStyle = k;
  104. b.fillText(e(f) + " " + h + " (" + e(c) + "-" + e(g) + ")", t, u);
  105. b.drawImage(q, d + a, m, n - a, p, d, m, n - a, p);
  106. b.fillRect(d + n - a, m, a, p);
  107. b.fillStyle = l;
  108. b.globalAlpha = .9;
  109. b.fillRect(d + n - a, m, a, e((1 - f / v) * p))
  110. return {min:c, max:g}
  111. }
  112. }
  113. }
  114. ;
  115. "object" === typeof module && (module.exports = Stats);