stats-gl 2.2.7 → 2.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
@@ -2,7 +2,7 @@
2
2
  [![Version](https://img.shields.io/npm/v/stats-gl?style=flat&colorA=000000&colorB=000000)](https://www.npmjs.com/package/stats-gl)
3
3
  [![Version](https://img.shields.io/npm/dw/stats-gl?style=flat&colorA=000000&colorB=000000)](https://www.npmjs.com/package/stats-gl)
4
4
 
5
- WebGL Performance Monitor tool.
5
+ WebGL/WebGPU Performance Monitor tool.
6
6
 
7
7
  🔗 [Live Demo](https://stats.renaudrohlinger.com/)
8
8
 
@@ -10,11 +10,11 @@ WebGL Performance Monitor tool.
10
10
  https://github.com/RenaudRohlinger/stats-gl/assets/15867665/3fdafff4-1357-4872-9baf-0629dbaf9d8c
11
11
 
12
12
 
13
- ### ❗📢 Note: GPU Monitoring will be available on Safari after the v17 release.
13
+ ### ❗📢 Note: To support GPU monitoring on Safari you need to enable Timer Queries under WebKit Feature Flags > WebGL Timer Queries
14
14
 
15
15
  ## 📚 Description
16
16
 
17
- `stats-gl` is a comprehensive tool to monitor WebGL performance. The Stats class provides methods to create performance panels, log performance metrics, and manage the display and layout of these panels. The performance metrics logged include FPS, CPU, and GPU. The GPU logging is available only if the user's browser supports the WebGL 2.0 `EXT_disjoint_timer_query_webgl2` extension.
17
+ `stats-gl` is a comprehensive tool to monitor WebGL performance. The Stats class provides methods to create performance panels, log performance metrics, and manage the display and layout of these panels. The performance metrics logged include FPS, CPU, and GPU. The GPU logging is available only if the user's browser supports the WebGL 2.0 `EXT_disjoint_timer_query_webgl2` extension or WebGPU Timestamp Queries.
18
18
 
19
19
  In addition to logging real-time performance data, the class also provides methods to calculate and display average performance metrics over a specified interval.
20
20
 
@@ -34,13 +34,14 @@ import Stats from "stats-gl";
34
34
 
35
35
  // create a new Stats object
36
36
  const stats = new Stats({
37
- logsPerSecond: 20,
37
+ trackGPU: false,
38
+ logsPerSecond: 20,
38
39
  samplesLog: 100,
39
40
  samplesGraph: 10,
40
41
  precision: 2,
41
42
  horizontal: true,
42
43
  minimal: false,
43
- mode: 0
44
+ mode: 0
44
45
  });
45
46
 
46
47
  // append the stats container to the body of the document
@@ -73,7 +74,7 @@ const container = document.getElementById( 'container' );
73
74
  const stats = new Stats();
74
75
  container.appendChild( stats.dom );
75
76
 
76
- const renderer = new THREE.WebGLRenderer( { antialias: true } );
77
+ const renderer = new THREE.WebGLRenderer( { antialias: true } ); // or WebGPURenderer
77
78
  container.appendChild( renderer.domElement );
78
79
 
79
80
  const scene = new THREE.Scene();
@@ -84,7 +85,7 @@ function animate() {
84
85
 
85
86
  requestAnimationFrame( animate );
86
87
 
87
- render();
88
+ render(); // needs async methods in WebGPU (renderAsync)
88
89
  stats.update();
89
90
 
90
91
  }
package/dist/main.cjs CHANGED
@@ -1,144 +1,149 @@
1
1
  "use strict";
2
2
  const panel = require("./panel.cjs");
3
3
  const _Stats = class _Stats2 {
4
- constructor({ logsPerSecond = 20, samplesLog = 100, samplesGraph = 10, precision = 2, minimal = false, horizontal = true, mode = 0 } = {}) {
4
+ constructor({
5
+ trackGPU = false,
6
+ logsPerSecond = 20,
7
+ samplesLog = 100,
8
+ samplesGraph = 10,
9
+ precision = 2,
10
+ minimal = false,
11
+ horizontal = true,
12
+ mode = 0
13
+ } = {}) {
14
+ this.gl = null;
15
+ this.ext = null;
16
+ this.activeQuery = null;
17
+ this.gpuQueries = [];
18
+ this.threeRendererPatched = false;
19
+ this.frames = 0;
20
+ this.renderCount = 0;
21
+ this.isRunningCPUProfiling = false;
5
22
  this.totalCpuDuration = 0;
6
23
  this.totalGpuDuration = 0;
7
24
  this.totalGpuDurationCompute = 0;
8
25
  this.totalFps = 0;
9
- this.activeQuery = null;
10
- this.gpuQueries = [];
11
- this.renderCount = 0;
26
+ this.gpuPanel = null;
27
+ this.gpuPanelCompute = null;
28
+ this.averageCpu = { logs: [], graph: [] };
29
+ this.averageGpu = { logs: [], graph: [] };
30
+ this.averageGpuCompute = { logs: [], graph: [] };
31
+ this.handleClick = (event) => {
32
+ event.preventDefault();
33
+ this.showPanel(++this.mode % this.dom.children.length);
34
+ };
35
+ this.handleResize = () => {
36
+ this.resizePanel(this.fpsPanel, 0);
37
+ this.resizePanel(this.msPanel, 1);
38
+ if (this.gpuPanel)
39
+ this.resizePanel(this.gpuPanel, 2);
40
+ if (this.gpuPanelCompute)
41
+ this.resizePanel(this.gpuPanelCompute, 3);
42
+ };
12
43
  this.mode = mode;
13
44
  this.horizontal = horizontal;
14
- this.dom = document.createElement("div");
15
- this.dom.style.cssText = "position:fixed;top:0;left:0;opacity:0.9;z-index:10000;";
16
- if (minimal) {
17
- this.dom.style.cssText += "cursor:pointer";
18
- }
19
- this.gl = null;
20
- this.query = null;
21
- this.isRunningCPUProfiling = false;
22
45
  this.minimal = minimal;
23
- this.beginTime = (performance || Date).now();
24
- this.prevTime = this.beginTime;
25
- this.prevCpuTime = this.beginTime;
26
- this.frames = 0;
27
- this.renderCount = 0;
28
- this.threeRendererPatched = false;
29
- this.averageCpu = {
30
- logs: [],
31
- graph: []
32
- };
33
- this.averageGpu = {
34
- logs: [],
35
- graph: []
36
- };
37
- this.averageGpuCompute = {
38
- logs: [],
39
- graph: []
40
- };
41
- this.queryCreated = false;
42
- this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
43
- this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
44
- this.gpuPanel = null;
45
- this.gpuPanelCompute = null;
46
+ this.trackGPU = trackGPU;
47
+ console.log("trackGPU", trackGPU);
46
48
  this.samplesLog = samplesLog;
47
49
  this.samplesGraph = samplesGraph;
48
50
  this.precision = precision;
49
51
  this.logsPerSecond = logsPerSecond;
50
- if (this.minimal) {
51
- this.dom.addEventListener("click", (event) => {
52
- event.preventDefault();
53
- this.showPanel(++this.mode % this.dom.children.length);
54
- }, false);
55
- this.mode = mode;
56
- this.showPanel(this.mode);
57
- } else {
58
- window.addEventListener("resize", () => {
59
- this.resizePanel(this.fpsPanel, 0);
60
- this.resizePanel(this.msPanel, 1);
61
- if (this.gpuPanel) {
62
- this.resizePanel(this.gpuPanel, 2);
63
- }
64
- if (this.gpuPanelCompute) {
65
- this.resizePanel(this.gpuPanelCompute, 3);
66
- }
67
- });
68
- }
52
+ this.dom = document.createElement("div");
53
+ this.initializeDOM();
54
+ this.beginTime = performance.now();
55
+ this.prevTime = this.beginTime;
56
+ this.prevCpuTime = this.beginTime;
57
+ this.fpsPanel = this.addPanel(new _Stats2.Panel("FPS", "#0ff", "#002"), 0);
58
+ this.msPanel = this.addPanel(new _Stats2.Panel("CPU", "#0f0", "#020"), 1);
59
+ this.setupEventListeners();
69
60
  }
70
- patchThreeRenderer(renderer) {
71
- const originalRenderMethod = renderer.render;
72
- const statsInstance = this;
73
- renderer.render = function(scene, camera) {
74
- statsInstance.begin();
75
- originalRenderMethod.call(this, scene, camera);
76
- statsInstance.end();
77
- };
78
- this.threeRendererPatched = true;
61
+ initializeDOM() {
62
+ this.dom.style.cssText = `
63
+ position: fixed;
64
+ top: 0;
65
+ left: 0;
66
+ opacity: 0.9;
67
+ z-index: 10000;
68
+ ${this.minimal ? "cursor: pointer;" : ""}
69
+ `;
79
70
  }
80
- resizePanel(panel2, offset) {
81
- panel2.canvas.style.position = "absolute";
71
+ setupEventListeners() {
82
72
  if (this.minimal) {
83
- panel2.canvas.style.display = "none";
73
+ this.dom.addEventListener("click", this.handleClick);
74
+ this.showPanel(this.mode);
84
75
  } else {
85
- panel2.canvas.style.display = "block";
86
- if (this.horizontal) {
87
- panel2.canvas.style.top = "0px";
88
- panel2.canvas.style.left = offset * panel2.WIDTH / panel2.PR + "px";
89
- } else {
90
- panel2.canvas.style.left = "0px";
91
- panel2.canvas.style.top = offset * panel2.HEIGHT / panel2.PR + "px";
92
- }
76
+ window.addEventListener("resize", this.handleResize);
93
77
  }
94
78
  }
95
- addPanel(panel2, offset) {
96
- if (panel2.canvas) {
97
- this.dom.appendChild(panel2.canvas);
98
- this.resizePanel(panel2, offset);
99
- }
100
- return panel2;
101
- }
102
- showPanel(id) {
103
- for (let i = 0; i < this.dom.children.length; i++) {
104
- const child = this.dom.children[i];
105
- child.style.display = i === id ? "block" : "none";
106
- }
107
- this.mode = id;
108
- }
109
79
  async init(canvasOrGL) {
110
80
  if (!canvasOrGL) {
111
81
  console.error('Stats: The "canvas" parameter is undefined.');
112
82
  return;
113
83
  }
114
- if (canvasOrGL.isWebGLRenderer && !this.threeRendererPatched) {
115
- const canvas = canvasOrGL;
116
- this.patchThreeRenderer(canvas);
117
- this.gl = canvas.getContext();
118
- } else if (!this.gl && canvasOrGL instanceof WebGL2RenderingContext) {
119
- this.gl = canvasOrGL;
84
+ if (this.handleThreeRenderer(canvasOrGL))
85
+ return;
86
+ if (await this.handleWebGPURenderer(canvasOrGL))
87
+ return;
88
+ if (!this.initializeWebGL(canvasOrGL))
89
+ return;
90
+ }
91
+ handleThreeRenderer(renderer) {
92
+ if (renderer.isWebGLRenderer && !this.threeRendererPatched) {
93
+ this.patchThreeRenderer(renderer);
94
+ this.gl = renderer.getContext();
95
+ if (this.trackGPU) {
96
+ this.initializeGPUTracking();
97
+ }
98
+ return true;
120
99
  }
121
- if (canvasOrGL.isWebGPURenderer) {
122
- canvasOrGL.backend.trackTimestamp = true;
123
- if (await canvasOrGL.hasFeatureAsync("timestamp-query")) {
124
- this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
125
- this.gpuPanelCompute = this.addPanel(new _Stats2.Panel("CPT", "#e1e1e1", "#212121"), 3);
126
- this.info = canvasOrGL.info;
100
+ return false;
101
+ }
102
+ async handleWebGPURenderer(renderer) {
103
+ console.log("renderer", renderer);
104
+ if (renderer.isWebGPURenderer) {
105
+ if (this.trackGPU) {
106
+ console.log("trackGPU", this.trackGPU);
107
+ renderer.backend.trackTimestamp = true;
108
+ if (await renderer.hasFeatureAsync("timestamp-query")) {
109
+ this.initializeWebGPUPanels();
110
+ }
127
111
  }
128
- return;
129
- } else if (!this.gl && canvasOrGL instanceof HTMLCanvasElement || canvasOrGL instanceof OffscreenCanvas) {
112
+ this.info = renderer.info;
113
+ return true;
114
+ }
115
+ return false;
116
+ }
117
+ initializeWebGPUPanels() {
118
+ this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
119
+ this.gpuPanelCompute = this.addPanel(
120
+ new _Stats2.Panel("CPT", "#e1e1e1", "#212121"),
121
+ 3
122
+ );
123
+ }
124
+ initializeWebGL(canvasOrGL) {
125
+ if (canvasOrGL instanceof WebGL2RenderingContext) {
126
+ this.gl = canvasOrGL;
127
+ } else if (canvasOrGL instanceof HTMLCanvasElement || canvasOrGL instanceof OffscreenCanvas) {
130
128
  this.gl = canvasOrGL.getContext("webgl2");
131
129
  if (!this.gl) {
132
130
  console.error("Stats: Unable to obtain WebGL2 context.");
133
- return;
131
+ return false;
134
132
  }
135
- } else if (!this.gl) {
136
- console.error("Stats: Invalid input type. Expected WebGL2RenderingContext, HTMLCanvasElement, or OffscreenCanvas.");
137
- return;
133
+ } else {
134
+ console.error(
135
+ "Stats: Invalid input type. Expected WebGL2RenderingContext, HTMLCanvasElement, or OffscreenCanvas."
136
+ );
137
+ return false;
138
138
  }
139
- this.ext = this.gl.getExtension("EXT_disjoint_timer_query_webgl2");
140
- if (this.ext) {
141
- this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
139
+ return true;
140
+ }
141
+ initializeGPUTracking() {
142
+ if (this.gl) {
143
+ this.ext = this.gl.getExtension("EXT_disjoint_timer_query_webgl2");
144
+ if (this.ext) {
145
+ this.gpuPanel = this.addPanel(new _Stats2.Panel("GPU", "#ff0", "#220"), 2);
146
+ }
142
147
  }
143
148
  }
144
149
  begin() {
@@ -147,14 +152,12 @@ const _Stats = class _Stats2 {
147
152
  }
148
153
  if (!this.gl || !this.ext)
149
154
  return;
150
- if (this.gl && this.ext) {
151
- if (this.activeQuery) {
152
- this.gl.endQuery(this.ext.TIME_ELAPSED_EXT);
153
- }
154
- this.activeQuery = this.gl.createQuery();
155
- if (this.activeQuery !== null) {
156
- this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT, this.activeQuery);
157
- }
155
+ if (this.activeQuery) {
156
+ this.gl.endQuery(this.ext.TIME_ELAPSED_EXT);
157
+ }
158
+ this.activeQuery = this.gl.createQuery();
159
+ if (this.activeQuery) {
160
+ this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT, this.activeQuery);
158
161
  }
159
162
  }
160
163
  end() {
@@ -165,6 +168,63 @@ const _Stats = class _Stats2 {
165
168
  this.activeQuery = null;
166
169
  }
167
170
  }
171
+ update() {
172
+ if (!this.info) {
173
+ this.processGpuQueries();
174
+ } else {
175
+ this.processWebGPUTimestamps();
176
+ }
177
+ this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
178
+ this.updateAverages();
179
+ this.resetCounters();
180
+ }
181
+ processWebGPUTimestamps() {
182
+ this.totalGpuDuration = this.info.render.timestamp;
183
+ this.totalGpuDurationCompute = this.info.compute.timestamp;
184
+ this.addToAverage(this.totalGpuDurationCompute, this.averageGpuCompute);
185
+ }
186
+ updateAverages() {
187
+ this.addToAverage(this.totalCpuDuration, this.averageCpu);
188
+ this.addToAverage(this.totalGpuDuration, this.averageGpu);
189
+ }
190
+ resetCounters() {
191
+ this.renderCount = 0;
192
+ if (this.totalCpuDuration === 0) {
193
+ this.beginProfiling("cpu-started");
194
+ }
195
+ this.totalCpuDuration = 0;
196
+ this.totalFps = 0;
197
+ this.beginTime = this.endInternal();
198
+ }
199
+ resizePanel(panel2, offset) {
200
+ panel2.canvas.style.position = "absolute";
201
+ if (this.minimal) {
202
+ panel2.canvas.style.display = "none";
203
+ } else {
204
+ panel2.canvas.style.display = "block";
205
+ if (this.horizontal) {
206
+ panel2.canvas.style.top = "0px";
207
+ panel2.canvas.style.left = offset * panel2.WIDTH / panel2.PR + "px";
208
+ } else {
209
+ panel2.canvas.style.left = "0px";
210
+ panel2.canvas.style.top = offset * panel2.HEIGHT / panel2.PR + "px";
211
+ }
212
+ }
213
+ }
214
+ addPanel(panel2, offset) {
215
+ if (panel2.canvas) {
216
+ this.dom.appendChild(panel2.canvas);
217
+ this.resizePanel(panel2, offset);
218
+ }
219
+ return panel2;
220
+ }
221
+ showPanel(id) {
222
+ for (let i = 0; i < this.dom.children.length; i++) {
223
+ const child = this.dom.children[i];
224
+ child.style.display = i === id ? "block" : "none";
225
+ }
226
+ this.mode = id;
227
+ }
168
228
  processGpuQueries() {
169
229
  if (!this.gl || !this.ext)
170
230
  return;
@@ -183,25 +243,6 @@ const _Stats = class _Stats2 {
183
243
  }
184
244
  });
185
245
  }
186
- update() {
187
- if (this.info === void 0) {
188
- this.processGpuQueries();
189
- } else {
190
- this.totalGpuDuration = this.info.render.timestamp;
191
- this.totalGpuDurationCompute = this.info.compute.timestamp;
192
- this.addToAverage(this.totalGpuDurationCompute, this.averageGpuCompute);
193
- }
194
- this.endProfiling("cpu-started", "cpu-finished", "cpu-duration");
195
- this.addToAverage(this.totalCpuDuration, this.averageCpu);
196
- this.addToAverage(this.totalGpuDuration, this.averageGpu);
197
- this.renderCount = 0;
198
- if (this.totalCpuDuration === 0) {
199
- this.beginProfiling("cpu-started");
200
- }
201
- this.totalCpuDuration = 0;
202
- this.totalFps = 0;
203
- this.beginTime = this.endInternal();
204
- }
205
246
  endInternal() {
206
247
  this.frames++;
207
248
  const time = (performance || Date).now();
@@ -271,12 +312,18 @@ const _Stats = class _Stats2 {
271
312
  get domElement() {
272
313
  return this.dom;
273
314
  }
274
- get container() {
275
- console.warn("Stats: Deprecated! this.container as been replaced to this.dom ");
276
- return this.dom;
315
+ patchThreeRenderer(renderer) {
316
+ const originalRenderMethod = renderer.render;
317
+ const statsInstance = this;
318
+ renderer.render = function(scene, camera) {
319
+ statsInstance.begin();
320
+ originalRenderMethod.call(this, scene, camera);
321
+ statsInstance.end();
322
+ };
323
+ this.threeRendererPatched = true;
277
324
  }
278
325
  };
279
- _Stats.Panel = panel;
326
+ _Stats.Panel = panel.Panel;
280
327
  let Stats = _Stats;
281
328
  module.exports = Stats;
282
329
  //# sourceMappingURL=main.cjs.map
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","panel","Panel"],"mappings":"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"}