|
|
@@ -0,0 +1,200 @@
|
|
|
+// stats.js -
|
|
|
+// @author mrdoob http://github.com/mrdoob/stats.js
|
|
|
+
|
|
|
+// The MIT License
|
|
|
+//
|
|
|
+// Copyright (c) 2009-2016 stats.js author mrdoob / http://mrdoob.com/
|
|
|
+//
|
|
|
+// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
+// of this software and associated documentation files (the "Software"), to deal
|
|
|
+// in the Software without restriction, including without limitation the rights
|
|
|
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
+// copies of the Software, and to permit persons to whom the Software is
|
|
|
+// furnished to do so, subject to the following conditions:
|
|
|
+//
|
|
|
+// The above copyright notice and this permission notice shall be included in
|
|
|
+// all copies or substantial portions of the Software.
|
|
|
+//
|
|
|
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
+// THE SOFTWARE.
|
|
|
+ */
|
|
|
+
|
|
|
+var Stats = function () {
|
|
|
+
|
|
|
+ this.fps = 0;
|
|
|
+ var mode = 0;
|
|
|
+
|
|
|
+ var container = document.createElement( 'div' );
|
|
|
+ container.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000';
|
|
|
+ container.addEventListener( 'click', function ( event ) {
|
|
|
+
|
|
|
+ event.preventDefault();
|
|
|
+ showPanel( ++ mode % container.children.length );
|
|
|
+
|
|
|
+ }, false );
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+ function addPanel( panel ) {
|
|
|
+
|
|
|
+ container.appendChild( panel.dom );
|
|
|
+ return panel;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function showPanel( id ) {
|
|
|
+
|
|
|
+ for ( var i = 0; i < container.children.length; i ++ ) {
|
|
|
+
|
|
|
+ container.children[ i ].style.display = i === id ? 'block' : 'none';
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ mode = id;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+ var beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0;
|
|
|
+
|
|
|
+ var fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );
|
|
|
+ var msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );
|
|
|
+
|
|
|
+ if ( self.performance && self.performance.memory ) {
|
|
|
+
|
|
|
+ var memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ showPanel( 0 );
|
|
|
+
|
|
|
+ return {
|
|
|
+
|
|
|
+ REVISION: 16,
|
|
|
+
|
|
|
+ dom: container,
|
|
|
+
|
|
|
+ addPanel: addPanel,
|
|
|
+ showPanel: showPanel,
|
|
|
+
|
|
|
+ begin: function () {
|
|
|
+
|
|
|
+ beginTime = ( performance || Date ).now();
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ end: function () {
|
|
|
+
|
|
|
+ frames ++;
|
|
|
+
|
|
|
+ var time = ( performance || Date ).now();
|
|
|
+
|
|
|
+ msPanel.update( time - beginTime, 200 );
|
|
|
+
|
|
|
+ if ( time > prevTime + 3000 ) {
|
|
|
+
|
|
|
+ this.fps = ( frames * 1000 ) / ( time - prevTime );
|
|
|
+ fpsPanel.update( this.fps, 100 );
|
|
|
+
|
|
|
+
|
|
|
+ prevTime = time;
|
|
|
+ frames = 0;
|
|
|
+
|
|
|
+ if ( memPanel ) {
|
|
|
+
|
|
|
+ var memory = performance.memory;
|
|
|
+ memPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return time;
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ update: function () {
|
|
|
+
|
|
|
+ beginTime = this.end();
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
+ // Backwards Compatibility
|
|
|
+
|
|
|
+ domElement: container,
|
|
|
+ setMode: showPanel
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+Stats.Panel = function ( name, fg, bg ) {
|
|
|
+
|
|
|
+ var min = Infinity, max = 0, round = Math.round;
|
|
|
+ var PR = round( window.devicePixelRatio || 1 );
|
|
|
+
|
|
|
+ var WIDTH = 80 * PR, HEIGHT = 48 * PR,
|
|
|
+ TEXT_X = 3 * PR, TEXT_Y = 2 * PR,
|
|
|
+ GRAPH_X = 3 * PR, GRAPH_Y = 15 * PR,
|
|
|
+ GRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR;
|
|
|
+
|
|
|
+ var canvas = document.createElement( 'canvas' );
|
|
|
+ canvas.width = WIDTH;
|
|
|
+ canvas.height = HEIGHT;
|
|
|
+ canvas.style.cssText = 'width:80px;height:48px';
|
|
|
+
|
|
|
+ var context = canvas.getContext( '2d' );
|
|
|
+ context.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif';
|
|
|
+ context.textBaseline = 'top';
|
|
|
+
|
|
|
+ context.fillStyle = bg;
|
|
|
+ context.fillRect( 0, 0, WIDTH, HEIGHT );
|
|
|
+
|
|
|
+ context.fillStyle = fg;
|
|
|
+ context.fillText( name, TEXT_X, TEXT_Y );
|
|
|
+ context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );
|
|
|
+
|
|
|
+ context.fillStyle = bg;
|
|
|
+ context.globalAlpha = 0.9;
|
|
|
+ context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT );
|
|
|
+
|
|
|
+ return {
|
|
|
+
|
|
|
+ dom: canvas,
|
|
|
+
|
|
|
+ update: function ( value, maxValue ) {
|
|
|
+
|
|
|
+ min = Math.min( min, value );
|
|
|
+ max = Math.max( max, value );
|
|
|
+
|
|
|
+ context.fillStyle = bg;
|
|
|
+ context.globalAlpha = 1;
|
|
|
+ context.fillRect( 0, 0, WIDTH, GRAPH_Y );
|
|
|
+ context.fillStyle = fg;
|
|
|
+ context.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y );
|
|
|
+
|
|
|
+ context.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT );
|
|
|
+
|
|
|
+ context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT );
|
|
|
+
|
|
|
+ context.fillStyle = bg;
|
|
|
+ context.globalAlpha = 0.9;
|
|
|
+ context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+if ( typeof module === 'object' ) {
|
|
|
+
|
|
|
+ module.exports = Stats;
|
|
|
+
|
|
|
+}
|