stats-gl 3.2.0 → 3.4.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,11 @@ 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
+ trackCPT: false,
40
+ logsPerSecond: 4,
41
+ graphsPerSecond: 30,
42
+ samplesLog: 40,
40
43
  samplesGraph: 10,
41
44
  precision: 2,
42
45
  horizontal: true,
@@ -120,6 +123,10 @@ import { StatsGl } from '@tresjs/cientos'
120
123
  The constructor for the Stats class accepts an options object with the following properties:
121
124
 
122
125
  - `logsPerSecond`: How often to log performance data, in logs per second.
126
+ - `graphsPerSecond`: How often to update the graph, in graphs per second.
127
+ - `trackGPU`: A boolean value to enable or disable GPU tracking.
128
+ - `trackHz`: A boolean value to enable or disable Hz tracking.
129
+ - `trackCPT`: (Threejs specific) A boolean value to enable or disable Threejs Compute Shading tracking.
123
130
  - `samplesLog`: Number of recent log samples to keep for computing averages.
124
131
  - `samplesGraph`: Number of recent graph samples to keep for computing averages.
125
132
  - `precision`: Precision of the data, in number of decimal places (only affects CPU and GPU).
package/dist/main.cjs CHANGED
@@ -1,8 +1,11 @@
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
+ trackCPT = false,
8
+ trackHz = false,
6
9
  logsPerSecond = 4,
7
10
  graphsPerSecond = 30,
8
11
  samplesLog = 40,
@@ -19,12 +22,12 @@ const _Stats = class _Stats2 {
19
22
  this.threeRendererPatched = false;
20
23
  this.frameTimes = [];
21
24
  this.renderCount = 0;
22
- this.isRunningCPUProfiling = false;
23
25
  this.totalCpuDuration = 0;
24
26
  this.totalGpuDuration = 0;
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,22 +36,38 @@ 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);
39
56
  };
40
57
  this.handleResize = () => {
41
- this.resizePanel(this.fpsPanel, 0);
42
- this.resizePanel(this.msPanel, 1);
58
+ this.resizePanel(this.fpsPanel);
59
+ this.resizePanel(this.msPanel);
43
60
  if (this.gpuPanel)
44
- this.resizePanel(this.gpuPanel, 2);
61
+ this.resizePanel(this.gpuPanel);
45
62
  if (this.gpuPanelCompute)
46
- this.resizePanel(this.gpuPanelCompute, 3);
63
+ this.resizePanel(this.gpuPanelCompute);
47
64
  };
48
65
  this.mode = mode;
49
66
  this.horizontal = horizontal;
50
67
  this.minimal = minimal;
51
68
  this.trackGPU = trackGPU;
69
+ this.trackCPT = trackCPT;
70
+ this.trackHz = trackHz;
52
71
  this.samplesLog = samplesLog;
53
72
  this.samplesGraph = samplesGraph;
54
73
  this.precision = precision;
@@ -61,8 +80,14 @@ const _Stats = class _Stats2 {
61
80
  this.beginTime = performance.now();
62
81
  this.prevTextTime = this.beginTime;
63
82
  this.prevCpuTime = this.beginTime;
64
- this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
65
- this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
83
+ this._panelId = 0;
84
+ this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"));
85
+ this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"));
86
+ if (this.trackHz === true) {
87
+ this.vsyncPanel = new panelVsync.PanelVSync("", "#f0f", "#202");
88
+ this.dom.appendChild(this.vsyncPanel.canvas);
89
+ this.vsyncPanel.setOffset(56, 35);
90
+ }
66
91
  this.setupEventListeners();
67
92
  }
68
93
  initializeDOM() {
@@ -114,23 +139,25 @@ const _Stats = class _Stats2 {
114
139
  }
115
140
  async handleWebGPURenderer(renderer) {
116
141
  if (renderer.isWebGPURenderer) {
117
- if (this.trackGPU) {
142
+ if (this.trackGPU || this.trackCPT) {
118
143
  renderer.backend.trackTimestamp = true;
119
144
  if (await renderer.hasFeatureAsync("timestamp-query")) {
120
145
  this.initializeWebGPUPanels();
121
146
  }
122
147
  }
123
148
  this.info = renderer.info;
149
+ this.patchThreeWebGPU(renderer);
124
150
  return true;
125
151
  }
126
152
  return false;
127
153
  }
128
154
  initializeWebGPUPanels() {
129
- this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
130
- this.gpuPanelCompute = this.addPanel(
131
- new _Stats2.Panel("CPT", "#e1e1e1", "#212121"),
132
- 3
133
- );
155
+ if (this.trackGPU) {
156
+ this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"));
157
+ }
158
+ if (this.trackCPT) {
159
+ this.gpuPanelCompute = this.addPanel(new _Stats2.Panel("CPT", "#e1e1e1", "#212121"));
160
+ }
134
161
  }
135
162
  initializeWebGL(canvasOrGL) {
136
163
  if (canvasOrGL instanceof WebGL2RenderingContext) {
@@ -153,14 +180,12 @@ const _Stats = class _Stats2 {
153
180
  if (this.gl) {
154
181
  this.ext = this.gl.getExtension("EXT_disjoint_timer_query_webgl2");
155
182
  if (this.ext) {
156
- this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
183
+ this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"));
157
184
  }
158
185
  }
159
186
  }
160
187
  begin() {
161
- if (!this.isRunningCPUProfiling) {
162
- this.beginProfiling("cpu-started");
163
- }
188
+ this.beginProfiling("cpu-started");
164
189
  if (!this.gl || !this.ext)
165
190
  return;
166
191
  if (this.activeQuery) {
@@ -178,11 +203,10 @@ const _Stats = class _Stats2 {
178
203
  this.gpuQueries.push({ query: this.activeQuery });
179
204
  this.activeQuery = null;
180
205
  }
206
+ this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
181
207
  }
182
208
  update() {
183
- if (this.isRunningCPUProfiling) {
184
- this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
185
- }
209
+ this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
186
210
  if (!this.info) {
187
211
  this.processGpuQueries();
188
212
  } else {
@@ -198,10 +222,9 @@ const _Stats = class _Stats2 {
198
222
  resetCounters() {
199
223
  this.renderCount = 0;
200
224
  this.totalCpuDuration = 0;
201
- this.beginProfiling("cpu-started");
202
225
  this.beginTime = this.endInternal();
203
226
  }
204
- resizePanel(panel2, offset) {
227
+ resizePanel(panel2) {
205
228
  panel2.canvas.style.position = "absolute";
206
229
  if (this.minimal) {
207
230
  panel2.canvas.style.display = "none";
@@ -209,17 +232,19 @@ const _Stats = class _Stats2 {
209
232
  panel2.canvas.style.display = "block";
210
233
  if (this.horizontal) {
211
234
  panel2.canvas.style.top = "0px";
212
- panel2.canvas.style.left = offset * panel2.WIDTH / panel2.PR + "px";
235
+ panel2.canvas.style.left = panel2.id * panel2.WIDTH / panel2.PR + "px";
213
236
  } else {
214
237
  panel2.canvas.style.left = "0px";
215
- panel2.canvas.style.top = offset * panel2.HEIGHT / panel2.PR + "px";
238
+ panel2.canvas.style.top = panel2.id * panel2.HEIGHT / panel2.PR + "px";
216
239
  }
217
240
  }
218
241
  }
219
- addPanel(panel2, offset) {
242
+ addPanel(panel2) {
220
243
  if (panel2.canvas) {
221
244
  this.dom.appendChild(panel2.canvas);
222
- this.resizePanel(panel2, offset);
245
+ panel2.id = this._panelId;
246
+ this.resizePanel(panel2);
247
+ this._panelId++;
223
248
  }
224
249
  return panel2;
225
250
  }
@@ -248,7 +273,43 @@ const _Stats = class _Stats2 {
248
273
  }
249
274
  });
250
275
  }
276
+ detectVSync(currentTime) {
277
+ if (this.lastFrameTime === 0) {
278
+ this.lastFrameTime = currentTime;
279
+ return;
280
+ }
281
+ const frameTime = currentTime - this.lastFrameTime;
282
+ this.lastFrameTime = currentTime;
283
+ this.frameTimeHistory.push(frameTime);
284
+ if (this.frameTimeHistory.length > this.HISTORY_SIZE) {
285
+ this.frameTimeHistory.shift();
286
+ }
287
+ if (this.frameTimeHistory.length < 60)
288
+ return;
289
+ const avgFrameTime = this.frameTimeHistory.reduce((a, b) => a + b) / this.frameTimeHistory.length;
290
+ const variance = this.frameTimeHistory.reduce((acc, time) => acc + Math.pow(time - avgFrameTime, 2), 0) / this.frameTimeHistory.length;
291
+ const stability = Math.sqrt(variance);
292
+ if (stability > 2) {
293
+ this.detectedVSync = null;
294
+ return;
295
+ }
296
+ let closestMatch = null;
297
+ let smallestDiff = Infinity;
298
+ for (const rate of this.VSYNC_RATES) {
299
+ const diff = Math.abs(avgFrameTime - rate.frameTime);
300
+ if (diff < smallestDiff) {
301
+ smallestDiff = diff;
302
+ closestMatch = rate;
303
+ }
304
+ }
305
+ if (closestMatch && smallestDiff / closestMatch.frameTime <= this.VSYNC_THRESHOLD) {
306
+ this.detectedVSync = closestMatch;
307
+ } else {
308
+ this.detectedVSync = null;
309
+ }
310
+ }
251
311
  endInternal() {
312
+ var _a;
252
313
  const currentTime = performance.now();
253
314
  this.frameTimes.push(currentTime);
254
315
  while (this.frameTimes.length > 0 && this.frameTimes[0] <= currentTime - 1e3) {
@@ -263,7 +324,7 @@ const _Stats = class _Stats2 {
263
324
  if (this.gpuPanel) {
264
325
  this.updatePanelComponents(this.gpuPanel, this.averageGpu, this.precision, shouldUpdateText, shouldUpdateGraph);
265
326
  }
266
- if (this.gpuPanelCompute) {
327
+ if (this.trackCPT && this.gpuPanelCompute) {
267
328
  this.updatePanelComponents(this.gpuPanelCompute, this.averageGpuCompute, this.precision, shouldUpdateText, shouldUpdateGraph);
268
329
  }
269
330
  if (shouldUpdateText) {
@@ -272,6 +333,13 @@ const _Stats = class _Stats2 {
272
333
  if (shouldUpdateGraph) {
273
334
  this.prevGraphTime = currentTime;
274
335
  }
336
+ if (this.vsyncPanel !== null) {
337
+ this.detectVSync(currentTime);
338
+ const vsyncValue = ((_a = this.detectedVSync) == null ? void 0 : _a.refreshRate) || 0;
339
+ if (shouldUpdateText && vsyncValue > 0) {
340
+ this.vsyncPanel.update(vsyncValue, vsyncValue);
341
+ }
342
+ }
275
343
  return currentTime;
276
344
  }
277
345
  updatePanelComponents(panel2, averageArray, precision, shouldUpdateText, shouldUpdateGraph) {
@@ -308,15 +376,13 @@ const _Stats = class _Stats2 {
308
376
  beginProfiling(marker) {
309
377
  if (window.performance) {
310
378
  window.performance.mark(marker);
311
- this.isRunningCPUProfiling = true;
312
379
  }
313
380
  }
314
381
  endProfiling(startMarker, endMarker, measureName) {
315
- if (window.performance && endMarker && this.isRunningCPUProfiling) {
382
+ if (window.performance && endMarker) {
316
383
  window.performance.mark(endMarker);
317
384
  const cpuMeasure = performance.measure(measureName, startMarker, endMarker);
318
385
  this.totalCpuDuration += cpuMeasure.duration;
319
- this.isRunningCPUProfiling = false;
320
386
  }
321
387
  }
322
388
  updatePanel(panel2, averageArray, precision = 2) {
@@ -378,6 +444,14 @@ const _Stats = class _Stats2 {
378
444
  get domElement() {
379
445
  return this.dom;
380
446
  }
447
+ patchThreeWebGPU(renderer) {
448
+ const originalAnimationLoop = renderer.info.reset;
449
+ const statsInstance = this;
450
+ renderer.info.reset = function() {
451
+ statsInstance.beginProfiling("cpu-started");
452
+ originalAnimationLoop.call(this);
453
+ };
454
+ }
381
455
  patchThreeRenderer(renderer) {
382
456
  const originalRenderMethod = renderer.render;
383
457
  const statsInstance = this;
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,10 @@
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
+ trackCPT = false,
7
+ trackHz = false,
5
8
  logsPerSecond = 4,
6
9
  graphsPerSecond = 30,
7
10
  samplesLog = 40,
@@ -18,12 +21,12 @@ const _Stats = class _Stats2 {
18
21
  this.threeRendererPatched = false;
19
22
  this.frameTimes = [];
20
23
  this.renderCount = 0;
21
- this.isRunningCPUProfiling = false;
22
24
  this.totalCpuDuration = 0;
23
25
  this.totalGpuDuration = 0;
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,22 +35,38 @@ 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);
38
55
  };
39
56
  this.handleResize = () => {
40
- this.resizePanel(this.fpsPanel, 0);
41
- this.resizePanel(this.msPanel, 1);
57
+ this.resizePanel(this.fpsPanel);
58
+ this.resizePanel(this.msPanel);
42
59
  if (this.gpuPanel)
43
- this.resizePanel(this.gpuPanel, 2);
60
+ this.resizePanel(this.gpuPanel);
44
61
  if (this.gpuPanelCompute)
45
- this.resizePanel(this.gpuPanelCompute, 3);
62
+ this.resizePanel(this.gpuPanelCompute);
46
63
  };
47
64
  this.mode = mode;
48
65
  this.horizontal = horizontal;
49
66
  this.minimal = minimal;
50
67
  this.trackGPU = trackGPU;
68
+ this.trackCPT = trackCPT;
69
+ this.trackHz = trackHz;
51
70
  this.samplesLog = samplesLog;
52
71
  this.samplesGraph = samplesGraph;
53
72
  this.precision = precision;
@@ -60,8 +79,14 @@ const _Stats = class _Stats2 {
60
79
  this.beginTime = performance.now();
61
80
  this.prevTextTime = this.beginTime;
62
81
  this.prevCpuTime = this.beginTime;
63
- this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
64
- this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
82
+ this._panelId = 0;
83
+ this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"));
84
+ this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"));
85
+ if (this.trackHz === true) {
86
+ this.vsyncPanel = new PanelVSync("", "#f0f", "#202");
87
+ this.dom.appendChild(this.vsyncPanel.canvas);
88
+ this.vsyncPanel.setOffset(56, 35);
89
+ }
65
90
  this.setupEventListeners();
66
91
  }
67
92
  initializeDOM() {
@@ -113,23 +138,25 @@ const _Stats = class _Stats2 {
113
138
  }
114
139
  async handleWebGPURenderer(renderer) {
115
140
  if (renderer.isWebGPURenderer) {
116
- if (this.trackGPU) {
141
+ if (this.trackGPU || this.trackCPT) {
117
142
  renderer.backend.trackTimestamp = true;
118
143
  if (await renderer.hasFeatureAsync("timestamp-query")) {
119
144
  this.initializeWebGPUPanels();
120
145
  }
121
146
  }
122
147
  this.info = renderer.info;
148
+ this.patchThreeWebGPU(renderer);
123
149
  return true;
124
150
  }
125
151
  return false;
126
152
  }
127
153
  initializeWebGPUPanels() {
128
- this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
129
- this.gpuPanelCompute = this.addPanel(
130
- new _Stats2.Panel("CPT", "#e1e1e1", "#212121"),
131
- 3
132
- );
154
+ if (this.trackGPU) {
155
+ this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"));
156
+ }
157
+ if (this.trackCPT) {
158
+ this.gpuPanelCompute = this.addPanel(new _Stats2.Panel("CPT", "#e1e1e1", "#212121"));
159
+ }
133
160
  }
134
161
  initializeWebGL(canvasOrGL) {
135
162
  if (canvasOrGL instanceof WebGL2RenderingContext) {
@@ -152,14 +179,12 @@ const _Stats = class _Stats2 {
152
179
  if (this.gl) {
153
180
  this.ext = this.gl.getExtension("EXT_disjoint_timer_query_webgl2");
154
181
  if (this.ext) {
155
- this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
182
+ this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"));
156
183
  }
157
184
  }
158
185
  }
159
186
  begin() {
160
- if (!this.isRunningCPUProfiling) {
161
- this.beginProfiling("cpu-started");
162
- }
187
+ this.beginProfiling("cpu-started");
163
188
  if (!this.gl || !this.ext)
164
189
  return;
165
190
  if (this.activeQuery) {
@@ -177,11 +202,10 @@ const _Stats = class _Stats2 {
177
202
  this.gpuQueries.push({ query: this.activeQuery });
178
203
  this.activeQuery = null;
179
204
  }
205
+ this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
180
206
  }
181
207
  update() {
182
- if (this.isRunningCPUProfiling) {
183
- this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
184
- }
208
+ this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
185
209
  if (!this.info) {
186
210
  this.processGpuQueries();
187
211
  } else {
@@ -197,10 +221,9 @@ const _Stats = class _Stats2 {
197
221
  resetCounters() {
198
222
  this.renderCount = 0;
199
223
  this.totalCpuDuration = 0;
200
- this.beginProfiling("cpu-started");
201
224
  this.beginTime = this.endInternal();
202
225
  }
203
- resizePanel(panel, offset) {
226
+ resizePanel(panel) {
204
227
  panel.canvas.style.position = "absolute";
205
228
  if (this.minimal) {
206
229
  panel.canvas.style.display = "none";
@@ -208,17 +231,19 @@ const _Stats = class _Stats2 {
208
231
  panel.canvas.style.display = "block";
209
232
  if (this.horizontal) {
210
233
  panel.canvas.style.top = "0px";
211
- panel.canvas.style.left = offset * panel.WIDTH / panel.PR + "px";
234
+ panel.canvas.style.left = panel.id * panel.WIDTH / panel.PR + "px";
212
235
  } else {
213
236
  panel.canvas.style.left = "0px";
214
- panel.canvas.style.top = offset * panel.HEIGHT / panel.PR + "px";
237
+ panel.canvas.style.top = panel.id * panel.HEIGHT / panel.PR + "px";
215
238
  }
216
239
  }
217
240
  }
218
- addPanel(panel, offset) {
241
+ addPanel(panel) {
219
242
  if (panel.canvas) {
220
243
  this.dom.appendChild(panel.canvas);
221
- this.resizePanel(panel, offset);
244
+ panel.id = this._panelId;
245
+ this.resizePanel(panel);
246
+ this._panelId++;
222
247
  }
223
248
  return panel;
224
249
  }
@@ -247,7 +272,43 @@ const _Stats = class _Stats2 {
247
272
  }
248
273
  });
249
274
  }
275
+ detectVSync(currentTime) {
276
+ if (this.lastFrameTime === 0) {
277
+ this.lastFrameTime = currentTime;
278
+ return;
279
+ }
280
+ const frameTime = currentTime - this.lastFrameTime;
281
+ this.lastFrameTime = currentTime;
282
+ this.frameTimeHistory.push(frameTime);
283
+ if (this.frameTimeHistory.length > this.HISTORY_SIZE) {
284
+ this.frameTimeHistory.shift();
285
+ }
286
+ if (this.frameTimeHistory.length < 60)
287
+ return;
288
+ const avgFrameTime = this.frameTimeHistory.reduce((a, b) => a + b) / this.frameTimeHistory.length;
289
+ const variance = this.frameTimeHistory.reduce((acc, time) => acc + Math.pow(time - avgFrameTime, 2), 0) / this.frameTimeHistory.length;
290
+ const stability = Math.sqrt(variance);
291
+ if (stability > 2) {
292
+ this.detectedVSync = null;
293
+ return;
294
+ }
295
+ let closestMatch = null;
296
+ let smallestDiff = Infinity;
297
+ for (const rate of this.VSYNC_RATES) {
298
+ const diff = Math.abs(avgFrameTime - rate.frameTime);
299
+ if (diff < smallestDiff) {
300
+ smallestDiff = diff;
301
+ closestMatch = rate;
302
+ }
303
+ }
304
+ if (closestMatch && smallestDiff / closestMatch.frameTime <= this.VSYNC_THRESHOLD) {
305
+ this.detectedVSync = closestMatch;
306
+ } else {
307
+ this.detectedVSync = null;
308
+ }
309
+ }
250
310
  endInternal() {
311
+ var _a;
251
312
  const currentTime = performance.now();
252
313
  this.frameTimes.push(currentTime);
253
314
  while (this.frameTimes.length > 0 && this.frameTimes[0] <= currentTime - 1e3) {
@@ -262,7 +323,7 @@ const _Stats = class _Stats2 {
262
323
  if (this.gpuPanel) {
263
324
  this.updatePanelComponents(this.gpuPanel, this.averageGpu, this.precision, shouldUpdateText, shouldUpdateGraph);
264
325
  }
265
- if (this.gpuPanelCompute) {
326
+ if (this.trackCPT && this.gpuPanelCompute) {
266
327
  this.updatePanelComponents(this.gpuPanelCompute, this.averageGpuCompute, this.precision, shouldUpdateText, shouldUpdateGraph);
267
328
  }
268
329
  if (shouldUpdateText) {
@@ -271,6 +332,13 @@ const _Stats = class _Stats2 {
271
332
  if (shouldUpdateGraph) {
272
333
  this.prevGraphTime = currentTime;
273
334
  }
335
+ if (this.vsyncPanel !== null) {
336
+ this.detectVSync(currentTime);
337
+ const vsyncValue = ((_a = this.detectedVSync) == null ? void 0 : _a.refreshRate) || 0;
338
+ if (shouldUpdateText && vsyncValue > 0) {
339
+ this.vsyncPanel.update(vsyncValue, vsyncValue);
340
+ }
341
+ }
274
342
  return currentTime;
275
343
  }
276
344
  updatePanelComponents(panel, averageArray, precision, shouldUpdateText, shouldUpdateGraph) {
@@ -307,15 +375,13 @@ const _Stats = class _Stats2 {
307
375
  beginProfiling(marker) {
308
376
  if (window.performance) {
309
377
  window.performance.mark(marker);
310
- this.isRunningCPUProfiling = true;
311
378
  }
312
379
  }
313
380
  endProfiling(startMarker, endMarker, measureName) {
314
- if (window.performance && endMarker && this.isRunningCPUProfiling) {
381
+ if (window.performance && endMarker) {
315
382
  window.performance.mark(endMarker);
316
383
  const cpuMeasure = performance.measure(measureName, startMarker, endMarker);
317
384
  this.totalCpuDuration += cpuMeasure.duration;
318
- this.isRunningCPUProfiling = false;
319
385
  }
320
386
  }
321
387
  updatePanel(panel, averageArray, precision = 2) {
@@ -377,6 +443,14 @@ const _Stats = class _Stats2 {
377
443
  get domElement() {
378
444
  return this.dom;
379
445
  }
446
+ patchThreeWebGPU(renderer) {
447
+ const originalAnimationLoop = renderer.info.reset;
448
+ const statsInstance = this;
449
+ renderer.info.reset = function() {
450
+ statsInstance.beginProfiling("cpu-started");
451
+ originalAnimationLoop.call(this);
452
+ };
453
+ }
380
454
  patchThreeRenderer(renderer) {
381
455
  const originalRenderMethod = renderer.render;
382
456
  const statsInstance = this;