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 +9 -2
- package/dist/main.cjs +104 -30
- package/dist/main.cjs.map +1 -1
- package/dist/main.js +104 -30
- package/dist/main.js.map +1 -1
- package/dist/panel.cjs +1 -0
- package/dist/panel.cjs.map +1 -1
- package/dist/panel.js +1 -0
- package/dist/panel.js.map +1 -1
- package/dist/panelVsync.cjs +55 -0
- package/dist/panelVsync.cjs.map +1 -0
- package/dist/panelVsync.js +55 -0
- package/dist/panelVsync.js.map +1 -0
- package/dist/stats-gl.d.ts +19 -5
- package/lib/main.ts +152 -36
- package/lib/panel.ts +4 -3
- package/lib/panelVsync.ts +74 -0
- package/package.json +1 -1
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
|
-
|
|
39
|
-
|
|
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
|
|
42
|
-
this.resizePanel(this.msPanel
|
|
58
|
+
this.resizePanel(this.fpsPanel);
|
|
59
|
+
this.resizePanel(this.msPanel);
|
|
43
60
|
if (this.gpuPanel)
|
|
44
|
-
this.resizePanel(this.gpuPanel
|
|
61
|
+
this.resizePanel(this.gpuPanel);
|
|
45
62
|
if (this.gpuPanelCompute)
|
|
46
|
-
this.resizePanel(this.gpuPanelCompute
|
|
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.
|
|
65
|
-
this.
|
|
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
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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")
|
|
183
|
+
this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"));
|
|
157
184
|
}
|
|
158
185
|
}
|
|
159
186
|
}
|
|
160
187
|
begin() {
|
|
161
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
238
|
+
panel2.canvas.style.top = panel2.id * panel2.HEIGHT / panel2.PR + "px";
|
|
216
239
|
}
|
|
217
240
|
}
|
|
218
241
|
}
|
|
219
|
-
addPanel(panel2
|
|
242
|
+
addPanel(panel2) {
|
|
220
243
|
if (panel2.canvas) {
|
|
221
244
|
this.dom.appendChild(panel2.canvas);
|
|
222
|
-
this.
|
|
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
|
|
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":";;AAiCA,MAAM,SAAN,MAAMA,QAAM;AAAA,EAkDV,YAAY;AAAA,IACV,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,aAAa;AAAA,IACb,OAAO;AAAA,EACT,IAAkB,IAAI;AAhDtB,SAAO,KAAoC;AAC3C,SAAO,MAAkB;AAEzB,SAAQ,cAAiC;AACzC,SAAQ,aAA0B;AAClC,SAAQ,uBAAuB;AAI/B,SAAQ,aAAuB;AAE/B,SAAQ,cAAc;AACtB,SAAQ,wBAAwB;AAEhC,SAAQ,mBAAmB;AAC3B,SAAQ,mBAAmB;AAC3B,SAAQ,0BAA0B;AAIlC,SAAQ,WAAyB;AACjC,SAAQ,kBAAgC;AAExC,SAAO,aAA0B,EAAE,MAAM,CAAA,GAAI,OAAO,CAAA;AACpD,SAAO,aAA0B,EAAE,MAAM,CAAA,GAAI,OAAO,CAAA;AACpD,SAAO,aAA0B,EAAE,MAAM,CAAA,GAAI,OAAO,CAAA;AACpD,SAAO,oBAAiC,EAAE,MAAM,CAAA,GAAI,OAAO,CAAA;AAE3D,SAAQ,gBAAgB;AAExB,SAAQ,UAAqC;AAC7C,SAAQ,UAAqC;AAC7C,SAAQ,YAAuC;AAmEvC,SAAA,cAAc,CAAC,UAA4B;AACjD,YAAM,eAAe;AACrB,WAAK,UAAU,EAAE,KAAK,OAAO,KAAK,IAAI,SAAS,MAAM;AAAA,IAAA;AAGvD,SAAQ,eAAe,MAAY;AAC5B,WAAA,YAAY,KAAK,UAAU,CAAC;AAC5B,WAAA,YAAY,KAAK,SAAS,CAAC;AAChC,UAAI,KAAK;AAAe,aAAA,YAAY,KAAK,UAAU,CAAC;AACpD,UAAI,KAAK;AAAsB,aAAA,YAAY,KAAK,iBAAiB,CAAC;AAAA,IAAA;AA3DlE,SAAK,OAAO;AACZ,SAAK,aAAa;AAClB,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,aAAa;AAClB,SAAK,eAAe;AACpB,SAAK,YAAY;AACjB,SAAK,gBAAgB;AACrB,SAAK,kBAAkB;AACjB,UAAA,gBAAgB,YAAY;AAClC,SAAK,gBAAgB;AAGhB,SAAA,MAAM,SAAS,cAAc,KAAK;AACvC,SAAK,cAAc;AAGd,SAAA,YAAY,YAAY;AAC7B,SAAK,eAAe,KAAK;AAEzB,SAAK,cAAc,KAAK;AAGnB,SAAA,WAAW,KAAK,SAAS,IAAIA,QAAM,MAAM,OAAO,QAAQ,MAAM,GAAG,CAAC;AAClE,SAAA,UAAU,KAAK,SAAS,IAAIA,QAAM,MAAM,OAAO,QAAQ,MAAM,GAAG,CAAC;AAEtE,SAAK,oBAAoB;AAAA,EAC3B;AAAA,EAGQ,gBAAsB;AACvB,SAAA,IAAI,MAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMrB,KAAK,UAAU,qBAAqB,EAAE;AAAA;AAAA,EAE5C;AAAA,EAEQ,sBAA4B;AAClC,QAAI,KAAK,SAAS;AAChB,WAAK,IAAI,iBAAiB,SAAS,KAAK,WAAW;AAC9C,WAAA,UAAU,KAAK,IAAI;AAAA,IAAA,OACnB;AACE,aAAA,iBAAiB,UAAU,KAAK,YAAY;AAAA,IACrD;AAAA,EACF;AAAA,EAcA,MAAa,KACX,YACe;AACf,QAAI,CAAC,YAAY;AACf,cAAQ,MAAM,6CAA6C;AAC3D;AAAA,IACF;AAEI,QAAA,KAAK,oBAAoB,UAAU;AAAG;AACtC,QAAA,MAAM,KAAK,qBAAqB,UAAU;AAAG;AAE7C,QAAA,KAAK,gBAAgB,UAAU,GAAG;AACpC,UAAI,KAAK,UAAU;AACjB,aAAK,sBAAsB;AAAA,MAC7B;AACA;AAAA,IAAA,OACK;AACL,cAAQ,MAAM,8CAA8C;AAAA,IAC9D;AAAA,EACF;AAAA,EAEQ,oBAAoB,UAAwB;AAClD,QAAI,SAAS,mBAAmB,CAAC,KAAK,sBAAsB;AAC1D,WAAK,mBAAmB,QAAQ;AAC3B,WAAA,KAAK,SAAS;AAEnB,UAAI,KAAK,UAAU;AACjB,aAAK,sBAAsB;AAAA,MAC7B;AACO,aAAA;AAAA,IACT;AACO,WAAA;AAAA,EACT;AAAA,EAEA,MAAc,qBAAqB,UAAiC;AAClE,QAAI,SAAS,kBAAkB;AAC7B,UAAI,KAAK,UAAU;AACjB,iBAAS,QAAQ,iBAAiB;AAClC,YAAI,MAAM,SAAS,gBAAgB,iBAAiB,GAAG;AACrD,eAAK,uBAAuB;AAAA,QAC9B;AAAA,MACF;AACA,WAAK,OAAO,SAAS;AACd,aAAA;AAAA,IACT;AACO,WAAA;AAAA,EACT;AAAA,EAEQ,yBAA+B;AAChC,SAAA,WAAW,KAAK,SAAS,IAAIA,QAAM,MAAM,OAAO,QAAQ,MAAM,GAAG,CAAC;AACvE,SAAK,kBAAkB,KAAK;AAAA,MAC1B,IAAIA,QAAM,MAAM,OAAO,WAAW,SAAS;AAAA,MAC3C;AAAA,IAAA;AAAA,EAEJ;AAAA,EAEQ,gBACN,YACS;AACT,QAAI,sBAAsB,wBAAwB;AAChD,WAAK,KAAK;AAAA,IAEV,WAAA,sBAAsB,qBACtB,sBAAsB,iBACtB;AACK,WAAA,KAAK,WAAW,WAAW,QAAQ;AACpC,UAAA,CAAC,KAAK,IAAI;AACZ,gBAAQ,MAAM,yCAAyC;AAChD,eAAA;AAAA,MACT;AAAA,IAAA,OACK;AACG,cAAA;AAAA,QACN;AAAA,MAAA;AAEK,aAAA;AAAA,IACT;AACO,WAAA;AAAA,EACT;AAAA,EAEQ,wBAA8B;AACpC,QAAI,KAAK,IAAI;AACX,WAAK,MAAM,KAAK,GAAG,aAAa,iCAAiC;AACjE,UAAI,KAAK,KAAK;AACP,aAAA,WAAW,KAAK,SAAS,IAAIA,QAAM,MAAM,OAAO,QAAQ,MAAM,GAAG,CAAC;AAAA,MACzE;AAAA,IACF;AAAA,EACF;AAAA,EAEO,QAAc;AACf,QAAA,CAAC,KAAK,uBAAuB;AAC/B,WAAK,eAAe,aAAa;AAAA,IACnC;AAEA,QAAI,CAAC,KAAK,MAAM,CAAC,KAAK;AAAK;AAE3B,QAAI,KAAK,aAAa;AACpB,WAAK,GAAG,SAAS,KAAK,IAAI,gBAAgB;AAAA,IAC5C;AAEK,SAAA,cAAc,KAAK,GAAG,YAAY;AACvC,QAAI,KAAK,aAAa;AACpB,WAAK,GAAG,WAAW,KAAK,IAAI,kBAAkB,KAAK,WAAW;AAAA,IAChE;AAAA,EACF;AAAA,EAEO,MAAY;AACZ,SAAA;AACL,QAAI,KAAK,MAAM,KAAK,OAAO,KAAK,aAAa;AAC3C,WAAK,GAAG,SAAS,KAAK,IAAI,gBAAgB;AAC1C,WAAK,WAAW,KAAK,EAAE,OAAO,KAAK,aAAa;AAChD,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEO,SAAe;AAEpB,QAAI,KAAK,uBAAuB;AACzB,WAAA,aAAa,eAAe,gBAAgB,cAAc;AAAA,IAGjE;AAEI,QAAA,CAAC,KAAK,MAAM;AACd,WAAK,kBAAkB;AAAA,IAAA,OAClB;AACL,WAAK,wBAAwB;AAAA,IAC/B;AAEA,SAAK,eAAe;AACpB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEQ,0BAAgC;AACjC,SAAA,mBAAmB,KAAK,KAAM,OAAO;AACrC,SAAA,0BAA0B,KAAK,KAAM,QAAQ;AAAA,EACpD;AAAA,EAEQ,gBAAsB;AAC5B,SAAK,cAAc;AACnB,SAAK,mBAAmB;AACxB,SAAK,eAAe,aAAa;AAC5B,SAAA,YAAY,KAAK;EACxB;AAAA,EAEA,YAAYC,QAAc,QAAgB;AAElC,IAAAA,OAAA,OAAO,MAAM,WAAW;AAE9B,QAAI,KAAK,SAAS;AAEV,MAAAA,OAAA,OAAO,MAAM,UAAU;AAAA,IAAA,OAExB;AAEC,MAAAA,OAAA,OAAO,MAAM,UAAU;AAC7B,UAAI,KAAK,YAAY;AACb,QAAAA,OAAA,OAAO,MAAM,MAAM;AACzB,QAAAA,OAAM,OAAO,MAAM,OAAO,SAASA,OAAM,QAAQA,OAAM,KAAK;AAAA,MAAA,OACvD;AACC,QAAAA,OAAA,OAAO,MAAM,OAAO;AAC1B,QAAAA,OAAM,OAAO,MAAM,MAAM,SAASA,OAAM,SAASA,OAAM,KAAK;AAAA,MAE9D;AAAA,IACF;AAAA,EAEF;AAAA,EACA,SAASA,QAAc,QAAgB;AAErC,QAAIA,OAAM,QAAQ;AAEX,WAAA,IAAI,YAAYA,OAAM,MAAM;AAE5B,WAAA,YAAYA,QAAO,MAAM;AAAA,IAEhC;AAEO,WAAAA;AAAA,EAET;AAAA,EAEA,UAAU,IAAY;AAEpB,aAAS,IAAI,GAAG,IAAI,KAAK,IAAI,SAAS,QAAQ,KAAK;AACjD,YAAM,QAAQ,KAAK,IAAI,SAAS,CAAC;AAEjC,YAAM,MAAM,UAAU,MAAM,KAAK,UAAU;AAAA,IAE7C;AAEA,SAAK,OAAO;AAAA,EAEd;AAAA,EAEA,oBAAoB;AAGlB,QAAI,CAAC,KAAK,MAAM,CAAC,KAAK;AAAK;AAE3B,SAAK,mBAAmB;AAExB,SAAK,WAAW,QAAQ,CAAC,WAAW,UAAU;AAC5C,UAAI,KAAK,IAAI;AACL,cAAA,YAAY,KAAK,GAAG,kBAAkB,UAAU,OAAO,KAAK,GAAG,sBAAsB;AAC3F,cAAM,WAAW,KAAK,GAAG,aAAa,KAAK,IAAI,gBAAgB;AAE3D,YAAA,aAAa,CAAC,UAAU;AACpB,gBAAA,UAAU,KAAK,GAAG,kBAAkB,UAAU,OAAO,KAAK,GAAG,YAAY;AAC/E,gBAAM,WAAW,UAAU;AAC3B,eAAK,oBAAoB;AACpB,eAAA,GAAG,YAAY,UAAU,KAAK;AAC9B,eAAA,WAAW,OAAO,OAAO,CAAC;AAAA,QACjC;AAAA,MACF;AAAA,IAAA,CACD;AAAA,EAEH;AAAA,EAEA,cAAc;AACN,UAAA,cAAc,YAAY;AAE3B,SAAA,WAAW,KAAK,WAAW;AAGzB,WAAA,KAAK,WAAW,SAAS,KAAK,KAAK,WAAW,CAAC,KAAK,cAAc,KAAM;AAC7E,WAAK,WAAW;IAClB;AAGA,UAAM,MAAM,KAAK,MAAM,KAAK,WAAW,MAAM;AAExC,SAAA,aAAa,KAAK,KAAK,UAAU;AAEtC,UAAM,mBAAmB,eAAe,KAAK,eAAe,MAAO,KAAK;AACxE,UAAM,oBAAoB,eAAe,KAAK,gBAAgB,MAAO,KAAK;AAE1E,SAAK,sBAAsB,KAAK,UAAU,KAAK,YAAY,GAAG,kBAAkB,iBAAiB;AAC5F,SAAA,sBAAsB,KAAK,SAAS,KAAK,YAAY,KAAK,WAAW,kBAAkB,iBAAiB;AAC7G,QAAI,KAAK,UAAU;AACZ,WAAA,sBAAsB,KAAK,UAAU,KAAK,YAAY,KAAK,WAAW,kBAAkB,iBAAiB;AAAA,IAChH;AACA,QAAI,KAAK,iBAAiB;AACnB,WAAA,sBAAsB,KAAK,iBAAiB,KAAK,mBAAmB,KAAK,WAAW,kBAAkB,iBAAiB;AAAA,IAC9H;AAEA,QAAI,kBAAkB;AACpB,WAAK,eAAe;AAAA,IACtB;AACA,QAAI,mBAAmB;AACrB,WAAK,gBAAgB;AAAA,IACvB;AAEO,WAAA;AAAA,EACT;AAAA,EAEQ,sBACNA,QACA,cACA,WACA,kBACA,mBACA;AACA,QAAI,CAACA,UAAS,aAAa,KAAK,WAAW;AAAG;AAG9C,QAAI,EAAEA,OAAM,QAAQ,KAAK,UAAU;AAC5B,WAAA,QAAQA,OAAM,IAAI,IAAI;AACtB,WAAA,QAAQA,OAAM,IAAI,IAAI;AACtB,WAAA,UAAUA,OAAM,IAAI,IAAI;AAAA,IAC/B;AAEA,UAAM,eAAe,aAAa,KAAK,aAAa,KAAK,SAAS,CAAC;AAE9D,SAAA,QAAQA,OAAM,IAAI,IAAI,KAAK,IAAI,GAAG,aAAa,IAAI;AACnD,SAAA,QAAQA,OAAM,IAAI,IAAI,KAAK,IAAI,KAAK,QAAQA,OAAM,IAAI,GAAG,YAAY;AAErE,SAAA,UAAUA,OAAM,IAAI,IAAI,KAAK,UAAUA,OAAM,IAAI,IAAI,MAAM,eAAe;AAG/E,UAAM,WAAW,KAAK;AAAA,MACpB,KAAK,IAAI,GAAG,aAAa,IAAI;AAAA,MAC7B,GAAG,aAAa,MAAM,MAAM,CAAC,KAAK,YAAY;AAAA,IAAA;AAG3C,SAAA;AAGL,QAAI,kBAAkB;AACd,MAAAA,OAAA;AAAA,QACJ,KAAK,UAAUA,OAAM,IAAI;AAAA,QACzB,KAAK,QAAQA,OAAM,IAAI;AAAA,QACvB;AAAA,MAAA;AAAA,IAEJ;AAGA,QAAI,mBAAmB;AACf,MAAAA,OAAA;AAAA,QACJ;AAAA,QACA;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AAAA,EAEA,eAAe,QAAgB;AAE7B,QAAI,OAAO,aAAa;AAEf,aAAA,YAAY,KAAK,MAAM;AAC9B,WAAK,wBAAwB;AAAA,IAE/B;AAAA,EAEF;AAAA,EAEA,aAAa,aAA6D,WAA+B,aAAqB;AAE5H,QAAI,OAAO,eAAe,aAAa,KAAK,uBAAuB;AAE1D,aAAA,YAAY,KAAK,SAAS;AACjC,YAAM,aAAa,YAAY,QAAQ,aAAa,aAAa,SAAS;AAC1E,WAAK,oBAAoB,WAAW;AACpC,WAAK,wBAAwB;AAAA,IAE/B;AAAA,EAEF;AAAA,EAEA,YAAYA,QAAgE,cAAmD,YAAY,GAAG;AAC5I,QAAI,CAACA,UAAS,aAAa,KAAK,WAAW;AAAG;AAExC,UAAA,cAAc,YAAY;AAGhC,QAAI,EAAEA,OAAM,QAAQ,KAAK,UAAU;AAC5B,WAAA,QAAQA,OAAM,IAAI,IAAI;AACtB,WAAA,QAAQA,OAAM,IAAI,IAAI;AACtB,WAAA,UAAUA,OAAM,IAAI,IAAI;AAAA,IAC/B;AAGA,UAAM,eAAe,aAAa,KAAK,aAAa,KAAK,SAAS,CAAC;AAC7D,UAAA,YAAY,KAAK,IAAI,GAAG,aAAa,KAAK,MAAM,GAAG,CAAC;AAGrD,SAAA,QAAQA,OAAM,IAAI,IAAI,KAAK,IAAI,KAAK,QAAQA,OAAM,IAAI,GAAG,YAAY;AACrE,SAAA,QAAQA,OAAM,IAAI,IAAI,KAAK,IAAI,KAAK,QAAQA,OAAM,IAAI,GAAG,YAAY;AAGrE,SAAA,UAAUA,OAAM,IAAI,IAAI,KAAK,UAAUA,OAAM,IAAI,IAAI,MAAM,eAAe;AAGzE,UAAA,WAAW,KAAK,IAAI,WAAW,GAAG,aAAa,MAAM,MAAM,CAAC,KAAK,YAAY,CAAC;AAE/E,SAAA;AAGL,QAAI,KAAK,iBAAiB,KAAK,gBAAgB,OAAO,GAAG;AAClD,WAAA,QAAQA,OAAM,IAAI,IAAI;AACtB,WAAA,QAAQA,OAAM,IAAI,IAAI;AAAA,IAC7B;AAEA,QAAIA,OAAM,QAAQ;AAEhB,UAAI,eAAe,KAAK,cAAc,MAAO,KAAK,eAAe;AACzD,QAAAA,OAAA;AAAA,UACJ,KAAK,UAAUA,OAAM,IAAI;AAAA,UACzB;AAAA,UACA,KAAK,QAAQA,OAAM,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AAGA,UAAI,eAAe,KAAK,gBAAgB,MAAO,KAAK,iBAAiB;AAC7D,QAAAA,OAAA;AAAA,UACJ;AAAA,UACA;AAAA,QAAA;AAEF,aAAK,gBAAgB;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,iBAAuB;AAC7B,SAAK,aAAa,KAAK,kBAAkB,KAAK,UAAU;AACxD,SAAK,aAAa,KAAK,kBAAkB,KAAK,UAAU;AAExD,QAAI,KAAK,QAAQ,KAAK,4BAA4B,QAAW;AAC3D,WAAK,aAAa,KAAK,yBAAyB,KAAK,iBAAiB;AAAA,IACxE;AAAA,EACF;AAAA,EAEA,aAAa,OAAe,cAA0C;AAOvD,iBAAA,KAAK,KAAK,KAAK;AAC5B,QAAI,aAAa,KAAK,SAAS,KAAK,YAAY;AAC9C,mBAAa,OAAO,aAAa,KAAK,MAAM,CAAC,KAAK,UAAU;AAAA,IAC9D;AAGa,iBAAA,MAAM,KAAK,KAAK;AAC7B,QAAI,aAAa,MAAM,SAAS,KAAK,cAAc;AACjD,mBAAa,QAAQ,aAAa,MAAM,MAAM,CAAC,KAAK,YAAY;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,IAAI,aAAa;AAEf,WAAO,KAAK;AAAA,EAEd;AAAA,EAEA,mBAAmB,UAAe;AAGhC,UAAM,uBAAuB,SAAS;AAGtC,UAAM,gBAAgB;AAGb,aAAA,SAAS,SAAU,OAAoB,QAAsB;AAGpE,oBAAc,MAAM;AAGC,2BAAA,KAAK,MAAM,OAAO,MAAM;AAE7C,oBAAc,IAAI;AAAA,IAAA;AAIpB,SAAK,uBAAuB;AAAA,EAE9B;AACF;AArjBM,OAgDG,QAAQC,MAAAA;AAhDjB,IAAM,QAAN;;"}
|
|
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
|
|
41
|
-
this.resizePanel(this.msPanel
|
|
57
|
+
this.resizePanel(this.fpsPanel);
|
|
58
|
+
this.resizePanel(this.msPanel);
|
|
42
59
|
if (this.gpuPanel)
|
|
43
|
-
this.resizePanel(this.gpuPanel
|
|
60
|
+
this.resizePanel(this.gpuPanel);
|
|
44
61
|
if (this.gpuPanelCompute)
|
|
45
|
-
this.resizePanel(this.gpuPanelCompute
|
|
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.
|
|
64
|
-
this.
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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")
|
|
182
|
+
this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"));
|
|
156
183
|
}
|
|
157
184
|
}
|
|
158
185
|
}
|
|
159
186
|
begin() {
|
|
160
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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 =
|
|
237
|
+
panel.canvas.style.top = panel.id * panel.HEIGHT / panel.PR + "px";
|
|
215
238
|
}
|
|
216
239
|
}
|
|
217
240
|
}
|
|
218
|
-
addPanel(panel
|
|
241
|
+
addPanel(panel) {
|
|
219
242
|
if (panel.canvas) {
|
|
220
243
|
this.dom.appendChild(panel.canvas);
|
|
221
|
-
this.
|
|
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
|
|
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;
|