Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        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;