@animech-public/playcanvas
Version:
PlayCanvas WebGL game engine
2 lines (1 loc) • 2.11 kB
JavaScript
import{GpuProfiler as e}from"../gpu-profiler.js";class r{constructor(){this.renderVersion=void 0,this.queries=[]}destroy(e){this.queries.forEach((r=>e.deleteQuery(r))),this.queries=null}}class s extends e{constructor(e){super(),this.device=void 0,this.freeQueries=[],this.frameQueries=[],this.previousFrameQueries=[],this.timings=[],this.device=e,this.ext=e.extDisjointTimerQuery}destroy(){this.freeQueries.forEach((e=>this.device.gl.deleteQuery(e))),this.frameQueries.forEach((e=>this.device.gl.deleteQuery(e))),this.previousFrameQueries.forEach((e=>e.destroy(this.device.gl))),this.freeQueries=null,this.frameQueries=null,this.previousFrameQueries=null}loseContext(){super.loseContext(),this.freeQueries=[],this.frameQueries=[],this.previousFrameQueries=[]}restoreContext(){this.ext=this.device.extDisjointTimerQuery}getQuery(){var e;return null!=(e=this.freeQueries.pop())?e:this.device.gl.createQuery()}start(e){if(this.ext){const r=this.getSlot(e),s=this.getQuery();return this.frameQueries[r]=s,this.device.gl.beginQuery(this.ext.TIME_ELAPSED_EXT,s),r}}end(e){void 0!==e&&this.device.gl.endQuery(this.ext.TIME_ELAPSED_EXT)}frameStart(){this.processEnableRequest(),this._enabled&&(this.frameGPUMarkerSlot=this.start("GpuFrame"))}frameEnd(){this._enabled&&this.end(this.frameGPUMarkerSlot)}request(){if(this._enabled){const e=this.ext,s=this.device.gl,i=this.device.renderVersion,t=this.frameQueries;if(t.length>0){this.frameQueries=[];const e=new r;e.queries=t,e.renderVersion=i,this.previousFrameQueries.push(e)}if(this.previousFrameQueries.length>0){const r=this.previousFrameQueries[0],i=r.queries,t=i[i.length-1],h=s.getQueryParameter(t,s.QUERY_RESULT_AVAILABLE),u=s.getParameter(e.GPU_DISJOINT_EXT);if(h&&!u){this.previousFrameQueries.shift();const e=this.timings;e.length=0;for(let r=0;r<i.length;r++){const t=i[r],h=s.getQueryParameter(t,s.QUERY_RESULT);e[r]=1e-6*h,this.freeQueries.push(t)}this.report(r.renderVersion,e)}u&&(this.previousFrameQueries.forEach((e=>{this.report(e.renderVersion,null),e.destroy(s)})),this.previousFrameQueries.length=0)}super.request(i)}}}export{s as WebglGpuProfiler};