{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-mpm-debugging/src/mpm-debugger/src/debug/performance.js"],"names":["Menu","DebugPanel","round","number","precision","Math","pow","ig","system","fps","DebugGraphPanel","subclass","clocks","marks","textY","height","ms","timeBeforeRun","initialize","name","label","prototype","apply","arguments","mark16ms","mark33ms","msHeight","graph","$","attr","window","innerWidth","container","append","ctx","getContext","fillStyle","fillRect","addClock","description","color","mark","addClass","css","document","createTextNode","legend","current","start","performance","now","avg","html","beginClock","offset","endClock","c","msg","active","push","beforeRun","afterRun","frameTime","nextFrameDue","max","x","y","drawImage","get","ci","hasOwnProperty","text","toFixed","h","textAlign","textBaseline","globalAlpha","i","length","m","fillText"],"mappings":"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","file":"performance.js","sourcesContent":["import Menu from './menu.js';\nimport DebugPanel from './panel.js';\n\nvar round = function(number, precision) {\n\tprecision = Math.pow(10, precision || 0);\n\treturn Math.round(number * precision) / precision;\n};\n\nvar ig = ig || {};\nig.system = ig.system || {};\nig.system.fps = ig.system.fps || 60;\n/**\n *  ---------------------------- GRAPH PANEL ----------------------------\n */\nvar DebugGraphPanel = DebugPanel.subclass({\n\tclocks: {},\n\tmarks: [],\n\ttextY: 0,\n\theight: 128,\n\tms: 64,\n\ttimeBeforeRun: 0,\n\t\n\t\n\tinitialize: function( name, label ) {\n\t\tDebugPanel.prototype.initialize.apply(this, arguments);\n\t\t\n\t\tthis.mark16ms = round((this.height - (this.height/this.ms) * 16));\n\t\tthis.mark33ms = round((this.height - (this.height/this.ms) * 33));\n\t\tthis.msHeight = this.height/this.ms;\n\t\t\n\t\tthis.graph = $('<canvas />');\n\t\tthis.graph.attr(\"width\", window.innerWidth);\n\t\tthis.graph.attr(\"height\", this.height);\n\t\tthis.container.append( this.graph );\n\t\tthis.ctx = this.graph[0].getContext('2d');\n\t\t\n\t\tthis.ctx.fillStyle = '#444';\n\t\tthis.ctx.fillRect( 0, this.mark16ms, this.graph.attr(\"width\"), 1 );\n\t\tthis.ctx.fillRect( 0, this.mark33ms, this.graph.attr(\"width\"), 1 );\n\t\t\n\t\tthis.addClock( 'draw', 'Draw', '#13baff');//caca25' );\n\t\tthis.addClock( 'update', 'Update', '#bb0fff');//25ca72' );\n\t\tthis.addClock( 'lag', 'System Lag', '#f26900');//ca258f' );\n\t\t\n\t\twindow.graph = this;\n\t},\n\t\n\t\n\taddClock: function( name, description, color ) {\t\t\n\t\tvar mark = $('<span />');\n\t\tmark.addClass('ig_debug_legend_color');\n\t\tmark.css(\"backgroundColor\", color);\n\t\t\n\t\tvar number = $('<span />');\n\t\tnumber.addClass('ig_debug_legend_number');\n\t\tnumber.append( document.createTextNode('0') );\n\t\t\n\t\tvar legend = $('<span />');\n\t\tlegend.addClass('ig_debug_legend');\n\t\tlegend.append( mark );\n\t\tlegend.append( document.createTextNode(description +' (') );\n\t\tlegend.append( number );\n\t\tlegend.append( document.createTextNode('ms)') );\n\t\t\n\t\tthis.container.append( legend );\n\t\t\n\t\tthis.clocks[name] = {\n\t\t\tdescription: description,\n\t\t\tcolor: color,\n\t\t\tcurrent: 0,\n\t\t\tstart: window.performance.now(),\n\t\t\tavg: 0,\n\t\t\thtml: number\n\t\t};\n\t},\n\t\n\t\n\tbeginClock: function( name, offset ) {\n\t\tthis.clocks[name].start = window.performance.now() + (offset || 0);\n\t},\n\t\n\t\n\tendClock: function( name ) {\n\t\tvar c = this.clocks[name];\n\t\tc.current = Math.round(window.performance.now() - c.start);\n\t\tc.avg = c.avg * 0.8 + c.current * 0.2;\n\t},\n\t\n\t\n\tmark: function( msg, color ) {\n\t\tif( this.active ) {\n\t\t\tthis.marks.push( {msg:msg, color:(color||'#fff')} );\n\t\t}\n\t},\n\t\n\t\n\tbeforeRun: function() {\n\t\tthis.endClock('lag');\n\t\tthis.timeBeforeRun = window.performance.now();\n\t},\n\t\n\t\n\tafterRun: function() {\n\t\tvar frameTime = window.performance.now() - this.timeBeforeRun;\n\t\tvar nextFrameDue = (1000/ig.system.fps) - frameTime;\n\t\tthis.beginClock('lag', Math.max(nextFrameDue, 0));\n\t\t\n\t\tvar x = this.graph.attr(\"width\") -1;\n\t\tvar y = this.height;\n\t\t\n\t\tthis.ctx.drawImage( this.graph.get(0), -1, 0 );\n\t\t\n\t\tthis.ctx.fillStyle = '#000';\n\t\tthis.ctx.fillRect( x, 0, 1, this.height );\n\t\t\n\t\tthis.ctx.fillStyle = '#444';\n\t\tthis.ctx.fillRect( x, this.mark16ms, 1, 1 );\n\t\t\n\t\tthis.ctx.fillStyle = '#444';\n\t\tthis.ctx.fillRect( x, this.mark33ms, 1, 1 );\n\t\t\n\t\tfor( var ci in this.clocks ) {\n\t\t\tif(!this.clocks.hasOwnProperty(ci)) continue;\n\n\t\t\tvar c = this.clocks[ci];\n\t\t\tc.html.text(c.avg.toFixed(2));\n\t\t\t\n\t\t\tif( c.color && c.current > 0 ) {\n\t\t\t\tthis.ctx.fillStyle = c.color;\n\t\t\t\tvar h = c.current * this.msHeight;\n\t\t\t\ty -= h;\n\t\t\t\tthis.ctx.fillRect(\tx, y, 1, h );\n\t\t\t\tc.current = 0;\n\t\t\t}\n\t\t}\n\t\t\n\t\tthis.ctx.textAlign = 'right';\n\t\tthis.ctx.textBaseline = 'top';\n\t\tthis.ctx.globalAlpha = 0.5;\n\t\t\n\t\tfor( var i = 0; i < this.marks.length; i++ ) {\n\t\t\tvar m = this.marks[i];\n\t\t\tthis.ctx.fillStyle = m.color;\n\t\t\tthis.ctx.fillRect(\tx, 0, 1, this.height );\n\t\t\tif( m.msg ) {\n\t\t\t\tthis.ctx.fillText( m.msg, x-1, this.textY );\n\t\t\t\tthis.textY = (this.textY+8)%32;\n\t\t\t}\n\t\t}\n\t\tthis.ctx.globalAlpha = 1;\n\t\tthis.marks = [];\n\t}\n});\n/*\n$().ready(function() {\n});\n*/\nexport default DebugGraphPanel;\n"]}