stats-gl 3.1.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,8 +35,10 @@ import Stats from "stats-gl";
35
35
  // create a new Stats object
36
36
  const stats = new Stats({
37
37
  trackGPU: false,
38
- logsPerSecond: 20,
39
- samplesLog: 100,
38
+ trackHz: false,
39
+ logsPerSecond: 4,
40
+ graphsPerSecond: 30,
41
+ samplesLog: 40,
40
42
  samplesGraph: 10,
41
43
  precision: 2,
42
44
  horizontal: true,
@@ -120,6 +122,9 @@ import { StatsGl } from '@tresjs/cientos'
120
122
  The constructor for the Stats class accepts an options object with the following properties:
121
123
 
122
124
  - `logsPerSecond`: How often to log performance data, in logs per second.
125
+ - `graphsPerSecond`: How often to update the graph, in graphs per second.
126
+ - `trackGPU`: A boolean value to enable or disable GPU tracking.
127
+ - `trackHz`: A boolean value to enable or disable Hz tracking.
123
128
  - `samplesLog`: Number of recent log samples to keep for computing averages.
124
129
  - `samplesGraph`: Number of recent graph samples to keep for computing averages.
125
130
  - `precision`: Precision of the data, in number of decimal places (only affects CPU and GPU).
package/dist/main.cjs CHANGED
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  const panel = require("./panel.cjs");
3
+ const panelVsync = require("./panelVsync.cjs");
3
4
  const _Stats = class _Stats2 {
4
5
  constructor({
5
6
  trackGPU = false,
7
+ trackHz = false,
6
8
  logsPerSecond = 4,
7
9
  graphsPerSecond = 30,
8
10
  samplesLog = 40,
@@ -25,6 +27,7 @@ const _Stats = class _Stats2 {
25
27
  this.totalGpuDurationCompute = 0;
26
28
  this.gpuPanel = null;
27
29
  this.gpuPanelCompute = null;
30
+ this.vsyncPanel = null;
28
31
  this.averageFps = { logs: [], graph: [] };
29
32
  this.averageCpu = { logs: [], graph: [] };
30
33
  this.averageGpu = { logs: [], graph: [] };
@@ -33,6 +36,20 @@ const _Stats = class _Stats2 {
33
36
  this.lastMin = {};
34
37
  this.lastMax = {};
35
38
  this.lastValue = {};
39
+ this.VSYNC_RATES = [
40
+ { refreshRate: 60, frameTime: 16.67 },
41
+ { refreshRate: 75, frameTime: 13.33 },
42
+ { refreshRate: 90, frameTime: 11.11 },
43
+ { refreshRate: 120, frameTime: 8.33 },
44
+ { refreshRate: 144, frameTime: 6.94 },
45
+ { refreshRate: 165, frameTime: 6.06 },
46
+ { refreshRate: 240, frameTime: 4.17 }
47
+ ];
48
+ this.detectedVSync = null;
49
+ this.frameTimeHistory = [];
50
+ this.HISTORY_SIZE = 120;
51
+ this.VSYNC_THRESHOLD = 0.05;
52
+ this.lastFrameTime = 0;
36
53
  this.handleClick = (event) => {
37
54
  event.preventDefault();
38
55
  this.showPanel(++this.mode % this.dom.children.length);
@@ -49,6 +66,7 @@ const _Stats = class _Stats2 {
49
66
  this.horizontal = horizontal;
50
67
  this.minimal = minimal;
51
68
  this.trackGPU = trackGPU;
69
+ this.trackHz = trackHz;
52
70
  this.samplesLog = samplesLog;
53
71
  this.samplesGraph = samplesGraph;
54
72
  this.precision = precision;
@@ -63,6 +81,11 @@ const _Stats = class _Stats2 {
63
81
  this.prevCpuTime = this.beginTime;
64
82
  this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
65
83
  this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
84
+ if (this.trackHz === true) {
85
+ this.vsyncPanel = new panelVsync.PanelVSync("", "#f0f", "#202");
86
+ this.dom.appendChild(this.vsyncPanel.canvas);
87
+ this.vsyncPanel.setOffset(56, 35);
88
+ }
66
89
  this.setupEventListeners();
67
90
  }
68
91
  initializeDOM() {
@@ -92,8 +115,14 @@ const _Stats = class _Stats2 {
92
115
  return;
93
116
  if (await this.handleWebGPURenderer(canvasOrGL))
94
117
  return;
95
- if (!this.initializeWebGL(canvasOrGL))
118
+ if (this.initializeWebGL(canvasOrGL)) {
119
+ if (this.trackGPU) {
120
+ this.initializeGPUTracking();
121
+ }
96
122
  return;
123
+ } else {
124
+ console.error("Stats-gl: Failed to initialize WebGL context");
125
+ }
97
126
  }
98
127
  handleThreeRenderer(renderer) {
99
128
  if (renderer.isWebGLRenderer && !this.threeRendererPatched) {
@@ -242,7 +271,43 @@ const _Stats = class _Stats2 {
242
271
  }
243
272
  });
244
273
  }
274
+ detectVSync(currentTime) {
275
+ if (this.lastFrameTime === 0) {
276
+ this.lastFrameTime = currentTime;
277
+ return;
278
+ }
279
+ const frameTime = currentTime - this.lastFrameTime;
280
+ this.lastFrameTime = currentTime;
281
+ this.frameTimeHistory.push(frameTime);
282
+ if (this.frameTimeHistory.length > this.HISTORY_SIZE) {
283
+ this.frameTimeHistory.shift();
284
+ }
285
+ if (this.frameTimeHistory.length < 60)
286
+ return;
287
+ const avgFrameTime = this.frameTimeHistory.reduce((a, b) => a + b) / this.frameTimeHistory.length;
288
+ const variance = this.frameTimeHistory.reduce((acc, time) => acc + Math.pow(time - avgFrameTime, 2), 0) / this.frameTimeHistory.length;
289
+ const stability = Math.sqrt(variance);
290
+ if (stability > 2) {
291
+ this.detectedVSync = null;
292
+ return;
293
+ }
294
+ let closestMatch = null;
295
+ let smallestDiff = Infinity;
296
+ for (const rate of this.VSYNC_RATES) {
297
+ const diff = Math.abs(avgFrameTime - rate.frameTime);
298
+ if (diff < smallestDiff) {
299
+ smallestDiff = diff;
300
+ closestMatch = rate;
301
+ }
302
+ }
303
+ if (closestMatch && smallestDiff / closestMatch.frameTime <= this.VSYNC_THRESHOLD) {
304
+ this.detectedVSync = closestMatch;
305
+ } else {
306
+ this.detectedVSync = null;
307
+ }
308
+ }
245
309
  endInternal() {
310
+ var _a;
246
311
  const currentTime = performance.now();
247
312
  this.frameTimes.push(currentTime);
248
313
  while (this.frameTimes.length > 0 && this.frameTimes[0] <= currentTime - 1e3) {
@@ -266,6 +331,13 @@ const _Stats = class _Stats2 {
266
331
  if (shouldUpdateGraph) {
267
332
  this.prevGraphTime = currentTime;
268
333
  }
334
+ if (this.vsyncPanel !== null) {
335
+ this.detectVSync(currentTime);
336
+ const vsyncValue = ((_a = this.detectedVSync) == null ? void 0 : _a.refreshRate) || 0;
337
+ if (shouldUpdateText && vsyncValue > 0) {
338
+ this.vsyncPanel.update(vsyncValue, vsyncValue);
339
+ }
340
+ }
269
341
  return currentTime;
270
342
  }
271
343
  updatePanelComponents(panel2, averageArray, precision, shouldUpdateText, shouldUpdateGraph) {
package/dist/main.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.cjs","sources":["../lib/main.ts"],"sourcesContent":null,"names":["_Stats","panel","Panel"],"mappings":"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"}
1
+ {"version":3,"file":"main.cjs","sources":["../lib/main.ts"],"sourcesContent":null,"names":["_Stats","PanelVSync","panel","Panel"],"mappings":"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"}
package/dist/main.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { Panel } from "./panel.js";
2
+ import { PanelVSync } from "./panelVsync.js";
2
3
  const _Stats = class _Stats2 {
3
4
  constructor({
4
5
  trackGPU = false,
6
+ trackHz = false,
5
7
  logsPerSecond = 4,
6
8
  graphsPerSecond = 30,
7
9
  samplesLog = 40,
@@ -24,6 +26,7 @@ const _Stats = class _Stats2 {
24
26
  this.totalGpuDurationCompute = 0;
25
27
  this.gpuPanel = null;
26
28
  this.gpuPanelCompute = null;
29
+ this.vsyncPanel = null;
27
30
  this.averageFps = { logs: [], graph: [] };
28
31
  this.averageCpu = { logs: [], graph: [] };
29
32
  this.averageGpu = { logs: [], graph: [] };
@@ -32,6 +35,20 @@ const _Stats = class _Stats2 {
32
35
  this.lastMin = {};
33
36
  this.lastMax = {};
34
37
  this.lastValue = {};
38
+ this.VSYNC_RATES = [
39
+ { refreshRate: 60, frameTime: 16.67 },
40
+ { refreshRate: 75, frameTime: 13.33 },
41
+ { refreshRate: 90, frameTime: 11.11 },
42
+ { refreshRate: 120, frameTime: 8.33 },
43
+ { refreshRate: 144, frameTime: 6.94 },
44
+ { refreshRate: 165, frameTime: 6.06 },
45
+ { refreshRate: 240, frameTime: 4.17 }
46
+ ];
47
+ this.detectedVSync = null;
48
+ this.frameTimeHistory = [];
49
+ this.HISTORY_SIZE = 120;
50
+ this.VSYNC_THRESHOLD = 0.05;
51
+ this.lastFrameTime = 0;
35
52
  this.handleClick = (event) => {
36
53
  event.preventDefault();
37
54
  this.showPanel(++this.mode % this.dom.children.length);
@@ -48,6 +65,7 @@ const _Stats = class _Stats2 {
48
65
  this.horizontal = horizontal;
49
66
  this.minimal = minimal;
50
67
  this.trackGPU = trackGPU;
68
+ this.trackHz = trackHz;
51
69
  this.samplesLog = samplesLog;
52
70
  this.samplesGraph = samplesGraph;
53
71
  this.precision = precision;
@@ -62,6 +80,11 @@ const _Stats = class _Stats2 {
62
80
  this.prevCpuTime = this.beginTime;
63
81
  this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
64
82
  this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
83
+ if (this.trackHz === true) {
84
+ this.vsyncPanel = new PanelVSync("", "#f0f", "#202");
85
+ this.dom.appendChild(this.vsyncPanel.canvas);
86
+ this.vsyncPanel.setOffset(56, 35);
87
+ }
65
88
  this.setupEventListeners();
66
89
  }
67
90
  initializeDOM() {
@@ -91,8 +114,14 @@ const _Stats = class _Stats2 {
91
114
  return;
92
115
  if (await this.handleWebGPURenderer(canvasOrGL))
93
116
  return;
94
- if (!this.initializeWebGL(canvasOrGL))
117
+ if (this.initializeWebGL(canvasOrGL)) {
118
+ if (this.trackGPU) {
119
+ this.initializeGPUTracking();
120
+ }
95
121
  return;
122
+ } else {
123
+ console.error("Stats-gl: Failed to initialize WebGL context");
124
+ }
96
125
  }
97
126
  handleThreeRenderer(renderer) {
98
127
  if (renderer.isWebGLRenderer && !this.threeRendererPatched) {
@@ -241,7 +270,43 @@ const _Stats = class _Stats2 {
241
270
  }
242
271
  });
243
272
  }
273
+ detectVSync(currentTime) {
274
+ if (this.lastFrameTime === 0) {
275
+ this.lastFrameTime = currentTime;
276
+ return;
277
+ }
278
+ const frameTime = currentTime - this.lastFrameTime;
279
+ this.lastFrameTime = currentTime;
280
+ this.frameTimeHistory.push(frameTime);
281
+ if (this.frameTimeHistory.length > this.HISTORY_SIZE) {
282
+ this.frameTimeHistory.shift();
283
+ }
284
+ if (this.frameTimeHistory.length < 60)
285
+ return;
286
+ const avgFrameTime = this.frameTimeHistory.reduce((a, b) => a + b) / this.frameTimeHistory.length;
287
+ const variance = this.frameTimeHistory.reduce((acc, time) => acc + Math.pow(time - avgFrameTime, 2), 0) / this.frameTimeHistory.length;
288
+ const stability = Math.sqrt(variance);
289
+ if (stability > 2) {
290
+ this.detectedVSync = null;
291
+ return;
292
+ }
293
+ let closestMatch = null;
294
+ let smallestDiff = Infinity;
295
+ for (const rate of this.VSYNC_RATES) {
296
+ const diff = Math.abs(avgFrameTime - rate.frameTime);
297
+ if (diff < smallestDiff) {
298
+ smallestDiff = diff;
299
+ closestMatch = rate;
300
+ }
301
+ }
302
+ if (closestMatch && smallestDiff / closestMatch.frameTime <= this.VSYNC_THRESHOLD) {
303
+ this.detectedVSync = closestMatch;
304
+ } else {
305
+ this.detectedVSync = null;
306
+ }
307
+ }
244
308
  endInternal() {
309
+ var _a;
245
310
  const currentTime = performance.now();
246
311
  this.frameTimes.push(currentTime);
247
312
  while (this.frameTimes.length > 0 && this.frameTimes[0] <= currentTime - 1e3) {
@@ -265,6 +330,13 @@ const _Stats = class _Stats2 {
265
330
  if (shouldUpdateGraph) {
266
331
  this.prevGraphTime = currentTime;
267
332
  }
333
+ if (this.vsyncPanel !== null) {
334
+ this.detectVSync(currentTime);
335
+ const vsyncValue = ((_a = this.detectedVSync) == null ? void 0 : _a.refreshRate) || 0;
336
+ if (shouldUpdateText && vsyncValue > 0) {
337
+ this.vsyncPanel.update(vsyncValue, vsyncValue);
338
+ }
339
+ }
268
340
  return currentTime;
269
341
  }
270
342
  updatePanelComponents(panel, averageArray, precision, shouldUpdateText, shouldUpdateGraph) {
package/dist/main.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sources":["../lib/main.ts"],"sourcesContent":null,"names":["_Stats"],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sources":["../lib/main.ts"],"sourcesContent":null,"names":["_Stats"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"panel.cjs","sources":["../lib/panel.ts"],"sourcesContent":null,"names":[],"mappings":"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"}
1
+ {"version":3,"file":"panel.cjs","sources":["../lib/panel.ts"],"sourcesContent":null,"names":[],"mappings":"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"}
package/dist/panel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"panel.js","sources":["../lib/panel.ts"],"sourcesContent":null,"names":[],"mappings":"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"}
1
+ {"version":3,"file":"panel.js","sources":["../lib/panel.ts"],"sourcesContent":null,"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const panel = require("./panel.cjs");
4
+ class PanelVSync extends panel.Panel {
5
+ constructor(name, fg, bg) {
6
+ super(name, fg, bg);
7
+ this.vsyncValue = 0;
8
+ this.SMALL_HEIGHT = 9 * this.PR;
9
+ this.HEIGHT = this.SMALL_HEIGHT;
10
+ this.TEXT_Y = 0 * this.PR;
11
+ this.canvas.height = this.HEIGHT;
12
+ this.canvas.style.height = "9px";
13
+ this.canvas.style.cssText = `
14
+ width: 90px;
15
+ height: 9px;
16
+ position: absolute;
17
+ top: 0;
18
+ left: 0;
19
+ pointer-events: none; // Allow clicks to pass through
20
+ `;
21
+ this.initializeCanvas();
22
+ }
23
+ initializeCanvas() {
24
+ if (!this.context)
25
+ return;
26
+ this.context.imageSmoothingEnabled = false;
27
+ this.context.font = "bold " + 9 * this.PR + "px Helvetica,Arial,sans-serif";
28
+ this.context.textBaseline = "top";
29
+ this.context.globalAlpha = 1;
30
+ }
31
+ // Override update for VSync-specific display
32
+ update(value, _maxValue, _decimals = 0) {
33
+ if (!this.context)
34
+ return;
35
+ this.vsyncValue = value;
36
+ this.context.clearRect(0, 0, this.WIDTH, this.HEIGHT);
37
+ this.context.globalAlpha = 1;
38
+ this.context.fillStyle = this.bg;
39
+ this.context.fillText(
40
+ `${value.toFixed(0)}Hz`,
41
+ this.TEXT_X,
42
+ this.TEXT_Y
43
+ );
44
+ }
45
+ // Override updateGraph to do nothing (we don't need a graph for VSync)
46
+ updateGraph(_valueGraph, _maxGraph) {
47
+ return;
48
+ }
49
+ // Method to set the offset position relative to parent panel
50
+ setOffset(x, y) {
51
+ this.canvas.style.transform = `translate(${x}px, ${y}px)`;
52
+ }
53
+ }
54
+ exports.PanelVSync = PanelVSync;
55
+ //# sourceMappingURL=panelVsync.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panelVsync.cjs","sources":["../lib/panelVsync.ts"],"sourcesContent":null,"names":["Panel"],"mappings":";;;AAEA,MAAM,mBAAmBA,MAAAA,MAAM;AAAA,EAI3B,YAAY,MAAc,IAAY,IAAY;AACxC,UAAA,MAAM,IAAI,EAAE;AAHtB,SAAQ,aAAqB;AAMpB,SAAA,eAAe,IAAI,KAAK;AAC7B,SAAK,SAAS,KAAK;AACd,SAAA,SAAS,IAAI,KAAK;AAGlB,SAAA,OAAO,SAAS,KAAK;AACrB,SAAA,OAAO,MAAM,SAAS;AAGtB,SAAA,OAAO,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU5B,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEO,mBAAmB;AACtB,QAAI,CAAC,KAAK;AAAS;AAEnB,SAAK,QAAQ,wBAAwB;AAGrC,SAAK,QAAQ,OAAO,UAAW,IAAI,KAAK,KAAM;AAC9C,SAAK,QAAQ,eAAe;AAE5B,SAAK,QAAQ,cAAc;AAAA,EAC/B;AAAA;AAAA,EAGO,OAAO,OAAe,WAAmB,YAAoB,GAAG;AACnE,QAAI,CAAC,KAAK;AAAS;AAEnB,SAAK,aAAa;AAElB,SAAK,QAAQ,UAAU,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AAEpD,SAAK,QAAQ,cAAc;AACtB,SAAA,QAAQ,YAAY,KAAK;AAC9B,SAAK,QAAQ;AAAA,MACT,GAAG,MAAM,QAAQ,CAAC,CAAC;AAAA,MACnB,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA,EAGO,YAAY,aAAqB,WAAmB;AAEvD;AAAA,EACJ;AAAA;AAAA,EAGO,UAAU,GAAW,GAAW;AACnC,SAAK,OAAO,MAAM,YAAY,aAAa,CAAC,OAAO,CAAC;AAAA,EACxD;AACJ;;"}
@@ -0,0 +1,55 @@
1
+ import { Panel } from "./panel.js";
2
+ class PanelVSync extends Panel {
3
+ constructor(name, fg, bg) {
4
+ super(name, fg, bg);
5
+ this.vsyncValue = 0;
6
+ this.SMALL_HEIGHT = 9 * this.PR;
7
+ this.HEIGHT = this.SMALL_HEIGHT;
8
+ this.TEXT_Y = 0 * this.PR;
9
+ this.canvas.height = this.HEIGHT;
10
+ this.canvas.style.height = "9px";
11
+ this.canvas.style.cssText = `
12
+ width: 90px;
13
+ height: 9px;
14
+ position: absolute;
15
+ top: 0;
16
+ left: 0;
17
+ pointer-events: none; // Allow clicks to pass through
18
+ `;
19
+ this.initializeCanvas();
20
+ }
21
+ initializeCanvas() {
22
+ if (!this.context)
23
+ return;
24
+ this.context.imageSmoothingEnabled = false;
25
+ this.context.font = "bold " + 9 * this.PR + "px Helvetica,Arial,sans-serif";
26
+ this.context.textBaseline = "top";
27
+ this.context.globalAlpha = 1;
28
+ }
29
+ // Override update for VSync-specific display
30
+ update(value, _maxValue, _decimals = 0) {
31
+ if (!this.context)
32
+ return;
33
+ this.vsyncValue = value;
34
+ this.context.clearRect(0, 0, this.WIDTH, this.HEIGHT);
35
+ this.context.globalAlpha = 1;
36
+ this.context.fillStyle = this.bg;
37
+ this.context.fillText(
38
+ `${value.toFixed(0)}Hz`,
39
+ this.TEXT_X,
40
+ this.TEXT_Y
41
+ );
42
+ }
43
+ // Override updateGraph to do nothing (we don't need a graph for VSync)
44
+ updateGraph(_valueGraph, _maxGraph) {
45
+ return;
46
+ }
47
+ // Method to set the offset position relative to parent panel
48
+ setOffset(x, y) {
49
+ this.canvas.style.transform = `translate(${x}px, ${y}px)`;
50
+ }
51
+ }
52
+ export {
53
+ PanelVSync
54
+ };
55
+ //# sourceMappingURL=panelVsync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panelVsync.js","sources":["../lib/panelVsync.ts"],"sourcesContent":null,"names":[],"mappings":";AAEA,MAAM,mBAAmB,MAAM;AAAA,EAI3B,YAAY,MAAc,IAAY,IAAY;AACxC,UAAA,MAAM,IAAI,EAAE;AAHtB,SAAQ,aAAqB;AAMpB,SAAA,eAAe,IAAI,KAAK;AAC7B,SAAK,SAAS,KAAK;AACd,SAAA,SAAS,IAAI,KAAK;AAGlB,SAAA,OAAO,SAAS,KAAK;AACrB,SAAA,OAAO,MAAM,SAAS;AAGtB,SAAA,OAAO,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU5B,SAAK,iBAAiB;AAAA,EAC1B;AAAA,EAEO,mBAAmB;AACtB,QAAI,CAAC,KAAK;AAAS;AAEnB,SAAK,QAAQ,wBAAwB;AAGrC,SAAK,QAAQ,OAAO,UAAW,IAAI,KAAK,KAAM;AAC9C,SAAK,QAAQ,eAAe;AAE5B,SAAK,QAAQ,cAAc;AAAA,EAC/B;AAAA;AAAA,EAGO,OAAO,OAAe,WAAmB,YAAoB,GAAG;AACnE,QAAI,CAAC,KAAK;AAAS;AAEnB,SAAK,aAAa;AAElB,SAAK,QAAQ,UAAU,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AAEpD,SAAK,QAAQ,cAAc;AACtB,SAAA,QAAQ,YAAY,KAAK;AAC9B,SAAK,QAAQ;AAAA,MACT,GAAG,MAAM,QAAQ,CAAC,CAAC;AAAA,MACnB,KAAK;AAAA,MACL,KAAK;AAAA,IAAA;AAAA,EAEb;AAAA;AAAA,EAGO,YAAY,aAAqB,WAAmB;AAEvD;AAAA,EACJ;AAAA;AAAA,EAGO,UAAU,GAAW,GAAW;AACnC,SAAK,OAAO,MAAM,YAAY,aAAa,CAAC,OAAO,CAAC;AAAA,EACxD;AACJ;"}
@@ -16,13 +16,14 @@ declare class Panel {
16
16
  GRAPH_HEIGHT: number;
17
17
  constructor(name: string, fg: string, bg: string);
18
18
  private createGradient;
19
- private initializeCanvas;
19
+ initializeCanvas(): void;
20
20
  update(value: number, maxValue: number, decimals?: number): void;
21
21
  updateGraph(valueGraph: number, maxGraph: number): void;
22
22
  }
23
23
 
24
24
  interface StatsOptions {
25
25
  trackGPU?: boolean;
26
+ trackHz?: boolean;
26
27
  logsPerSecond?: number;
27
28
  graphsPerSecond?: number;
28
29
  samplesLog?: number;
@@ -50,6 +51,7 @@ declare class Stats {
50
51
  horizontal: boolean;
51
52
  minimal: boolean;
52
53
  trackGPU: boolean;
54
+ trackHz: boolean;
53
55
  samplesLog: number;
54
56
  samplesGraph: number;
55
57
  precision: number;
@@ -73,6 +75,7 @@ declare class Stats {
73
75
  private msPanel;
74
76
  private gpuPanel;
75
77
  private gpuPanelCompute;
78
+ private vsyncPanel;
76
79
  averageFps: AverageData;
77
80
  averageCpu: AverageData;
78
81
  averageGpu: AverageData;
@@ -83,8 +86,14 @@ declare class Stats {
83
86
  private lastMax;
84
87
  private lastValue;
85
88
  private prevTextTime;
89
+ private readonly VSYNC_RATES;
90
+ private detectedVSync;
91
+ private frameTimeHistory;
92
+ private readonly HISTORY_SIZE;
93
+ private readonly VSYNC_THRESHOLD;
94
+ private lastFrameTime;
86
95
  static Panel: typeof Panel;
87
- constructor({ trackGPU, logsPerSecond, graphsPerSecond, samplesLog, samplesGraph, precision, minimal, horizontal, mode }?: StatsOptions);
96
+ constructor({ trackGPU, trackHz, logsPerSecond, graphsPerSecond, samplesLog, samplesGraph, precision, minimal, horizontal, mode }?: StatsOptions);
88
97
  private initializeDOM;
89
98
  private setupEventListeners;
90
99
  private handleClick;
@@ -104,6 +113,7 @@ declare class Stats {
104
113
  addPanel(panel: Panel, offset: number): Panel;
105
114
  showPanel(id: number): void;
106
115
  processGpuQueries(): void;
116
+ private detectVSync;
107
117
  endInternal(): number;
108
118
  private updatePanelComponents;
109
119
  beginProfiling(marker: string): void;
package/lib/main.ts CHANGED
@@ -1,8 +1,10 @@
1
- import * as THREE from 'three';
1
+ import type * as THREE from 'three';
2
2
  import { Panel } from './panel';
3
+ import { PanelVSync } from './panelVsync';
3
4
 
4
5
  interface StatsOptions {
5
6
  trackGPU?: boolean;
7
+ trackHz?: boolean;
6
8
  logsPerSecond?: number;
7
9
  graphsPerSecond?: number;
8
10
  samplesLog?: number;
@@ -22,6 +24,13 @@ interface AverageData {
22
24
  graph: number[];
23
25
  }
24
26
 
27
+
28
+ interface VSyncInfo {
29
+ refreshRate: number;
30
+ frameTime: number;
31
+ }
32
+
33
+
25
34
  interface InfoData {
26
35
  render: {
27
36
  timestamp: number;
@@ -37,6 +46,7 @@ class Stats {
37
46
  public horizontal: boolean;
38
47
  public minimal: boolean;
39
48
  public trackGPU: boolean;
49
+ public trackHz: boolean;
40
50
  public samplesLog: number;
41
51
  public samplesGraph: number;
42
52
  public precision: number;
@@ -65,6 +75,7 @@ class Stats {
65
75
  private msPanel: Panel;
66
76
  private gpuPanel: Panel | null = null;
67
77
  private gpuPanelCompute: Panel | null = null;
78
+ private vsyncPanel: PanelVSync | null = null;
68
79
 
69
80
  public averageFps: AverageData = { logs: [], graph: [] };
70
81
  public averageCpu: AverageData = { logs: [], graph: [] };
@@ -78,11 +89,28 @@ class Stats {
78
89
  private lastValue: { [key: string]: number } = {};
79
90
  private prevTextTime: number;
80
91
 
92
+ private readonly VSYNC_RATES: VSyncInfo[] = [
93
+ { refreshRate: 60, frameTime: 16.67 },
94
+ { refreshRate: 75, frameTime: 13.33 },
95
+ { refreshRate: 90, frameTime: 11.11 },
96
+ { refreshRate: 120, frameTime: 8.33 },
97
+ { refreshRate: 144, frameTime: 6.94 },
98
+ { refreshRate: 165, frameTime: 6.06 },
99
+ { refreshRate: 240, frameTime: 4.17 }
100
+ ];
101
+ private detectedVSync: VSyncInfo | null = null;
102
+ private frameTimeHistory: number[] = [];
103
+ private readonly HISTORY_SIZE = 120; // 2 seconds worth of frames at 60fps
104
+ private readonly VSYNC_THRESHOLD = 0.05; // 5% tolerance
105
+ private lastFrameTime: number = 0;
106
+
107
+
81
108
 
82
109
  static Panel = Panel;
83
110
 
84
111
  constructor({
85
112
  trackGPU = false,
113
+ trackHz = false,
86
114
  logsPerSecond = 4,
87
115
  graphsPerSecond = 30,
88
116
  samplesLog = 40,
@@ -96,6 +124,7 @@ class Stats {
96
124
  this.horizontal = horizontal;
97
125
  this.minimal = minimal;
98
126
  this.trackGPU = trackGPU;
127
+ this.trackHz = trackHz;
99
128
  this.samplesLog = samplesLog;
100
129
  this.samplesGraph = samplesGraph;
101
130
  this.precision = precision;
@@ -118,6 +147,12 @@ class Stats {
118
147
  this.fpsPanel = this.addPanel(new Stats.Panel('FPS', '#0ff', '#002'), 0);
119
148
  this.msPanel = this.addPanel(new Stats.Panel('CPU', '#0f0', '#020'), 1);
120
149
 
150
+ if (this.trackHz === true) {
151
+ this.vsyncPanel = new PanelVSync('', '#f0f', '#202');
152
+ this.dom.appendChild(this.vsyncPanel.canvas);
153
+ this.vsyncPanel.setOffset(56, 35);
154
+ }
155
+
121
156
  this.setupEventListeners();
122
157
  }
123
158
 
@@ -164,8 +199,15 @@ class Stats {
164
199
 
165
200
  if (this.handleThreeRenderer(canvasOrGL)) return;
166
201
  if (await this.handleWebGPURenderer(canvasOrGL)) return;
167
- if (!this.initializeWebGL(canvasOrGL)) return;
168
202
 
203
+ if (this.initializeWebGL(canvasOrGL)) {
204
+ if (this.trackGPU) {
205
+ this.initializeGPUTracking();
206
+ }
207
+ return;
208
+ } else {
209
+ console.error('Stats-gl: Failed to initialize WebGL context');
210
+ }
169
211
  }
170
212
 
171
213
  private handleThreeRenderer(renderer: any): boolean {
@@ -362,6 +404,58 @@ class Stats {
362
404
  }
363
405
  });
364
406
 
407
+ }
408
+ private detectVSync(currentTime: number): void {
409
+ if (this.lastFrameTime === 0) {
410
+ this.lastFrameTime = currentTime;
411
+ return;
412
+ }
413
+
414
+ // Calculate frame time
415
+ const frameTime = currentTime - this.lastFrameTime;
416
+ this.lastFrameTime = currentTime;
417
+
418
+ // Add to histories
419
+ this.frameTimeHistory.push(frameTime);
420
+ if (this.frameTimeHistory.length > this.HISTORY_SIZE) {
421
+ this.frameTimeHistory.shift();
422
+ }
423
+
424
+ // Only start detection when we have enough samples
425
+ if (this.frameTimeHistory.length < 60) return;
426
+
427
+ // Calculate average frame time
428
+ const avgFrameTime = this.frameTimeHistory.reduce((a, b) => a + b) / this.frameTimeHistory.length;
429
+
430
+ // Calculate frame time stability (standard deviation)
431
+ const variance = this.frameTimeHistory.reduce((acc, time) =>
432
+ acc + Math.pow(time - avgFrameTime, 2), 0) / this.frameTimeHistory.length;
433
+ const stability = Math.sqrt(variance);
434
+
435
+ // Only proceed if frame timing is relatively stable
436
+ if (stability > 2) { // 2ms stability threshold
437
+ this.detectedVSync = null;
438
+ return;
439
+ }
440
+
441
+ // Find the closest VSync rate based on frame time
442
+ let closestMatch: VSyncInfo | null = null;
443
+ let smallestDiff = Infinity;
444
+
445
+ for (const rate of this.VSYNC_RATES) {
446
+ const diff = Math.abs(avgFrameTime - rate.frameTime);
447
+ if (diff < smallestDiff) {
448
+ smallestDiff = diff;
449
+ closestMatch = rate;
450
+ }
451
+ }
452
+
453
+ if (closestMatch && (smallestDiff / closestMatch.frameTime <= this.VSYNC_THRESHOLD)) {
454
+ this.detectedVSync = closestMatch;
455
+ } else {
456
+ this.detectedVSync = null;
457
+ }
458
+
365
459
  }
366
460
 
367
461
  endInternal() {
@@ -398,6 +492,16 @@ class Stats {
398
492
  this.prevGraphTime = currentTime;
399
493
  }
400
494
 
495
+ if (this.vsyncPanel !== null) {
496
+ this.detectVSync(currentTime);
497
+
498
+ const vsyncValue = this.detectedVSync?.refreshRate || 0;
499
+
500
+ if (shouldUpdateText && vsyncValue > 0) {
501
+ this.vsyncPanel.update(vsyncValue, vsyncValue);
502
+ }
503
+ }
504
+
401
505
  return currentTime;
402
506
  }
403
507
 
@@ -592,4 +696,4 @@ class Stats {
592
696
  }
593
697
 
594
698
 
595
- export default Stats;
699
+ export default Stats;
package/lib/panel.ts CHANGED
@@ -81,7 +81,7 @@ class Panel {
81
81
  return gradient;
82
82
  }
83
83
 
84
- private initializeCanvas() {
84
+ public initializeCanvas() {
85
85
  if (!this.context) return;
86
86
 
87
87
  this.context.imageSmoothingEnabled = false;
@@ -104,7 +104,7 @@ class Panel {
104
104
  }
105
105
 
106
106
  // Update only text portion
107
- update(value: number, maxValue: number, decimals: number = 0) {
107
+ public update(value: number, maxValue: number, decimals: number = 0) {
108
108
  if (!this.context || !this.gradient) return;
109
109
 
110
110
  const min = Math.min(Infinity, value);
@@ -125,7 +125,7 @@ class Panel {
125
125
  }
126
126
 
127
127
  // Update only graph portion
128
- updateGraph(valueGraph: number, maxGraph: number) {
128
+ public updateGraph(valueGraph: number, maxGraph: number) {
129
129
  if (!this.context || !this.gradient) return;
130
130
 
131
131
  // Handle zero values appropriately
@@ -0,0 +1,74 @@
1
+ import { Panel } from './panel';
2
+
3
+ class PanelVSync extends Panel {
4
+ private readonly SMALL_HEIGHT: number;
5
+ private vsyncValue: number = 0;
6
+
7
+ constructor(name: string, fg: string, bg: string) {
8
+ super(name, fg, bg);
9
+
10
+ // Redefine dimensions for a smaller panel
11
+ this.SMALL_HEIGHT = 9 * this.PR; // Smaller height
12
+ this.HEIGHT = this.SMALL_HEIGHT;
13
+ this.TEXT_Y = 0 * this.PR; // Adjust text position
14
+
15
+ // Resize the canvas
16
+ this.canvas.height = this.HEIGHT;
17
+ this.canvas.style.height = '9px'; // Match the new height
18
+
19
+ // Style for overlay positioning
20
+ this.canvas.style.cssText = `
21
+ width: 90px;
22
+ height: 9px;
23
+ position: absolute;
24
+ top: 0;
25
+ left: 0;
26
+ pointer-events: none; // Allow clicks to pass through
27
+ `;
28
+
29
+ // Reinitialize with new dimensions
30
+ this.initializeCanvas();
31
+ }
32
+
33
+ public initializeCanvas() {
34
+ if (!this.context) return;
35
+
36
+ this.context.imageSmoothingEnabled = false;
37
+
38
+ // Larger font for better visibility
39
+ this.context.font = 'bold ' + (9 * this.PR) + 'px Helvetica,Arial,sans-serif';
40
+ this.context.textBaseline = 'top';
41
+
42
+ this.context.globalAlpha = 1;
43
+ }
44
+
45
+ // Override update for VSync-specific display
46
+ public update(value: number, _maxValue: number, _decimals: number = 0) {
47
+ if (!this.context) return;
48
+
49
+ this.vsyncValue = value;
50
+
51
+ this.context.clearRect(0, 0, this.WIDTH, this.HEIGHT);
52
+ // Draw VSync text
53
+ this.context.globalAlpha = 1;
54
+ this.context.fillStyle = this.bg;
55
+ this.context.fillText(
56
+ `${value.toFixed(0)}Hz`,
57
+ this.TEXT_X,
58
+ this.TEXT_Y
59
+ );
60
+ }
61
+
62
+ // Override updateGraph to do nothing (we don't need a graph for VSync)
63
+ public updateGraph(_valueGraph: number, _maxGraph: number) {
64
+ // No graph needed for VSync display
65
+ return;
66
+ }
67
+
68
+ // Method to set the offset position relative to parent panel
69
+ public setOffset(x: number, y: number) {
70
+ this.canvas.style.transform = `translate(${x}px, ${y}px)`;
71
+ }
72
+ }
73
+
74
+ export { PanelVSync };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stats-gl",
3
- "version": "3.1.2",
3
+ "version": "3.3.0",
4
4
  "type": "module",
5
5
  "author": "Renaud ROHLINGER (https://github.com/RenaudRohlinger)",
6
6
  "homepage": "https://github.com/RenaudRohlinger/stats-gl",
@@ -27,20 +27,21 @@
27
27
  "build": "tsc && vite build && rollup -c && node ./scripts/copyBuild.js",
28
28
  "preview": "vite preview"
29
29
  },
30
- "dependencies": {
31
- "@types/three": "*",
32
- "three": "^0.170.0"
33
- },
34
30
  "devDependencies": {
35
31
  "fs-extra": "^11.2.0",
36
32
  "path": "^0.12.7",
37
33
  "rollup": "^4.24.3",
38
34
  "rollup-plugin-dts": "^5.3.1",
39
35
  "typescript": "^5.6.3",
40
- "vite": "^4.5.5"
36
+ "vite": "^4.5.5",
37
+ "@types/three": "*"
41
38
  },
42
39
  "peerDependencies": {
43
- "three": "*",
44
- "@types/three": "*"
40
+ "three": "*"
41
+ },
42
+ "peerDependenciesMeta": {
43
+ "three": {
44
+ "optional": true
45
+ }
45
46
  }
46
47
  }