Skip to content

Commit 95af744

Browse files
committed
Inspector refactors
1 parent 002b366 commit 95af744

4 files changed

Lines changed: 93 additions & 5 deletions

File tree

packages/sdk/src/webglrenderer/internal/inspectors/RenderInspector.ts

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import { type ViewRenderStats } from "./ViewRenderStats";
88
import { type RenderBinStats } from "./RenderBinStats";
99
import { type DrawCallStats } from "./DrawCallStats";
1010
import {RENDER_BINS} from "../RENDER_BINS";
11-
import {RenderStats} from "./RenderStats";
11+
import {type RenderStats} from "./RenderStats";
12+
import type {GPUTile} from "../gpuMemoryManager";
1213

1314
const nowMs = (): number => {
1415
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -70,6 +71,7 @@ export class RenderInspector {
7071
this._includedRenderBins = new Set<string>(opts?.includeRenderBins ?? []);
7172
this._excludedRenderBins = new Set<string>(opts?.excludeRenderBins ?? []);
7273
this.renderStats = {
74+
tiles: {},
7375
views: []
7476
};
7577
}
@@ -109,6 +111,43 @@ export class RenderInspector {
109111
this._excludedRenderBins = new Set<string>(renderBinIds);
110112
}
111113

114+
/**
115+
* Logs the creation of a new tile.
116+
* @param tile
117+
* @private
118+
*/
119+
public tileAcquired(tile: GPUTile): void {
120+
if (tile.useCount === 1) {
121+
this.renderStats.tiles[tile.id] = {
122+
id: tile.id,
123+
rtcCenter: <[number, number, number]>Array.from(tile.center),
124+
tileIndex: tile.tileIndex,
125+
numMeshes: tile.useCount
126+
};
127+
} else {
128+
const existing = this.renderStats.tiles[tile.id];
129+
if (existing) {
130+
existing.numMeshes = tile.useCount;
131+
}
132+
}
133+
}
134+
135+
/**
136+
* Logs the disposal of a tile.
137+
* @param tile
138+
* @private
139+
*/
140+
public tileReleased(tile: GPUTile): void {
141+
if (tile.useCount === 0) {
142+
delete this.renderStats.tiles[tile.id];
143+
} else {
144+
const existing = this.renderStats.tiles[tile.id];
145+
if (existing) {
146+
existing.numMeshes = tile.useCount;
147+
}
148+
}
149+
}
150+
112151
/**
113152
* Marks the start of a new frame for the given View.
114153
* Also activates the internal state for view.viewIndex, used by subsequent calls.
@@ -172,7 +211,7 @@ export class RenderInspector {
172211
* Duration measured until the next draw (or end of pass / frame).
173212
* @private
174213
*/
175-
public drawMeshBatch(meshBatch: MeshBatch, renderPass: RenderPassValue, primRange: PrimRange): void {
214+
public drawMeshBatch(meshBatch: MeshBatch, renderPass: RenderPassValue, primRange: PrimRange, edges? : boolean): void {
176215
const s = this.getActiveState();
177216
if (!this.enabled || !s || !s.currentFrame) {
178217
return;
@@ -211,6 +250,10 @@ export class RenderInspector {
211250
renderBinName = "Unknown";
212251
}
213252

253+
if (edges) {
254+
renderBinName = "EDGES_" + renderBinName;
255+
}
256+
214257
let primitiveName: string;
215258
switch (meshBatch.primitive) {
216259
case TrianglesPrimitive:
@@ -234,7 +277,6 @@ export class RenderInspector {
234277
primRange,
235278
timeMs: { start: t, end: t, duration: 0 },
236279
};
237-
238280
s.currentPass.drawCalls.push(draw);
239281
s.currentDraw = draw;
240282
s.currentFrame.numDrawCalls++;
Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
import {type ViewRenderStats} from "./ViewRenderStats";
2+
import {type TileStats} from "./TileStats";
23

34
/**
45
* A log of rendering statistics for a single frame.
56
*/
67
export interface RenderStats {
78

9+
/**
10+
* Currently existing RTC tiles, mapped to IDs.
11+
*/
12+
tiles: { [key: string]: TileStats };
13+
814
/**
915
* Render statistics for each View.
1016
*/
1117
views?: ViewRenderStats[];
12-
};
18+
}

packages/sdk/src/webglrenderer/internal/inspectors/ShaderInspector.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,18 @@ export class ShaderInspector {
1212
vertexSrc: string,
1313
fragmentSrc: string
1414
},
15-
15+
opaqueEdges: {
16+
vertexSrc: string,
17+
fragmentSrc: string
18+
},
1619
transparent: {
1720
vertexSrc: string,
1821
fragmentSrc: string
1922
},
23+
transparentEdges: {
24+
vertexSrc: string,
25+
fragmentSrc: string
26+
},
2027
selected: {
2128
vertexSrc: string,
2229
fragmentSrc: string
@@ -95,10 +102,18 @@ export class ShaderInspector {
95102
vertexSrc: drawOps.prims[TrianglesPrimitive].opaque.technique.vertexShaderSrc,
96103
fragmentSrc: drawOps.prims[TrianglesPrimitive].opaque.technique.fragmentShaderSrc
97104
},
105+
opaqueEdges: {
106+
vertexSrc: drawOps.prims[TrianglesPrimitive].opaqueEdges.technique.vertexShaderSrc,
107+
fragmentSrc: drawOps.prims[TrianglesPrimitive].opaqueEdges.technique.fragmentShaderSrc
108+
},
98109
transparent: {
99110
vertexSrc: drawOps.prims[TrianglesPrimitive].transparent.technique.vertexShaderSrc,
100111
fragmentSrc: drawOps.prims[TrianglesPrimitive].transparent.technique.fragmentShaderSrc
101112
},
113+
transparentEdges: {
114+
vertexSrc: drawOps.prims[TrianglesPrimitive].transparentEdges.technique.vertexShaderSrc,
115+
fragmentSrc: drawOps.prims[TrianglesPrimitive].transparentEdges.technique.fragmentShaderSrc
116+
},
102117
highlighted: {
103118
vertexSrc: drawOps.prims[TrianglesPrimitive].highlighted.technique.vertexShaderSrc,
104119
fragmentSrc: drawOps.prims[TrianglesPrimitive].highlighted.technique.fragmentShaderSrc
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* Represents statistics for an RTC tile.
3+
*/
4+
export interface TileStats {
5+
6+
/**
7+
* Unique identifier for the tile.
8+
*/
9+
id: string;
10+
11+
/**
12+
* The 3D center of the tile in world coordinates [x, y, z].
13+
*/
14+
rtcCenter : [number, number, number];
15+
16+
/**
17+
* The index of the tile within the renderer.
18+
*/
19+
tileIndex: number;
20+
21+
/**
22+
* The number of meshes contained within this tile.
23+
*/
24+
numMeshes: number;
25+
}

0 commit comments

Comments
 (0)