168 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			168 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var Stats = function () { | ||
|  | 
 | ||
|  | 	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 + 1000 ) { | ||
|  | 
 | ||
|  | 				fpsPanel.update( ( frames * 1000 ) / ( time - prevTime ), 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 ) ); | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 	}; | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | export default Stats; |