|
|
@@ -191,88 +191,140 @@ export class RendererInspector extends InspectorBase {
|
|
|
|
|
|
const renderer = this.getRenderer();
|
|
|
|
|
|
- await renderer.resolveTimestampsAsync( TimestampQuery.COMPUTE );
|
|
|
- await renderer.resolveTimestampsAsync( TimestampQuery.RENDER );
|
|
|
+ if ( renderer.backend.hasTimestamp ) {
|
|
|
|
|
|
- const computeFrames = renderer.backend.getTimestampFrames( TimestampQuery.COMPUTE );
|
|
|
- const renderFrames = renderer.backend.getTimestampFrames( TimestampQuery.RENDER );
|
|
|
+ await renderer.resolveTimestampsAsync( TimestampQuery.COMPUTE );
|
|
|
+ await renderer.resolveTimestampsAsync( TimestampQuery.RENDER );
|
|
|
|
|
|
- const frameIds = [ ...new Set( [ ...computeFrames, ...renderFrames ] ) ];
|
|
|
+ const computeFrames = renderer.backend.getTimestampFrames( TimestampQuery.COMPUTE );
|
|
|
+ const renderFrames = renderer.backend.getTimestampFrames( TimestampQuery.RENDER );
|
|
|
|
|
|
- for ( const frameId of frameIds ) {
|
|
|
+ const frameIds = [ ...new Set( [ ...computeFrames, ...renderFrames ] ) ];
|
|
|
|
|
|
- const frame = this.getFrameById( frameId );
|
|
|
+ for ( const frameId of frameIds ) {
|
|
|
|
|
|
- if ( frame !== null ) {
|
|
|
+ const frame = this.getFrameById( frameId );
|
|
|
|
|
|
- // resolve compute timestamps
|
|
|
+ if ( frame !== null ) {
|
|
|
|
|
|
- if ( frame.resolvedCompute === false ) {
|
|
|
+ // resolve compute timestamps
|
|
|
+
|
|
|
+ if ( frame.resolvedCompute === false ) {
|
|
|
+
|
|
|
+ if ( frame.computes.length > 0 ) {
|
|
|
|
|
|
- if ( frame.computes.length > 0 ) {
|
|
|
+ if ( computeFrames.includes( frameId ) ) {
|
|
|
|
|
|
- if ( computeFrames.includes( frameId ) ) {
|
|
|
+ for ( const stats of frame.computes ) {
|
|
|
|
|
|
- for ( const stats of frame.computes ) {
|
|
|
+ if ( renderer.backend.hasTimestampQuery( stats.uid ) ) {
|
|
|
|
|
|
- if ( renderer.backend.hasTimestamp( stats.uid ) ) {
|
|
|
+ stats.gpu = renderer.backend.getTimestamp( stats.uid );
|
|
|
|
|
|
- stats.gpu = renderer.backend.getTimestamp( stats.uid );
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
+ stats.gpu = 0;
|
|
|
+ stats.gpuNotAvailable = true;
|
|
|
|
|
|
- stats.gpu = 0;
|
|
|
- stats.gpuNotAvailable = true;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
+ frame.resolvedCompute = true;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ } else {
|
|
|
+
|
|
|
frame.resolvedCompute = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
- } else {
|
|
|
-
|
|
|
- frame.resolvedCompute = true;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- }
|
|
|
+ // resolve render timestamps
|
|
|
|
|
|
- // resolve render timestamps
|
|
|
+ if ( frame.resolvedRender === false ) {
|
|
|
|
|
|
- if ( frame.resolvedRender === false ) {
|
|
|
+ if ( frame.renders.length > 0 ) {
|
|
|
|
|
|
- if ( frame.renders.length > 0 ) {
|
|
|
+ if ( renderFrames.includes( frameId ) ) {
|
|
|
|
|
|
- if ( renderFrames.includes( frameId ) ) {
|
|
|
+ for ( const stats of frame.renders ) {
|
|
|
|
|
|
- for ( const stats of frame.renders ) {
|
|
|
+ if ( renderer.backend.hasTimestampQuery( stats.uid ) ) {
|
|
|
|
|
|
- if ( renderer.backend.hasTimestamp( stats.uid ) ) {
|
|
|
+ stats.gpu = renderer.backend.getTimestamp( stats.uid );
|
|
|
|
|
|
- stats.gpu = renderer.backend.getTimestamp( stats.uid );
|
|
|
+ } else {
|
|
|
|
|
|
- } else {
|
|
|
+ stats.gpu = 0;
|
|
|
+ stats.gpuNotAvailable = true;
|
|
|
|
|
|
- stats.gpu = 0;
|
|
|
- stats.gpuNotAvailable = true;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
|
+ frame.resolvedRender = true;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ } else {
|
|
|
+
|
|
|
frame.resolvedRender = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
- } else {
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( frame.resolvedCompute === true && frame.resolvedRender === true ) {
|
|
|
+
|
|
|
+ this.resolveFrame( frame );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
|
|
|
- frame.resolvedRender = true;
|
|
|
+ for ( const frame of this.frames ) {
|
|
|
+
|
|
|
+ if ( frame.resolvedCompute === true && frame.resolvedRender === true ) {
|
|
|
+
|
|
|
+ continue;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ const nextFrame = this.getFrameById( frame.frameId + 1 );
|
|
|
+
|
|
|
+ if ( nextFrame === null ) continue;
|
|
|
+
|
|
|
+ if ( frame.resolvedCompute === false ) {
|
|
|
+
|
|
|
+ for ( const stats of frame.computes ) {
|
|
|
+
|
|
|
+ stats.gpu = 0;
|
|
|
+ stats.gpuNotAvailable = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
+ frame.resolvedCompute = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( frame.resolvedRender === false ) {
|
|
|
+
|
|
|
+ for ( const stats of frame.renders ) {
|
|
|
+
|
|
|
+ stats.gpu = 0;
|
|
|
+ stats.gpuNotAvailable = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ frame.resolvedRender = true;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
if ( frame.resolvedCompute === true && frame.resolvedRender === true ) {
|