forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPerfUtils.js
More file actions
1 lines (1 loc) · 4.18 KB
/
PerfUtils.js
File metadata and controls
1 lines (1 loc) · 4.18 KB
1
define(function(require,exports,module){var _=require("thirdparty/lodash"),StringUtils=require("utils/StringUtils");require("utils/Global");var enabled=brackets&&!!brackets.app.getTimeSinceStartup,perfData={},activeTests={},updatableTests={},_reentTests={};function PerfMeasurement(id,name,reent){this.name=name,this.reent=reent,this.id=id||(reent?"[reent "+this.reent+"] "+name:name)}function createPerfMeasurement(id,name){var pm=new PerfMeasurement(id,name);return exports[id]=pm,pm}function _generatePerfMeasurements(name){var id=Array.isArray(name)?name:[name],i;for(i=0;i<id.length;i++)id[i]instanceof PerfMeasurement||(void 0===_reentTests[id[i]]?_reentTests[id[i]]=0:_reentTests[id[i]]++,id[i]=new PerfMeasurement(void 0,id[i],_reentTests[id[i]]));return id}function _markStart(id,time){activeTests[id.id]&&console.error("Recursive tests with the same id are not supported. Timer id: "+id.id),activeTests[id.id]={startTime:time}}function markStart(name){if(enabled){var time=brackets.app.getTimeSinceStartup(),id=_generatePerfMeasurements(name),i;for(i=0;i<id.length;i++)_markStart(id[i],time);return id.length>1?id:id[0]}}function addMeasurement(id){if(!enabled)return;id instanceof PerfMeasurement||(id=new PerfMeasurement(id,id));let elapsedTime=brackets.app.getTimeSinceStartup();return activeTests[id.id]&&(elapsedTime-=activeTests[id.id].startTime,delete activeTests[id.id]),perfData[id]?Array.isArray(perfData[id])?perfData[id].push(elapsedTime):perfData[id]=[perfData[id],elapsedTime]:perfData[id]=elapsedTime,void 0!==id.reent&&(0===_reentTests[id]?delete _reentTests[id]:_reentTests[id]--),elapsedTime}function updateMeasurement(id){var elapsedTime=brackets.app.getTimeSinceStartup();updatableTests[id.id]?(elapsedTime-=updatableTests[id].startTime,perfData[id]&&Array.isArray(perfData[id])?perfData[id][perfData[id].length-1]=elapsedTime:perfData[id]=elapsedTime):(activeTests[id.id]&&(updatableTests[id.id]={startTime:activeTests[id.id].startTime}),addMeasurement(id))}function finalizeMeasurement(id){activeTests[id.id]&&delete activeTests[id.id],updatableTests[id.id]&&delete updatableTests[id.id]}function isActive(id){return!!activeTests[id.id]}function getValueAsString(entry,aggregateStats){if(!Array.isArray(entry))return entry;if(aggregateStats){var sum=0,avg,min=_.min(entry),max=_.max(entry),sd,variationSum=0;return entry.forEach(function(value){sum+=value}),avg=Math.round(sum/entry.length),entry.forEach(function(value){variationSum+=Math.pow(value-avg,2)}),sd=Math.round(Math.sqrt(variationSum/entry.length)),min+"("+avg+")"+max+"["+sd+"]"}return entry.join(", ")}function getDelimitedPerfData(){var result="";return _.forEach(perfData,function(entry,testName){result+=getValueAsString(entry)+"\t"+testName+"\n"}),result}function getData(id){return id?perfData[id]:perfData}function getHealthReport(){var healthReport={projectLoadTimes:"",fileOpenTimes:""};return _.forEach(perfData,function(entry,testName){StringUtils.startsWith(testName,"Application Startup")?healthReport.AppStartupTime=getValueAsString(entry):StringUtils.startsWith(testName,"brackets module dependencies resolved")?healthReport.ModuleDepsResolved=getValueAsString(entry):StringUtils.startsWith(testName,"Load Project")?healthReport.projectLoadTimes+=":"+getValueAsString(entry,!0):StringUtils.startsWith(testName,"Open File")&&(healthReport.fileOpenTimes+=":"+getValueAsString(entry,!0))}),healthReport}function searchData(regExp){var keys=Object.keys(perfData).filter(function(key){return regExp.test(key)}),datas=[];return keys.forEach(function(key){datas.push(perfData[key])}),datas}function clear(){perfData={},activeTests={},updatableTests={},_reentTests={}}PerfMeasurement.prototype.toString=function(){return this.name},createPerfMeasurement("INLINE_WIDGET_OPEN","Open inline editor or docs"),createPerfMeasurement("INLINE_WIDGET_CLOSE","Close inline editor or docs"),exports.addMeasurement=addMeasurement,exports.finalizeMeasurement=finalizeMeasurement,exports.isActive=isActive,exports.markStart=markStart,exports.getData=getData,exports.searchData=searchData,exports.updateMeasurement=updateMeasurement,exports.getDelimitedPerfData=getDelimitedPerfData,exports.createPerfMeasurement=createPerfMeasurement,exports.clear=clear,exports.getHealthReport=getHealthReport});