blob: 3fd2ff69d9f053bc788ac801691b7f236d64d62d [file] [log] [blame]
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();
}