function profile(objectNames, run) { | |
var loader = new YAHOO.util.YUILoader({ | |
require: ["logger", "profiler"], | |
onSuccess: function(){ | |
YAHOO.util.Event.onDOMReady(function(){ | |
// Define logger source | |
var logger = new YAHOO.widget.LogWriter(objectNames[0]); | |
// Create log console | |
var reader = new YAHOO.widget.LogReader(); | |
// Customize console | |
reader.verboseOutput = false; | |
reader.newestOnTop = false; | |
reader.formatMsg = function (oLogMsg) { | |
return '<pre class="yui-log-entry"><p>' + oLogMsg.msg + '</p></pre>'; | |
}; | |
reader.hideSource("global"); | |
reader.hideSource("LogReader"); | |
// Register objects to profile | |
for (var i = 0; i < objectNames.length; i++) | |
if (YAHOO.lang.isFunction(objectNames[i])) { | |
YAHOO.tool.Profiler.registerConstructor(objectNames[i]); | |
} else { | |
YAHOO.tool.Profiler.registerObject(objectNames[i]); | |
} | |
// Run the application | |
run(); | |
// Get report | |
var report = YAHOO.tool.Profiler.getFullReport(function(report){ | |
return report.calls > 0; | |
}); | |
// Create total time spent property | |
for (var func in report) { | |
report[func].total = report[func].points[0]; | |
for (var i = 1; i < report[func].points.length; i++) | |
report[func].total += report[func].points[i]; | |
} | |
// Change report to an array of reports | |
var reports = []; | |
for (var func in report) { | |
report[func].name = func; | |
reports.push(report[func]); | |
} | |
// Sort by total time | |
reports.sort(function(a, b){ return b.total - a.total; }); | |
// Display profiler results | |
for (var i = 0; i < reports.length; i++) { | |
logger.log( | |
"<span class='info'>" + reports[i].total + "ms</span> " + | |
reports[i].name + "(): " + | |
"Called " + reports[i].calls + " times. " + | |
"Avg: " + reports[i].avg + "ms, " + | |
"Min: " + reports[i].min + "ms, " + | |
"Max: " + reports[i].max + "ms" | |
); | |
} | |
}); | |
} | |
}); | |
// CSS customizations | |
loader.addModule({ | |
name: "cssmod", | |
type: "css", | |
fullpath: "lib/profiler.css" | |
}); | |
loader.require("cssmod"); | |
// Load everything in | |
loader.insert(); | |
} |