UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

66 lines (63 loc) 2.03 kB
import { now } from '../../core/time.js'; class CpuTimer { // mark the beginning of the frame begin(name) { if (!this.enabled) { return; } // end previous frame timings if (this._frameIndex < this._frameTimings.length) { this._frameTimings.splice(this._frameIndex); } const tmp = this._prevTimings; this._prevTimings = this._timings; this._timings = this._frameTimings; this._frameTimings = tmp; this._frameIndex = 0; this.mark(name); } // mark mark(name) { if (!this.enabled) { return; } const timestamp = now(); // end previous mark if (this._frameIndex > 0) { const prev = this._frameTimings[this._frameIndex - 1]; prev[1] = timestamp - prev[1]; } else if (this._timings.length > 0) { const prev = this._timings[this._timings.length - 1]; prev[1] = timestamp - prev[1]; } if (this._frameIndex >= this._frameTimings.length) { this._frameTimings.push([ name, timestamp ]); } else { const timing = this._frameTimings[this._frameIndex]; timing[0] = name; timing[1] = timestamp; } this._frameIndex++; } get timings() { // remove the last time point from the list (which is the time spent outside // of PlayCanvas) return this._timings.slice(0, -1).map((v)=>v[1]); } constructor(app){ this._frameIndex = 0; this._frameTimings = []; this._timings = []; this._prevTimings = []; this.unitsName = 'ms'; this.decimalPlaces = 1; this.enabled = true; app.on('frameupdate', this.begin.bind(this, 'update')); app.on('framerender', this.mark.bind(this, 'render')); app.on('frameend', this.mark.bind(this, 'other')); } } export { CpuTimer };