stats-gl 2.0.1 → 2.2.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/dist/main.cjs +47 -9
- package/dist/main.cjs.map +1 -1
- package/dist/main.js +47 -9
- package/dist/main.js.map +1 -1
- package/dist/stats-gl.d.ts +6 -4
- package/lib/main.ts +82 -18
- package/package.json +7 -7
package/dist/main.cjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const panel = require("./panel.cjs");
|
|
3
|
-
const _Stats = class
|
|
3
|
+
const _Stats = class _Stats2 {
|
|
4
4
|
constructor({ logsPerSecond = 20, samplesLog = 100, samplesGraph = 10, precision = 2, minimal = false, horizontal = true, mode = 0 } = {}) {
|
|
5
5
|
this.totalCpuDuration = 0;
|
|
6
6
|
this.totalGpuDuration = 0;
|
|
7
|
+
this.totalGpuDurationCompute = 0;
|
|
7
8
|
this.totalFps = 0;
|
|
8
9
|
this.activeQuery = null;
|
|
9
10
|
this.gpuQueries = [];
|
|
@@ -33,10 +34,15 @@ const _Stats = class _Stats {
|
|
|
33
34
|
logs: [],
|
|
34
35
|
graph: []
|
|
35
36
|
};
|
|
37
|
+
this.averageGpuCompute = {
|
|
38
|
+
logs: [],
|
|
39
|
+
graph: []
|
|
40
|
+
};
|
|
36
41
|
this.queryCreated = false;
|
|
37
|
-
this.fpsPanel = this.addPanel(new
|
|
38
|
-
this.msPanel = this.addPanel(new
|
|
42
|
+
this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
|
|
43
|
+
this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
|
|
39
44
|
this.gpuPanel = null;
|
|
45
|
+
this.gpuPanelCompute = null;
|
|
40
46
|
this.samplesLog = samplesLog;
|
|
41
47
|
this.samplesGraph = samplesGraph;
|
|
42
48
|
this.precision = precision;
|
|
@@ -55,6 +61,9 @@ const _Stats = class _Stats {
|
|
|
55
61
|
if (this.gpuPanel) {
|
|
56
62
|
this.resizePanel(this.gpuPanel, 2);
|
|
57
63
|
}
|
|
64
|
+
if (this.gpuPanelCompute) {
|
|
65
|
+
this.resizePanel(this.gpuPanelCompute, 3);
|
|
66
|
+
}
|
|
58
67
|
});
|
|
59
68
|
}
|
|
60
69
|
}
|
|
@@ -62,10 +71,24 @@ const _Stats = class _Stats {
|
|
|
62
71
|
const originalRenderMethod = renderer.render;
|
|
63
72
|
const statsInstance = this;
|
|
64
73
|
renderer.render = function(scene, camera) {
|
|
74
|
+
if (statsInstance.info !== void 0) {
|
|
75
|
+
statsInstance.totalGpuDuration = this.info.timestamp.compute + this.info.timestamp.render;
|
|
76
|
+
}
|
|
65
77
|
statsInstance.begin();
|
|
66
78
|
originalRenderMethod.call(this, scene, camera);
|
|
67
79
|
statsInstance.end();
|
|
68
80
|
};
|
|
81
|
+
if (renderer.renderAsync) {
|
|
82
|
+
const originalRenderAsyncMethod = renderer.renderAsync;
|
|
83
|
+
renderer.renderAsync = function(scene, camera) {
|
|
84
|
+
if (statsInstance.info !== void 0) {
|
|
85
|
+
statsInstance.totalGpuDuration = this.info.timestamp.compute + this.info.timestamp.render;
|
|
86
|
+
}
|
|
87
|
+
statsInstance.begin();
|
|
88
|
+
originalRenderAsyncMethod.call(this, scene, camera);
|
|
89
|
+
statsInstance.end();
|
|
90
|
+
};
|
|
91
|
+
}
|
|
69
92
|
this.threeRendererPatched = true;
|
|
70
93
|
}
|
|
71
94
|
resizePanel(panel2, offset) {
|
|
@@ -97,18 +120,26 @@ const _Stats = class _Stats {
|
|
|
97
120
|
}
|
|
98
121
|
this.mode = id;
|
|
99
122
|
}
|
|
100
|
-
init(canvasOrGL) {
|
|
123
|
+
async init(canvasOrGL) {
|
|
101
124
|
if (!canvasOrGL) {
|
|
102
125
|
console.error('Stats: The "canvas" parameter is undefined.');
|
|
103
126
|
return;
|
|
104
127
|
}
|
|
105
|
-
if (canvasOrGL.isWebGLRenderer && !this.threeRendererPatched) {
|
|
128
|
+
if ((canvasOrGL.isWebGLRenderer || canvasOrGL.isWebGPURenderer) && !this.threeRendererPatched) {
|
|
106
129
|
const canvas = canvasOrGL;
|
|
107
130
|
this.patchThreeRenderer(canvas);
|
|
108
131
|
this.gl = canvas.getContext();
|
|
109
|
-
}
|
|
110
|
-
if (!this.gl && canvasOrGL instanceof WebGL2RenderingContext) {
|
|
132
|
+
} else if (!this.gl && canvasOrGL instanceof WebGL2RenderingContext) {
|
|
111
133
|
this.gl = canvasOrGL;
|
|
134
|
+
}
|
|
135
|
+
if (canvasOrGL.isWebGPURenderer) {
|
|
136
|
+
canvasOrGL.backend.trackTimestamp = true;
|
|
137
|
+
if (await canvasOrGL.hasFeatureAsync("timestamp-query")) {
|
|
138
|
+
this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
|
|
139
|
+
this.gpuPanelCompute = this.addPanel(new _Stats2.Panel("COM", "#e1e1e1", "#212121"), 3);
|
|
140
|
+
this.info = canvasOrGL.info;
|
|
141
|
+
}
|
|
142
|
+
return;
|
|
112
143
|
} else if (!this.gl && canvasOrGL instanceof HTMLCanvasElement || canvasOrGL instanceof OffscreenCanvas) {
|
|
113
144
|
this.gl = canvasOrGL.getContext("webgl2");
|
|
114
145
|
if (!this.gl) {
|
|
@@ -121,7 +152,7 @@ const _Stats = class _Stats {
|
|
|
121
152
|
}
|
|
122
153
|
this.ext = this.gl.getExtension("EXT_disjoint_timer_query_webgl2");
|
|
123
154
|
if (this.ext) {
|
|
124
|
-
this.gpuPanel = this.addPanel(new
|
|
155
|
+
this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
|
|
125
156
|
}
|
|
126
157
|
}
|
|
127
158
|
begin() {
|
|
@@ -173,7 +204,11 @@ const _Stats = class _Stats {
|
|
|
173
204
|
this.addToAverage(this.totalGpuDuration, this.averageGpu);
|
|
174
205
|
this.renderCount = 0;
|
|
175
206
|
this.totalCpuDuration = 0;
|
|
176
|
-
this.
|
|
207
|
+
if (this.info === void 0) {
|
|
208
|
+
this.addToAverage(this.totalGpuDurationCompute, this.averageGpuCompute);
|
|
209
|
+
this.totalGpuDuration = 0;
|
|
210
|
+
this.totalGpuDurationCompute = 0;
|
|
211
|
+
}
|
|
177
212
|
this.totalFps = 0;
|
|
178
213
|
this.beginTime = this.endInternal();
|
|
179
214
|
}
|
|
@@ -183,6 +218,9 @@ const _Stats = class _Stats {
|
|
|
183
218
|
if (time >= this.prevCpuTime + 1e3 / this.logsPerSecond) {
|
|
184
219
|
this.updatePanel(this.msPanel, this.averageCpu);
|
|
185
220
|
this.updatePanel(this.gpuPanel, this.averageGpu);
|
|
221
|
+
if (this.gpuPanelCompute) {
|
|
222
|
+
this.updatePanel(this.gpuPanelCompute, this.averageGpuCompute);
|
|
223
|
+
}
|
|
186
224
|
this.prevCpuTime = time;
|
|
187
225
|
}
|
|
188
226
|
if (time >= this.prevTime + 1e3) {
|
package/dist/main.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.cjs","sources":["../lib/main.ts"],"sourcesContent":null,"names":["panel","Panel"],"mappings":";;AAQA,MAAM,SAAN,
|
|
1
|
+
{"version":3,"file":"main.cjs","sources":["../lib/main.ts"],"sourcesContent":null,"names":["_Stats","panel","Panel"],"mappings":"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"}
|
package/dist/main.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import Panel from "./panel.js";
|
|
2
|
-
const _Stats = class
|
|
2
|
+
const _Stats = class _Stats2 {
|
|
3
3
|
constructor({ logsPerSecond = 20, samplesLog = 100, samplesGraph = 10, precision = 2, minimal = false, horizontal = true, mode = 0 } = {}) {
|
|
4
4
|
this.totalCpuDuration = 0;
|
|
5
5
|
this.totalGpuDuration = 0;
|
|
6
|
+
this.totalGpuDurationCompute = 0;
|
|
6
7
|
this.totalFps = 0;
|
|
7
8
|
this.activeQuery = null;
|
|
8
9
|
this.gpuQueries = [];
|
|
@@ -32,10 +33,15 @@ const _Stats = class _Stats {
|
|
|
32
33
|
logs: [],
|
|
33
34
|
graph: []
|
|
34
35
|
};
|
|
36
|
+
this.averageGpuCompute = {
|
|
37
|
+
logs: [],
|
|
38
|
+
graph: []
|
|
39
|
+
};
|
|
35
40
|
this.queryCreated = false;
|
|
36
|
-
this.fpsPanel = this.addPanel(new
|
|
37
|
-
this.msPanel = this.addPanel(new
|
|
41
|
+
this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
|
|
42
|
+
this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
|
|
38
43
|
this.gpuPanel = null;
|
|
44
|
+
this.gpuPanelCompute = null;
|
|
39
45
|
this.samplesLog = samplesLog;
|
|
40
46
|
this.samplesGraph = samplesGraph;
|
|
41
47
|
this.precision = precision;
|
|
@@ -54,6 +60,9 @@ const _Stats = class _Stats {
|
|
|
54
60
|
if (this.gpuPanel) {
|
|
55
61
|
this.resizePanel(this.gpuPanel, 2);
|
|
56
62
|
}
|
|
63
|
+
if (this.gpuPanelCompute) {
|
|
64
|
+
this.resizePanel(this.gpuPanelCompute, 3);
|
|
65
|
+
}
|
|
57
66
|
});
|
|
58
67
|
}
|
|
59
68
|
}
|
|
@@ -61,10 +70,24 @@ const _Stats = class _Stats {
|
|
|
61
70
|
const originalRenderMethod = renderer.render;
|
|
62
71
|
const statsInstance = this;
|
|
63
72
|
renderer.render = function(scene, camera) {
|
|
73
|
+
if (statsInstance.info !== void 0) {
|
|
74
|
+
statsInstance.totalGpuDuration = this.info.timestamp.compute + this.info.timestamp.render;
|
|
75
|
+
}
|
|
64
76
|
statsInstance.begin();
|
|
65
77
|
originalRenderMethod.call(this, scene, camera);
|
|
66
78
|
statsInstance.end();
|
|
67
79
|
};
|
|
80
|
+
if (renderer.renderAsync) {
|
|
81
|
+
const originalRenderAsyncMethod = renderer.renderAsync;
|
|
82
|
+
renderer.renderAsync = function(scene, camera) {
|
|
83
|
+
if (statsInstance.info !== void 0) {
|
|
84
|
+
statsInstance.totalGpuDuration = this.info.timestamp.compute + this.info.timestamp.render;
|
|
85
|
+
}
|
|
86
|
+
statsInstance.begin();
|
|
87
|
+
originalRenderAsyncMethod.call(this, scene, camera);
|
|
88
|
+
statsInstance.end();
|
|
89
|
+
};
|
|
90
|
+
}
|
|
68
91
|
this.threeRendererPatched = true;
|
|
69
92
|
}
|
|
70
93
|
resizePanel(panel, offset) {
|
|
@@ -96,18 +119,26 @@ const _Stats = class _Stats {
|
|
|
96
119
|
}
|
|
97
120
|
this.mode = id;
|
|
98
121
|
}
|
|
99
|
-
init(canvasOrGL) {
|
|
122
|
+
async init(canvasOrGL) {
|
|
100
123
|
if (!canvasOrGL) {
|
|
101
124
|
console.error('Stats: The "canvas" parameter is undefined.');
|
|
102
125
|
return;
|
|
103
126
|
}
|
|
104
|
-
if (canvasOrGL.isWebGLRenderer && !this.threeRendererPatched) {
|
|
127
|
+
if ((canvasOrGL.isWebGLRenderer || canvasOrGL.isWebGPURenderer) && !this.threeRendererPatched) {
|
|
105
128
|
const canvas = canvasOrGL;
|
|
106
129
|
this.patchThreeRenderer(canvas);
|
|
107
130
|
this.gl = canvas.getContext();
|
|
108
|
-
}
|
|
109
|
-
if (!this.gl && canvasOrGL instanceof WebGL2RenderingContext) {
|
|
131
|
+
} else if (!this.gl && canvasOrGL instanceof WebGL2RenderingContext) {
|
|
110
132
|
this.gl = canvasOrGL;
|
|
133
|
+
}
|
|
134
|
+
if (canvasOrGL.isWebGPURenderer) {
|
|
135
|
+
canvasOrGL.backend.trackTimestamp = true;
|
|
136
|
+
if (await canvasOrGL.hasFeatureAsync("timestamp-query")) {
|
|
137
|
+
this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
|
|
138
|
+
this.gpuPanelCompute = this.addPanel(new _Stats2.Panel("COM", "#e1e1e1", "#212121"), 3);
|
|
139
|
+
this.info = canvasOrGL.info;
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
111
142
|
} else if (!this.gl && canvasOrGL instanceof HTMLCanvasElement || canvasOrGL instanceof OffscreenCanvas) {
|
|
112
143
|
this.gl = canvasOrGL.getContext("webgl2");
|
|
113
144
|
if (!this.gl) {
|
|
@@ -120,7 +151,7 @@ const _Stats = class _Stats {
|
|
|
120
151
|
}
|
|
121
152
|
this.ext = this.gl.getExtension("EXT_disjoint_timer_query_webgl2");
|
|
122
153
|
if (this.ext) {
|
|
123
|
-
this.gpuPanel = this.addPanel(new
|
|
154
|
+
this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
|
|
124
155
|
}
|
|
125
156
|
}
|
|
126
157
|
begin() {
|
|
@@ -172,7 +203,11 @@ const _Stats = class _Stats {
|
|
|
172
203
|
this.addToAverage(this.totalGpuDuration, this.averageGpu);
|
|
173
204
|
this.renderCount = 0;
|
|
174
205
|
this.totalCpuDuration = 0;
|
|
175
|
-
this.
|
|
206
|
+
if (this.info === void 0) {
|
|
207
|
+
this.addToAverage(this.totalGpuDurationCompute, this.averageGpuCompute);
|
|
208
|
+
this.totalGpuDuration = 0;
|
|
209
|
+
this.totalGpuDurationCompute = 0;
|
|
210
|
+
}
|
|
176
211
|
this.totalFps = 0;
|
|
177
212
|
this.beginTime = this.endInternal();
|
|
178
213
|
}
|
|
@@ -182,6 +217,9 @@ const _Stats = class _Stats {
|
|
|
182
217
|
if (time >= this.prevCpuTime + 1e3 / this.logsPerSecond) {
|
|
183
218
|
this.updatePanel(this.msPanel, this.averageCpu);
|
|
184
219
|
this.updatePanel(this.gpuPanel, this.averageGpu);
|
|
220
|
+
if (this.gpuPanelCompute) {
|
|
221
|
+
this.updatePanel(this.gpuPanelCompute, this.averageGpuCompute);
|
|
222
|
+
}
|
|
185
223
|
this.prevCpuTime = time;
|
|
186
224
|
}
|
|
187
225
|
if (time >= this.prevTime + 1e3) {
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../lib/main.ts"],"sourcesContent":null,"names":[],"mappings":";AAQA,MAAM,SAAN,
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../lib/main.ts"],"sourcesContent":null,"names":["_Stats"],"mappings":"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"}
|
package/dist/stats-gl.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
|
|
3
1
|
declare class Panel {
|
|
4
2
|
canvas: HTMLCanvasElement;
|
|
5
3
|
context: CanvasRenderingContext2D | null;
|
|
@@ -26,8 +24,10 @@ interface AverageArray {
|
|
|
26
24
|
declare class Stats {
|
|
27
25
|
totalCpuDuration: number;
|
|
28
26
|
totalGpuDuration: number;
|
|
27
|
+
totalGpuDurationCompute: number;
|
|
29
28
|
totalFps: number;
|
|
30
29
|
mode: number;
|
|
30
|
+
info: any;
|
|
31
31
|
dom: HTMLDivElement;
|
|
32
32
|
minimal: boolean;
|
|
33
33
|
horizontal: boolean;
|
|
@@ -37,12 +37,14 @@ declare class Stats {
|
|
|
37
37
|
frames: number;
|
|
38
38
|
averageCpu: AverageArray;
|
|
39
39
|
averageGpu: AverageArray;
|
|
40
|
+
averageGpuCompute: AverageArray;
|
|
40
41
|
queryCreated: boolean;
|
|
41
42
|
isRunningCPUProfiling: boolean;
|
|
42
43
|
fpsPanel: Panel;
|
|
43
44
|
static Panel: typeof Panel;
|
|
44
45
|
msPanel: Panel;
|
|
45
46
|
gpuPanel: Panel | null;
|
|
47
|
+
gpuPanelCompute: Panel | null;
|
|
46
48
|
samplesLog: number;
|
|
47
49
|
samplesGraph: number;
|
|
48
50
|
logsPerSecond: number;
|
|
@@ -67,11 +69,11 @@ declare class Stats {
|
|
|
67
69
|
horizontal?: boolean | undefined;
|
|
68
70
|
mode?: number | undefined;
|
|
69
71
|
});
|
|
70
|
-
patchThreeRenderer(renderer:
|
|
72
|
+
patchThreeRenderer(renderer: any): void;
|
|
71
73
|
resizePanel(panel: Panel, offset: number): void;
|
|
72
74
|
addPanel(panel: Panel, offset: number): Panel;
|
|
73
75
|
showPanel(id: number): void;
|
|
74
|
-
init(canvasOrGL:
|
|
76
|
+
init(canvasOrGL: any): Promise<void>;
|
|
75
77
|
begin(): void;
|
|
76
78
|
end(): void;
|
|
77
79
|
processGpuQueries(): void;
|
package/lib/main.ts
CHANGED
|
@@ -9,8 +9,10 @@ export interface AverageArray {
|
|
|
9
9
|
class Stats {
|
|
10
10
|
totalCpuDuration: number = 0;
|
|
11
11
|
totalGpuDuration: number = 0;
|
|
12
|
+
totalGpuDurationCompute: number = 0;
|
|
12
13
|
totalFps: number = 0;
|
|
13
14
|
mode: number;
|
|
15
|
+
info: any;
|
|
14
16
|
dom: HTMLDivElement;
|
|
15
17
|
minimal: boolean;
|
|
16
18
|
horizontal: boolean;
|
|
@@ -20,12 +22,14 @@ class Stats {
|
|
|
20
22
|
frames: number;
|
|
21
23
|
averageCpu: AverageArray;
|
|
22
24
|
averageGpu: AverageArray;
|
|
25
|
+
averageGpuCompute: AverageArray;
|
|
23
26
|
queryCreated: boolean;
|
|
24
27
|
isRunningCPUProfiling: boolean;
|
|
25
28
|
fpsPanel: Panel;
|
|
26
29
|
static Panel: typeof Panel = Panel;
|
|
27
30
|
msPanel: Panel;
|
|
28
31
|
gpuPanel: Panel | null;
|
|
32
|
+
gpuPanelCompute: Panel | null;
|
|
29
33
|
samplesLog: number;
|
|
30
34
|
samplesGraph: number;
|
|
31
35
|
logsPerSecond: number;
|
|
@@ -59,7 +63,7 @@ class Stats {
|
|
|
59
63
|
|
|
60
64
|
this.isRunningCPUProfiling = false;
|
|
61
65
|
this.minimal = minimal;
|
|
62
|
-
|
|
66
|
+
|
|
63
67
|
this.beginTime = (performance || Date).now();
|
|
64
68
|
this.prevTime = this.beginTime;
|
|
65
69
|
this.prevCpuTime = this.beginTime;
|
|
@@ -74,12 +78,17 @@ class Stats {
|
|
|
74
78
|
logs: [],
|
|
75
79
|
graph: []
|
|
76
80
|
};
|
|
81
|
+
this.averageGpuCompute = {
|
|
82
|
+
logs: [],
|
|
83
|
+
graph: []
|
|
84
|
+
};
|
|
77
85
|
|
|
78
86
|
this.queryCreated = false;
|
|
79
87
|
|
|
80
88
|
this.fpsPanel = this.addPanel(new Stats.Panel('FPS', '#0ff', '#002'), 0);
|
|
81
89
|
this.msPanel = this.addPanel(new Stats.Panel('CPU', '#0f0', '#020'), 1);
|
|
82
90
|
this.gpuPanel = null;
|
|
91
|
+
this.gpuPanelCompute = null;
|
|
83
92
|
|
|
84
93
|
this.samplesLog = samplesLog;
|
|
85
94
|
this.samplesGraph = samplesGraph;
|
|
@@ -108,13 +117,16 @@ class Stats {
|
|
|
108
117
|
if (this.gpuPanel) {
|
|
109
118
|
this.resizePanel(this.gpuPanel, 2);
|
|
110
119
|
}
|
|
120
|
+
if (this.gpuPanelCompute) {
|
|
121
|
+
this.resizePanel(this.gpuPanelCompute, 3);
|
|
122
|
+
}
|
|
111
123
|
})
|
|
112
124
|
}
|
|
113
125
|
|
|
114
126
|
|
|
115
127
|
}
|
|
116
128
|
|
|
117
|
-
patchThreeRenderer(renderer:
|
|
129
|
+
patchThreeRenderer(renderer: any) {
|
|
118
130
|
|
|
119
131
|
// Store the original render method
|
|
120
132
|
const originalRenderMethod = renderer.render;
|
|
@@ -123,7 +135,13 @@ class Stats {
|
|
|
123
135
|
const statsInstance = this;
|
|
124
136
|
|
|
125
137
|
// Override the render method on the prototype
|
|
126
|
-
renderer.render = function(scene, camera) {
|
|
138
|
+
renderer.render = function (scene: THREE.Scene, camera: THREE.Camera) {
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
if (statsInstance.info !== undefined) {
|
|
142
|
+
statsInstance.totalGpuDuration = this.info.timestamp.compute + this.info.timestamp.render
|
|
143
|
+
}
|
|
144
|
+
|
|
127
145
|
statsInstance.begin(); // Start tracking for this render call
|
|
128
146
|
|
|
129
147
|
// Call the original render method
|
|
@@ -132,6 +150,28 @@ class Stats {
|
|
|
132
150
|
statsInstance.end(); // End tracking for this render call
|
|
133
151
|
};
|
|
134
152
|
|
|
153
|
+
if (renderer.renderAsync) {
|
|
154
|
+
const originalRenderAsyncMethod = renderer.renderAsync;
|
|
155
|
+
|
|
156
|
+
renderer.renderAsync = function (scene: THREE.Scene, camera: THREE.Camera) {
|
|
157
|
+
|
|
158
|
+
if (statsInstance.info !== undefined) {
|
|
159
|
+
statsInstance.totalGpuDuration = this.info.timestamp.compute + this.info.timestamp.render
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
statsInstance.begin(); // Start tracking for this render call
|
|
163
|
+
|
|
164
|
+
// Call the original render method
|
|
165
|
+
originalRenderAsyncMethod.call(this, scene, camera);
|
|
166
|
+
|
|
167
|
+
statsInstance.end(); // End tracking for this render call
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
135
175
|
this.threeRendererPatched = true;
|
|
136
176
|
|
|
137
177
|
}
|
|
@@ -185,7 +225,7 @@ class Stats {
|
|
|
185
225
|
|
|
186
226
|
}
|
|
187
227
|
|
|
188
|
-
init(canvasOrGL:
|
|
228
|
+
async init(canvasOrGL: any) {
|
|
189
229
|
if (!canvasOrGL) {
|
|
190
230
|
console.error('Stats: The "canvas" parameter is undefined.');
|
|
191
231
|
return;
|
|
@@ -198,16 +238,27 @@ class Stats {
|
|
|
198
238
|
// this.patchThreeRenderer(canvas as any);
|
|
199
239
|
// this.gl = canvas.getContext();
|
|
200
240
|
// } else
|
|
201
|
-
if ((canvasOrGL as any).isWebGLRenderer && !this.threeRendererPatched) {
|
|
241
|
+
if (((canvasOrGL as any).isWebGLRenderer || (canvasOrGL as any).isWebGPURenderer) && !this.threeRendererPatched) {
|
|
202
242
|
const canvas: any = canvasOrGL
|
|
203
243
|
this.patchThreeRenderer(canvas as any);
|
|
204
244
|
this.gl = canvas.getContext();
|
|
245
|
+
} else if (!this.gl && canvasOrGL instanceof WebGL2RenderingContext) {
|
|
246
|
+
this.gl = canvasOrGL;
|
|
205
247
|
}
|
|
206
248
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
249
|
+
if (canvasOrGL.isWebGPURenderer) {
|
|
250
|
+
|
|
251
|
+
canvasOrGL.backend.trackTimestamp = true
|
|
252
|
+
|
|
253
|
+
if (await canvasOrGL.hasFeatureAsync('timestamp-query')) {
|
|
254
|
+
this.gpuPanel = this.addPanel(new Stats.Panel('GPU', '#ff0', '#220'), 2);
|
|
255
|
+
this.gpuPanelCompute = this.addPanel(new Stats.Panel('COM', '#e1e1e1', '#212121'), 3);
|
|
256
|
+
this.info = canvasOrGL.info
|
|
257
|
+
}
|
|
258
|
+
return;
|
|
210
259
|
}
|
|
260
|
+
// Check if canvasOrGL is already a WebGL2RenderingContext
|
|
261
|
+
|
|
211
262
|
|
|
212
263
|
// Handle HTMLCanvasElement and OffscreenCanvas
|
|
213
264
|
else if (!this.gl && canvasOrGL instanceof HTMLCanvasElement || canvasOrGL instanceof OffscreenCanvas) {
|
|
@@ -236,7 +287,7 @@ class Stats {
|
|
|
236
287
|
}
|
|
237
288
|
|
|
238
289
|
if (!this.gl || !this.ext) return;
|
|
239
|
-
|
|
290
|
+
|
|
240
291
|
if (this.gl && this.ext) {
|
|
241
292
|
if (this.activeQuery) {
|
|
242
293
|
// End the previous query if it's still active
|
|
@@ -267,8 +318,10 @@ class Stats {
|
|
|
267
318
|
}
|
|
268
319
|
|
|
269
320
|
processGpuQueries() {
|
|
321
|
+
|
|
322
|
+
|
|
270
323
|
if (!this.gl || !this.ext) return;
|
|
271
|
-
|
|
324
|
+
|
|
272
325
|
this.totalGpuDuration = 0;
|
|
273
326
|
|
|
274
327
|
this.gpuQueries.forEach((queryInfo, index) => {
|
|
@@ -289,17 +342,24 @@ class Stats {
|
|
|
289
342
|
}
|
|
290
343
|
|
|
291
344
|
update() {
|
|
292
|
-
|
|
345
|
+
|
|
293
346
|
this.processGpuQueries();
|
|
294
347
|
this.endProfiling('cpu-started', 'cpu-finished', 'cpu-duration');
|
|
295
348
|
|
|
296
349
|
// Calculate the total duration of CPU and GPU work for this frame
|
|
297
|
-
this.addToAverage(this.totalCpuDuration
|
|
350
|
+
this.addToAverage(this.totalCpuDuration, this.averageCpu);
|
|
298
351
|
this.addToAverage(this.totalGpuDuration, this.averageGpu);
|
|
299
352
|
|
|
300
353
|
this.renderCount = 0;
|
|
301
354
|
this.totalCpuDuration = 0;
|
|
302
|
-
|
|
355
|
+
|
|
356
|
+
if (this.info === undefined) {
|
|
357
|
+
this.addToAverage(this.totalGpuDurationCompute, this.averageGpuCompute);
|
|
358
|
+
|
|
359
|
+
this.totalGpuDuration = 0;
|
|
360
|
+
this.totalGpuDurationCompute = 0;
|
|
361
|
+
|
|
362
|
+
}
|
|
303
363
|
this.totalFps = 0;
|
|
304
364
|
|
|
305
365
|
this.beginTime = this.endInternal()
|
|
@@ -317,6 +377,10 @@ class Stats {
|
|
|
317
377
|
this.updatePanel(this.msPanel, this.averageCpu);
|
|
318
378
|
this.updatePanel(this.gpuPanel, this.averageGpu);
|
|
319
379
|
|
|
380
|
+
if (this.gpuPanelCompute) {
|
|
381
|
+
this.updatePanel(this.gpuPanelCompute, this.averageGpuCompute);
|
|
382
|
+
}
|
|
383
|
+
|
|
320
384
|
this.prevCpuTime = time;
|
|
321
385
|
}
|
|
322
386
|
|
|
@@ -415,16 +479,16 @@ class Stats {
|
|
|
415
479
|
|
|
416
480
|
get domElement() {
|
|
417
481
|
// patch for some use case in threejs
|
|
418
|
-
|
|
482
|
+
return this.dom;
|
|
419
483
|
|
|
420
|
-
|
|
484
|
+
}
|
|
421
485
|
|
|
422
486
|
get container() { // @deprecated
|
|
423
487
|
|
|
424
|
-
|
|
425
|
-
|
|
488
|
+
console.warn('Stats: Deprecated! this.container as been replaced to this.dom ')
|
|
489
|
+
return this.dom;
|
|
426
490
|
|
|
427
|
-
|
|
491
|
+
}
|
|
428
492
|
|
|
429
493
|
}
|
|
430
494
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "stats-gl",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"author": "Renaud ROHLINGER (https://github.com/RenaudRohlinger)",
|
|
6
6
|
"homepage": "https://github.com/RenaudRohlinger/stats-gl",
|
|
@@ -22,19 +22,19 @@
|
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false,
|
|
24
24
|
"scripts": {
|
|
25
|
-
"dev": "vite
|
|
26
|
-
"serve": "vite serve
|
|
25
|
+
"dev": "vite dev --debug",
|
|
26
|
+
"serve": "vite serve",
|
|
27
27
|
"build": "tsc && vite build && rollup -c && node ./scripts/copyBuild.js",
|
|
28
28
|
"preview": "vite preview"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@types/three": "^0.
|
|
31
|
+
"@types/three": "^0.162.0",
|
|
32
32
|
"fs-extra": "^11.1.1",
|
|
33
33
|
"path": "^0.12.7",
|
|
34
|
-
"rollup": "^
|
|
34
|
+
"rollup": "^4.12.1",
|
|
35
35
|
"rollup-plugin-dts": "^5.3.0",
|
|
36
|
-
"three": "^0.
|
|
36
|
+
"three": "^0.162.0",
|
|
37
37
|
"typescript": "^5.0.2",
|
|
38
|
-
"vite": "^4.
|
|
38
|
+
"vite": "^4.5.2"
|
|
39
39
|
}
|
|
40
40
|
}
|