blob: c53cd3820ec9773a1acb55a427e2d2b0fe90ec08 [file] [log] [blame]
/*
Copyright (c) 2004-2006, The Dojo Foundation
All Rights Reserved.
Licensed under the Academic Free License version 2.1 or above OR the
modified BSD license. For more information on Dojo licensing, see:
http://dojotoolkit.org/community/licensing.shtml
*/
dojo.provide("dojo.profile");
dojo.profile = {_profiles:{}, _pns:[], start:function (name) {
if (!this._profiles[name]) {
this._profiles[name] = {iters:0, total:0};
this._pns[this._pns.length] = name;
} else {
if (this._profiles[name]["start"]) {
this.end(name);
}
}
this._profiles[name].end = null;
this._profiles[name].start = new Date();
}, end:function (name) {
var ed = new Date();
if ((this._profiles[name]) && (this._profiles[name]["start"])) {
with (this._profiles[name]) {
end = ed;
total += (end - start);
start = null;
iters++;
}
} else {
return true;
}
}, dump:function (appendToDoc) {
var tbl = document.createElement("table");
with (tbl.style) {
border = "1px solid black";
borderCollapse = "collapse";
}
var hdr = tbl.createTHead();
var hdrtr = hdr.insertRow(0);
var cols = ["Identifier", "Calls", "Total", "Avg"];
for (var x = 0; x < cols.length; x++) {
var ntd = hdrtr.insertCell(x);
with (ntd.style) {
backgroundColor = "#225d94";
color = "white";
borderBottom = "1px solid black";
borderRight = "1px solid black";
fontFamily = "tahoma";
fontWeight = "bolder";
paddingLeft = paddingRight = "5px";
}
ntd.appendChild(document.createTextNode(cols[x]));
}
for (var x = 0; x < this._pns.length; x++) {
var prf = this._profiles[this._pns[x]];
this.end(this._pns[x]);
if (prf.iters > 0) {
var bdytr = tbl.insertRow(true);
var vals = [this._pns[x], prf.iters, prf.total, parseInt(prf.total / prf.iters)];
for (var y = 0; y < vals.length; y++) {
var cc = bdytr.insertCell(y);
cc.appendChild(document.createTextNode(vals[y]));
with (cc.style) {
borderBottom = "1px solid gray";
paddingLeft = paddingRight = "5px";
if (x % 2) {
backgroundColor = "#e1f1ff";
}
if (y > 0) {
textAlign = "right";
borderRight = "1px solid gray";
} else {
borderRight = "1px solid black";
}
}
}
}
}
if (appendToDoc) {
var ne = document.createElement("div");
ne.id = "profileOutputTable";
with (ne.style) {
fontFamily = "Courier New, monospace";
fontSize = "12px";
lineHeight = "16px";
borderTop = "1px solid black";
padding = "10px";
}
if (document.getElementById("profileOutputTable")) {
dojo.body().replaceChild(ne, document.getElementById("profileOutputTable"));
} else {
dojo.body().appendChild(ne);
}
ne.appendChild(tbl);
}
return tbl;
}};
dojo.profile.stop = dojo.profile.end;