266 lines
6.0 KiB
JavaScript
266 lines
6.0 KiB
JavaScript
window.glStats = function () {
|
|
|
|
var _rS = null;
|
|
|
|
var _totalDrawArraysCalls = 0,
|
|
_totalDrawElementsCalls = 0,
|
|
_totalUseProgramCalls = 0,
|
|
_totalFaces = 0,
|
|
_totalVertices = 0,
|
|
_totalPoints = 0,
|
|
_totalBindTexures = 0;
|
|
|
|
function _h ( f, c ) {
|
|
return function () {
|
|
c.apply( this, arguments );
|
|
f.apply( this, arguments );
|
|
};
|
|
}
|
|
|
|
WebGLRenderingContext.prototype.drawArrays = _h( WebGLRenderingContext.prototype.drawArrays, function () {
|
|
_totalDrawArraysCalls++;
|
|
if ( arguments[ 0 ] == this.POINTS ) _totalPoints += arguments[ 2 ];
|
|
else _totalVertices += arguments[ 2 ];
|
|
} );
|
|
|
|
WebGLRenderingContext.prototype.drawElements = _h( WebGLRenderingContext.prototype.drawElements, function () {
|
|
_totalDrawElementsCalls++;
|
|
_totalFaces += arguments[ 1 ] / 3;
|
|
_totalVertices += arguments[ 1 ];
|
|
} );
|
|
|
|
WebGLRenderingContext.prototype.useProgram = _h( WebGLRenderingContext.prototype.useProgram, function () {
|
|
_totalUseProgramCalls++;
|
|
} );
|
|
|
|
WebGLRenderingContext.prototype.bindTexture = _h( WebGLRenderingContext.prototype.bindTexture, function () {
|
|
_totalBindTexures++;
|
|
} );
|
|
|
|
var _values = {
|
|
allcalls: {
|
|
over: 3000,
|
|
caption: 'Calls (hook)'
|
|
},
|
|
drawelements: {
|
|
caption: 'drawElements (hook)'
|
|
},
|
|
drawarrays: {
|
|
caption: 'drawArrays (hook)'
|
|
}
|
|
};
|
|
|
|
var _groups = [ {
|
|
caption: 'WebGL',
|
|
values: [ 'allcalls', 'drawelements', 'drawarrays', 'useprogram', 'bindtexture', 'glfaces', 'glvertices', 'glpoints' ]
|
|
} ];
|
|
|
|
var _fractions = [ {
|
|
base: 'allcalls',
|
|
steps: [ 'drawelements', 'drawarrays' ]
|
|
} ];
|
|
|
|
function _update () {
|
|
_rS( 'allcalls' ).set( _totalDrawArraysCalls + _totalDrawElementsCalls );
|
|
_rS( 'drawElements' ).set( _totalDrawElementsCalls );
|
|
_rS( 'drawArrays' ).set( _totalDrawArraysCalls );
|
|
_rS( 'bindTexture' ).set( _totalBindTexures );
|
|
_rS( 'useProgram' ).set( _totalUseProgramCalls );
|
|
_rS( 'glfaces' ).set( _totalFaces );
|
|
_rS( 'glvertices' ).set( _totalVertices );
|
|
_rS( 'glpoints' ).set( _totalPoints );
|
|
}
|
|
|
|
function _start () {
|
|
_totalDrawArraysCalls = 0;
|
|
_totalDrawElementsCalls = 0;
|
|
_totalUseProgramCalls = 0;
|
|
_totalFaces = 0;
|
|
_totalVertices = 0;
|
|
_totalPoints = 0;
|
|
_totalBindTexures = 0;
|
|
}
|
|
|
|
function _end () {}
|
|
|
|
function _attach ( r ) {
|
|
_rS = r;
|
|
}
|
|
|
|
return {
|
|
update: _update,
|
|
start: _start,
|
|
end: _end,
|
|
attach: _attach,
|
|
values: _values,
|
|
groups: _groups,
|
|
fractions: _fractions
|
|
};
|
|
|
|
};
|
|
|
|
window.threeStats = function ( renderer ) {
|
|
|
|
var _rS = null;
|
|
|
|
var _values = {
|
|
'renderer.info.memory.geometries': {
|
|
caption: 'Geometries'
|
|
},
|
|
'renderer.info.memory.textures': {
|
|
caption: 'Textures'
|
|
},
|
|
'renderer.info.programs': {
|
|
caption: 'Programs'
|
|
},
|
|
'renderer.info.render.calls': {
|
|
caption: 'Calls'
|
|
},
|
|
'renderer.info.render.faces': {
|
|
caption: 'Faces',
|
|
over: 1000
|
|
},
|
|
'renderer.info.render.points': {
|
|
caption: 'Points'
|
|
},
|
|
'renderer.info.render.vertices': {
|
|
caption: 'Vertices'
|
|
}
|
|
};
|
|
|
|
var _groups = [ {
|
|
caption: 'Three.js - Memory',
|
|
values: [ 'renderer.info.memory.geometries', 'renderer.info.programs', 'renderer.info.memory.textures' ]
|
|
}, {
|
|
caption: 'Three.js - Render',
|
|
values: [ 'renderer.info.render.calls', 'renderer.info.render.faces', 'renderer.info.render.points', 'renderer.info.render.vertices' ]
|
|
} ];
|
|
|
|
var _fractions = [];
|
|
|
|
function _update () {
|
|
|
|
_rS( 'renderer.info.memory.geometries' ).set( renderer.info.memory.geometries );
|
|
//_rS( 'renderer.info.programs' ).set( renderer.info.programs.length );
|
|
_rS( 'renderer.info.memory.textures' ).set( renderer.info.memory.textures );
|
|
_rS( 'renderer.info.render.calls' ).set( renderer.info.render.calls );
|
|
_rS( 'renderer.info.render.faces' ).set( renderer.info.render.faces );
|
|
_rS( 'renderer.info.render.points' ).set( renderer.info.render.points );
|
|
_rS( 'renderer.info.render.vertices' ).set( renderer.info.render.vertices );
|
|
|
|
}
|
|
|
|
function _start () {}
|
|
|
|
function _end () {}
|
|
|
|
function _attach ( r ) {
|
|
_rS = r;
|
|
}
|
|
|
|
return {
|
|
update: _update,
|
|
start: _start,
|
|
end: _end,
|
|
attach: _attach,
|
|
values: _values,
|
|
groups: _groups,
|
|
fractions: _fractions
|
|
};
|
|
|
|
};
|
|
|
|
/*
|
|
* From https://github.com/paulirish/memory-stats.js
|
|
*/
|
|
|
|
window.BrowserStats = function () {
|
|
|
|
var _rS = null;
|
|
|
|
var _usedJSHeapSize = 0,
|
|
_totalJSHeapSize = 0;
|
|
|
|
var memory = {
|
|
usedJSHeapSize: 0,
|
|
totalJSHeapSize: 0
|
|
};
|
|
|
|
if ( window.performance && performance.memory )
|
|
memory = performance.memory;
|
|
|
|
if ( memory.totalJSHeapSize === 0 ) {
|
|
console.warn( 'totalJSHeapSize === 0... performance.memory is only available in Chrome .' );
|
|
}
|
|
|
|
var _values = {
|
|
memory: {
|
|
caption: 'Used Memory',
|
|
average: true,
|
|
avgMs: 1000,
|
|
over: 22
|
|
},
|
|
total: {
|
|
caption: 'Total Memory'
|
|
}
|
|
};
|
|
|
|
var _groups = [ {
|
|
caption: 'Browser',
|
|
values: [ 'memory', 'total' ]
|
|
} ];
|
|
|
|
var _fractions = [ {
|
|
base: 'total',
|
|
steps: [ 'memory' ]
|
|
} ];
|
|
|
|
var log1024 = Math.log( 1024 );
|
|
|
|
function _size ( v ) {
|
|
|
|
var precision = 100; //Math.pow(10, 2);
|
|
var i = Math.floor( Math.log( v ) / log1024 );
|
|
if( v === 0 ) i = 1;
|
|
return Math.round( v * precision / Math.pow( 1024, i ) ) / precision; // + ' ' + sizes[i];
|
|
|
|
}
|
|
|
|
function _update () {
|
|
_usedJSHeapSize = _size( memory.usedJSHeapSize );
|
|
_totalJSHeapSize = _size( memory.totalJSHeapSize );
|
|
|
|
_rS( 'memory' ).set( _usedJSHeapSize );
|
|
_rS( 'total' ).set( _totalJSHeapSize );
|
|
}
|
|
|
|
function _start () {
|
|
_usedJSHeapSize = 0;
|
|
}
|
|
|
|
function _end () {}
|
|
|
|
function _attach ( r ) {
|
|
_rS = r;
|
|
}
|
|
|
|
return {
|
|
update: _update,
|
|
start: _start,
|
|
end: _end,
|
|
attach: _attach,
|
|
values: _values,
|
|
groups: _groups,
|
|
fractions: _fractions
|
|
};
|
|
|
|
};
|
|
|
|
if (typeof module === 'object') {
|
|
module.exports = {
|
|
glStats: window.glStats,
|
|
threeStats: window.threeStats,
|
|
BrowserStats: window.BrowserStats
|
|
};
|
|
}
|