private void BuildBaseCallTables() { int id = -1; string nameAndSignature = null; try { foreach(DictionaryEntry de in basedataId) { datanode pn= new datanode(); datanode cn= new datanode(); nameAndSignature = (string)de.Key; id = (int)basedataId[nameAndSignature]; if(this._prevbasedata.ContainsKey(nameAndSignature)) { pn = (datanode)_prevbasedata[nameAndSignature]; pn.id = id; BuildCallTables(this.callertbl, id, pn.caller, true); BuildCallTables(this.calleetbl, id, pn.callee, false); } else { if(_currbasedata.ContainsKey(nameAndSignature)) { cn = (datanode)_currbasedata[nameAndSignature]; cn.id = id; BuildCallTables(this.callertbl, id, cn.caller, true); BuildCallTables(this.calleetbl, id, cn.callee, false); } } } ds.Tables.Add(this.callertbl); ds.Tables.Add(this.calleetbl); } catch { throw new Exception("Faild on build caller/callee data Tables \n"); } }
private void BuildContributionCalleeTable() { int id = -1; string nameAndSignature = null; bool exist = false; Hashtable cnnew; datanode pn1; datanode cn1; try { foreach(DictionaryEntry de in basedataId) { datanode pn= new datanode(); datanode cn= new datanode(); nameAndSignature = (string)de.Key; id = (int)basedataId[nameAndSignature]; if(this._prevbasedata.ContainsKey(nameAndSignature)) { pn = (datanode)_prevbasedata[nameAndSignature]; if(_currbasedata.ContainsKey(nameAndSignature)) { cn = (datanode)_currbasedata[nameAndSignature]; exist = true; } else { exist = false; } cnnew = new Hashtable(); foreach(string nameAndSignature1 in pn.calleeAlloc.Keys) { pn1 = new datanode(); cn1 = new datanode(); if(this._prevbasedata.ContainsKey(nameAndSignature1)) { pn1 = (datanode)_prevbasedata[nameAndSignature1]; pn1.id = id; pn1.incl = FormatSize(int.Parse(pn.calleeAlloc[nameAndSignature1].ToString())); if(exist) { if(this._currbasedata.ContainsKey(nameAndSignature1)) { cn1 = (datanode)_currbasedata[nameAndSignature1]; cn1.id = id; if(cn.calleeAlloc.ContainsKey(nameAndSignature1)) { cn1.incl = FormatSize(int.Parse(cn.calleeAlloc[nameAndSignature1].ToString())); } cnnew[nameAndSignature1] = 1; } } AddBaseTableRow(this.ContriTocalleetbl, nameAndSignature1, pn1, cn1); } } // adding item in new and not in old if(exist) { foreach(string nameAndSignature1 in cn.calleeAlloc.Keys) { pn1 = new datanode(); if(!cnnew.ContainsKey(nameAndSignature1)) { cn1 = (datanode)_currbasedata[nameAndSignature1]; cn1.id = id; cn1.incl = FormatSize(int.Parse(cn.calleeAlloc[nameAndSignature1].ToString())); AddBaseTableRow(this.ContriTocalleetbl, nameAndSignature1, pn1, cn1); } } } } if(this._currbasedata.ContainsKey(nameAndSignature)) { cn = (datanode)_currbasedata[nameAndSignature]; pn1= new datanode(); if(!this._prevbasedata.ContainsKey(nameAndSignature)) { cn1 = (datanode)_currbasedata[nameAndSignature]; foreach(string nameAndSignature1 in cn.calleeAlloc.Keys) { if(this._currbasedata.ContainsKey(nameAndSignature1)) { cn1 = (datanode)_currbasedata[nameAndSignature1]; cn1.id = id; cn1.incl = FormatSize(int.Parse(cn.calleeAlloc[nameAndSignature1].ToString())); AddBaseTableRow(this.ContriTocalleetbl, nameAndSignature1, pn1, cn1); } } } } } ds.Tables.Add(this.ContriTocalleetbl); } catch { throw new Exception("Faild on build caller/callee data Tables \n"); } }
private void AddBaseTableRow(DataTable tmptbl, string name, datanode pn, datanode cn ) { DataRow tmpRow = tmptbl.NewRow(); if(pn.name != null) tmpRow["id"] = pn.id; else { tmpRow["id"] = cn.id; } tmpRow["name"] = name; tmpRow["prevIncl"] = pn.incl; tmpRow["currIncl"] = cn.incl; tmpRow["prevExcl"] = pn.excl; tmpRow["currExcl"] = cn.excl; #if(V_EXEC) //tmpRow["diffIncl"] = Convert.ToDouble(string.Format("{0:f2}", (cn.incl - pn.incl))); tmpRow["diffIncl"] = Math.Round((cn.incl - pn.incl), 2); tmpRow["diffExcl"] = Math.Round((cn.excl - pn.excl), 2); tmpRow["prevChildIncl"] = Math.Round((pn.incl - pn.excl), 2); tmpRow["currChildIncl"] = Math.Round((cn.incl - cn.excl), 2); tmpRow["diffChildIncl"] = Math.Round(((cn.incl - cn.excl) - (pn.incl - pn.excl)), 2); #else tmpRow["diffIncl"] = cn.incl - pn.incl; tmpRow["diffExcl"] = cn.excl - pn.excl; tmpRow["prevChildIncl"] = pn.incl - pn.excl; tmpRow["currChildIncl"] = cn.incl - cn.excl; tmpRow["diffChildIncl"] = (cn.incl - cn.excl) - (pn.incl - pn.excl); #endif tmpRow["prevTimesCalled"] = pn.timesBeenCalled; tmpRow["currTimesCalled"] = cn.timesBeenCalled; tmpRow["prevTimesMakecalls"] = pn.timesMakeCalls; tmpRow["currTimesMakecalls"] = cn.timesMakeCalls; tmpRow["diffTimesCalled"] = cn.timesBeenCalled - pn.timesBeenCalled; tmpRow["diffTimesMakecalls"] = cn.timesMakeCalls - pn.timesMakeCalls; tmptbl.Rows.Add(tmpRow); }
private void BuildBaseDataTable() { int id = 0; try { foreach(string nameAndSignature in _prevbasedata.Keys) { datanode pn= new datanode(); datanode cn= new datanode(); pn = (datanode)_prevbasedata[nameAndSignature]; pn.id = id; if(_currbasedata.ContainsKey(nameAndSignature)) { cn = (datanode)_currbasedata[nameAndSignature]; } AddBaseTableRow(this.basedatatable, nameAndSignature, pn, cn); basedataId.Add(nameAndSignature, id); Idbasedata.Add(id, nameAndSignature); id++; } foreach( string CnameAndSignature in _currbasedata.Keys) { if(! _prevbasedata.ContainsKey(CnameAndSignature)) { datanode pn= new datanode(); datanode cn= new datanode(); cn = (datanode)_currbasedata[CnameAndSignature]; cn.id = id; AddBaseTableRow(this.basedatatable, CnameAndSignature, pn, cn); basedataId.Add(CnameAndSignature, id); Idbasedata.Add(id, CnameAndSignature); id++; } } ds.Tables.Add(this.basedatatable); } catch { throw new Exception("Faild on build base data Tables \n"); } }
private void FillCallAlloc(ref datanode n, Vertex v) { n.calleeAlloc = new Hashtable(); n.callerAlloc = new Hashtable(); foreach(Edge edge in v.outgoingEdges.Values) { string nameAndSignature = edge.ToVertex.name; if(edge.ToVertex.signature != null) nameAndSignature += ' ' + edge.ToVertex.signature; if(!n.calleeAlloc.ContainsKey(nameAndSignature)) { n.calleeAlloc.Add(nameAndSignature, FormatSize((int)edge.weight)); } } foreach(Edge edge in v.incomingEdges.Values) { string nameAndSignature = edge.FromVertex.name; if(edge.FromVertex.signature != null) nameAndSignature += ' ' + edge.FromVertex.signature; if(!n.callerAlloc.ContainsKey(nameAndSignature)) { n.callerAlloc.Add(nameAndSignature, FormatSize((int)edge.weight)); } } }
private void BuildBaseData(GraphBase gb, CallTreeForm tmpcallTree, Hashtable htbl, Hashtable FuncExcl, Hashtable TypeExcl) { Vertex selectedVertex; int selectedVertexCount = gb.SelectedVertexCount(out selectedVertex); int id = 1; string nameAndSignature = null; datanode n = new datanode(); try { foreach (Vertex v in gb.basegraph.vertices.Values) { if( !v.name.StartsWith("????")) { if (v.selected || (selectedVertexCount == 0) ) { nameAndSignature = v.name; if(v.signature != null) nameAndSignature += ' ' + v.signature; n.name = nameAndSignature; n.incl = FormatSize((int)v.weight); n.caller = v.incomingEdges; n.callee = v.outgoingEdges; n.level = v.level; n.excl = 0; n.timesBeenCalled= n.timesMakeCalls = 0; FillCallAlloc(ref n, v); if(tmpcallTree.LogResult.allocatedHistogram.readNewLog.funcSignatureIdHash.ContainsKey(nameAndSignature)) { n.category = 1; // func id = tmpcallTree.LogResult.callstackHistogram.readNewLog.funcSignatureIdHash[nameAndSignature]; if(FuncExcl.ContainsKey(nameAndSignature)) { n.excl = FormatSize((int)FuncExcl[nameAndSignature]); } if( id > 0 && id <tmpcallTree.CallStats.Length) { n.timesBeenCalled = (int)tmpcallTree.CallStats[id].timesCalled; n.timesMakeCalls = (int)tmpcallTree.CallStats[id].totalFunctionsCalled; } if( !htbl.ContainsKey(nameAndSignature)) { htbl.Add(nameAndSignature, n); } } else if(tmpcallTree.LogResult.allocatedHistogram.readNewLog.typeSignatureIdHash.ContainsKey(nameAndSignature)) { n.category = 2; // type id = tmpcallTree.LogResult.allocatedHistogram.readNewLog.typeSignatureIdHash[nameAndSignature]; if(TypeExcl.ContainsKey(nameAndSignature)) { n.excl = FormatSize((int)TypeExcl[nameAndSignature]); } if( id > 0 && id <tmpcallTree.AllocStats.Length) { n.timesBeenCalled = (int)tmpcallTree.AllocStats[id].timesAllocated; } if( !htbl.ContainsKey(nameAndSignature)) { typemaxIncl = (typemaxIncl > v.weight) ? typemaxIncl : v.weight; htbl.Add(nameAndSignature, n); } } else { if( !htbl.ContainsKey(nameAndSignature)) { maxIncl = v.weight; htbl.Add(nameAndSignature, n); } } } } } } catch { throw new Exception("Faild on build base data structure \n"); } // max for caculate function/type 9 details if( prevFilter.max == 0) { prevFilter.max = maxIncl; prevTypedeFilter.max = typemaxIncl; } else { currFilter.max = maxIncl; currTypedeFilter.max = typemaxIncl; } maxIncl = 0; typemaxIncl = 0; }
private void BuildContributionCallerTable() { int id = -1; string nameAndSignature = null; bool exist = false; Hashtable cnnew; datanode pn1; datanode cn1; try { foreach(DictionaryEntry de in basedataId) { datanode pn= new datanode(); datanode cn= new datanode(); nameAndSignature = (string)de.Key; id = (int)basedataId[nameAndSignature]; if(this._prevbasedata.ContainsKey(nameAndSignature)) { pn = (datanode)_prevbasedata[nameAndSignature]; if(_currbasedata.ContainsKey(nameAndSignature)) { cn = (datanode)_currbasedata[nameAndSignature]; exist = true; } else { exist = false; } cnnew = new Hashtable(); foreach(Edge edge in pn.caller.Values) { pn1 = new datanode(); cn1 = new datanode(); string nameAndSignature1 = edge.FromVertex.name; if(edge.FromVertex.signature != null) nameAndSignature1 += ' ' + edge.FromVertex.signature; if(this._prevbasedata.ContainsKey(nameAndSignature1)) { pn1 = (datanode)_prevbasedata[nameAndSignature1]; pn1.id = id; pn1.incl = FormatSize((int)edge.weight); if(exist) { foreach(Edge edgec in cn.caller.Values) { if(edgec.FromVertex.name == edge.FromVertex.name && edgec.FromVertex.signature == edge.FromVertex.signature) { if(this._currbasedata.ContainsKey(nameAndSignature1)) { cn1 = (datanode)_currbasedata[nameAndSignature1]; cn1.id = id; cn1.incl = FormatSize((int)edgec.weight); cnnew[nameAndSignature1] = 1; } } } } AddBaseTableRow(this.ContriTocallertbl, nameAndSignature1, pn1, cn1); } } // adding item in new and not in old if(exist) { foreach(Edge edgec in cn.caller.Values) { pn1 = new datanode(); string nameAndSignature1 = edgec.FromVertex.name; if(edgec.FromVertex.signature != null) nameAndSignature1 += ' ' + edgec.FromVertex.signature; if(!cnnew.ContainsKey(nameAndSignature1)) { cn1 = (datanode)_currbasedata[nameAndSignature1]; cn1.id = id; cn1.incl = FormatSize((int)edgec.weight); AddBaseTableRow(this.ContriTocallertbl, nameAndSignature1, pn1, cn1); } } } } if(this._currbasedata.ContainsKey(nameAndSignature)) { cn = (datanode)_currbasedata[nameAndSignature]; pn1= new datanode(); if(!this._prevbasedata.ContainsKey(nameAndSignature)) { cn1 = (datanode)_currbasedata[nameAndSignature]; foreach(Edge edge in cn.caller.Values) { string nameAndSignature1 = edge.FromVertex.name; if(edge.FromVertex.signature != null) nameAndSignature1 += ' ' + edge.FromVertex.signature; if(this._currbasedata.ContainsKey(nameAndSignature1)) { cn1 = (datanode)_currbasedata[nameAndSignature1]; cn1.id = id; cn1.incl = FormatSize((int)edge.weight); AddBaseTableRow(this.ContriTocallertbl, nameAndSignature1, pn1, cn1); } } } } } ds.Tables.Add(this.ContriTocallertbl); } catch { throw new Exception("Faild on build caller/callee data Tables \n"); } }