text: // The MIT License
  //
  // Copyright (c) 2009-2016 stats.js authors
  //
  // 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.
  
  // SOURCE: https://github.com/mrdoob/stats.js
  
  /**
   * @author mrdoob / http://mrdoob.com/
   */
  
  // This is indeed not a task, as it is quite short and may indeed be run to completion
  
  var Stats = function () {
      var mode = 0;
      var container = document.createElement( 'div' );
      container.style.cssText = 'position:fixed;top:0;right: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 index = 0;
      var fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) );
      var msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) );
      var toggleTest = document.getElementById("toggleTest" );
      var oldVal = toggleTest.checked;
      var buffer = []
      var startTime = 0
  
      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 ) {
                  window.fps = frames
  
  
                  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 { Stats as default };
  