|
|
function Pad(str, cSpaces) { var strDigits = ''; var i;
if (cSpaces < 0) { for(i = 0; (-cSpaces) > str.length; ++i) str += ' '; } else { for(i = 0; cSpaces > str.length; ++i) str = ' ' + str; } return str; }
function Array_ToTable(cColWidth) { var i; var str = ""; var strSeperator = "";
if (cColWidth == null) cColWidth = 8;
for(i = 0; i < this.length; ++i) { if (arguments[i] != null) cColWidth = arguments[i];
str += Pad(this[i].toString(), cColWidth) + strSeperator; } return str; }
function String_ToRow() { return this; }
function BeginTable() { var newwin = new Object(); newwin.AppendRow = Table_AppendRow; newwin.EndTable = Table_EndTable; return newwin; }
function Table_AppendRow(aData) { var str = aData.__toTable(-g_StopWatch.hWatches.__nNameSpace, g_StopWatch.hWatches.__nColSpace); LogMsg(str.__toRow(), 1); }
function Table_EndTable() { LogMsg("",1); }
var g_StopWatch = new Object(); g_StopWatch.NAMESPACE = 32; g_StopWatch.COLSPACE = 12; g_StopWatch.MAXNAMELENGTH = 64; Array.prototype.__toTable = Array_ToTable; String.prototype.__toRow = String_ToRow;
function CompareRows(Item1, Item2, col) { if (Item1[col] == Item2[col]) return 0;
if (Item1[col] != null && Item2[col] != null) { if (Item1[col] < Item2[col]) return -1;
return 1; } if (Item1[col] != null) return -1;
if (Item2[col] != null) return 1;
return 0; }
function DumpTimes() { var obj; var str = ""; var aRows = new Array(); var i; var objTable = BeginTable();
objTable.AppendRow(["name", "total", "max", "min", "avg", "count"]);
for(obj in g_StopWatch.hWatches) { if (!g_StopWatch.hWatches.__isPublicMember(obj)) continue; aRows[aRows.length] = g_StopWatch.hWatches[obj].Elapsed(); } objTable.AppendRow(["Sorted by name"]); aRows.sort(function(a,b) {return CompareRows(a,b,0);}); for(i = 0; i < aRows.length; ++i) objTable.AppendRow(aRows[i]);
objTable.AppendRow(["Sorted by total"]); aRows.sort(function(a,b) {return CompareRows(a,b,1);}); for(i = 0; i < aRows.length; ++i) objTable.AppendRow(aRows[i]);
objTable.AppendRow([]); objTable.EndTable(); }
function BeginWatch(strName) { var obj;
var re = /[<>&]/ig
strName = strName.replace(re, '.');
if (strName.length > g_StopWatch.MAXNAMELENGTH) strName = strName.slice(0, g_StopWatch.MAXNAMELENGTH);
if (g_StopWatch["hWatches"] == null) { g_StopWatch.hWatches = new Object(); g_StopWatch.hWatches.__nNameSpace = g_StopWatch.NAMESPACE; g_StopWatch.hWatches.__nColSpace = g_StopWatch.COLSPACE; if (g_StopWatch.hWatches.__isPublicMember == null) { g_StopWatch.hWatches.__isPublicMember = function(member) { return '__' != member.substr(0,2); } } } if (strName.length + 1 > g_StopWatch.hWatches.__nNameSpace) { g_StopWatch.hWatches.__nNameSpace = strName.length + 1; } if (g_StopWatch.hWatches[strName] == null) obj = g_StopWatch.hWatches[strName] = new StopWatch(strName); else obj = g_StopWatch.hWatches[strName];
obj.Start();
return obj; }
function AddCounter(strName, nCount) { var obj;
var re = /[<>&]/ig
strName = strName.replace(re, '.');
if (strName.length > g_StopWatch.MAXNAMELENGTH) strName = strName.slice(0, g_StopWatch.MAXNAMELENGTH);
if (g_StopWatch["hWatches"] == null) { g_StopWatch.hWatches = new Object(); g_StopWatch.hWatches.__nNameSpace = g_StopWatch.NAMESPACE; g_StopWatch.hWatches.__nColSpace = g_StopWatch.COLSPACE; if (g_StopWatch.hWatches.__isPublicMember == null) { g_StopWatch.hWatches.__isPublicMember = function(member) { return '__' != member.substr(0,2); } } } if (strName.length + 1 > g_StopWatch.hWatches.__nNameSpace) { g_StopWatch.hWatches.__nNameSpace = strName.length + 1; } if (g_StopWatch.hWatches[strName] == null) obj = g_StopWatch.hWatches[strName] = new ObjCounter(strName); else obj = g_StopWatch.hWatches[strName];
obj.AddCount(nCount); return obj; }
function ObjCounter(strName) { ObjCounter.prototype.AddCount = function(x) { this.nCount++; this.nTotal += x; if (x > this.nMax) this.nMax = x;
if (this.nMin == -1 || x < this.nMin) this.nMin = x; } ObjCounter.prototype.Elapsed = function(y) { return [this.strName, this.nTotal, this.nMax, this.nMin, this.nTotal / this.nCount, this.nCount]; }
this.strName = strName; this.nCount = 0; this.nTotal = 0; this.nMax = 0; this.nMin = -1; }
function StopWatch(strName) { StopWatch.prototype.Start = StopWatch_Start; StopWatch.prototype.Stop = StopWatch_Stop; StopWatch.prototype.Elapsed = StopWatch_Elapsed;
this.strName = strName; this.elapsed = 0; this.nCount = 0; this.startTime = 0; this.endTime = 0; this.maxTime = 0; this.minTime = -1; }
function StopWatch_Start() { this.startTime = (new Date()).getTime(); }
function StopWatch_Stop() { this.endTime = (new Date()).getTime(); var thistime = this.endTime - this.startTime;
this.elapsed += thistime;
if (this.minTime == -1 || thistime < this.minTime) this.minTime = thistime;
if (thistime > this.maxTime) this.maxTime = thistime; ++this.nCount; }
function StopWatch_Elapsed() { var secs = this.elapsed / 1000; /* name, total, max, avg, iterations */ return [this.strName, secs, this.maxTime / 1000, this.minTime / 1000,(Math.floor(secs / this.nCount * 1000) / 1000), this.nCount]; }
|