iv-3d-lib
Version:
A reusable ThreeJS library providing features for Ivee 3D Editor.
105 lines • 4.61 kB
JavaScript
"use strict";
/**
* @author mrdoob / http://mrdoob.com/
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Stats = void 0;
class Stats {
constructor() {
this.ms = 0;
this.msMin = Infinity;
this.msMax = 0;
this.fps = 0;
this.fpsMin = Infinity;
this.fpsMax = 0;
this.frames = 0;
this.REVISION = 11;
this.container = document.createElement('div');
this.startTime = Date.now();
let prevTime = this.startTime;
this.container.id = 'stats';
this.container.addEventListener('mousedown', (event) => { event.preventDefault(); this.setMode(++this.mode % 2); }, false);
this.container.style.cssText = 'width:80px;opacity:0.9;cursor:pointer';
this.fpsDiv = document.createElement('div');
this.fpsDiv.id = 'fps';
this.fpsDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#002';
this.container.appendChild(this.fpsDiv);
this.fpsText = document.createElement('div');
this.fpsText.id = 'fpsText';
this.fpsText.style.cssText = 'color:#0ff;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
this.fpsText.innerHTML = 'FPS';
this.fpsDiv.appendChild(this.fpsText);
this.fpsGraph = document.createElement('div');
this.fpsGraph.id = 'fpsGraph';
this.fpsGraph.style.cssText = 'position:relative;width:74px;height:30px;background-color:#0ff';
this.fpsDiv.appendChild(this.fpsGraph);
while (this.fpsGraph.children.length < 74) {
var bar = document.createElement('span');
bar.style.cssText = 'width:1px;height:30px;float:left;background-color:#113';
this.fpsGraph.appendChild(bar);
}
this.msDiv = document.createElement('div');
this.msDiv.id = 'ms';
this.msDiv.style.cssText = 'padding:0 0 3px 3px;text-align:left;background-color:#020;display:none';
this.container.appendChild(this.msDiv);
this.msText = document.createElement('div');
this.msText.id = 'msText';
this.msText.style.cssText = 'color:#0f0;font-family:Helvetica,Arial,sans-serif;font-size:9px;font-weight:bold;line-height:15px';
this.msText.innerHTML = 'MS';
this.msDiv.appendChild(this.msText);
this.msGraph = document.createElement('div');
this.msGraph.id = 'msGraph';
this.msGraph.style.cssText = 'position:relative;width:74px;height:30px;background-color:#0f0';
this.msDiv.appendChild(this.msGraph);
while (this.msGraph.children.length < 74) {
var bar = document.createElement('span');
bar.style.cssText = 'width:1px;height:30px;float:left;background-color:#131';
this.msGraph.appendChild(bar);
}
}
get domElement() { return this.container; }
updateGraph(dom, value) {
var child = dom.appendChild(dom.firstChild);
child.style.height = value + 'px';
}
setMode(value) {
this.mode = value;
switch (this.mode) {
case 0:
this.fpsDiv.style.display = 'block';
this.msDiv.style.display = 'none';
break;
case 1:
this.fpsDiv.style.display = 'none';
this.msDiv.style.display = 'block';
break;
}
}
begin() {
this.startTime = Date.now();
}
end() {
var time = Date.now();
this.ms = time - this.startTime;
this.msMin = Math.min(this.msMin, this.ms);
this.msMax = Math.max(this.msMax, this.ms);
this.msText.textContent = this.ms + ' MS (' + this.msMin + '-' + this.msMax + ')';
this.updateGraph(this.msGraph, Math.min(30, 30 - (this.ms / 200) * 30));
this.frames++;
if (time > this.prevTime + 1000) {
this.fps = Math.round((this.frames * 1000) / (time - this.prevTime));
this.fpsMin = Math.min(this.fpsMin, this.fps);
this.fpsMax = Math.max(this.fpsMax, this.fps);
this.fpsText.textContent = this.fps + ' FPS (' + this.fpsMin + '-' + this.fpsMax + ')';
this.updateGraph(this.fpsGraph, Math.min(30, 30 - (this.fps / 100) * 30));
this.prevTime = time;
this.frames = 0;
}
return time;
}
update() {
this.startTime = this.end();
}
}
exports.Stats = Stats;
//# sourceMappingURL=stats.js.map