|
|
1.1 ! root 1: #include <afxwin.h> ! 2: #include <afxdlgs.h> ! 3: #include <afxcoll.h> ! 4: #include <string.h> ! 5: ! 6: #include "types.h" ! 7: #include "ranges.h" ! 8: #include "dispobj.h" ! 9: #include "timer.h" ! 10: ! 11: extern "C" char * UnDName(char *); ! 12: ! 13: ! 14: TIMER::TIMER(char * pchDll, char * pchFunction, int cCalls, TIMETYPE timeTotal, ! 15: TIMETYPE timeThisFunc) : ! 16: strDllName(pchDll), strFunctName(pchFunction), rtDisplay(0, 0, 10, 10) ! 17: { ! 18: NumCalls = cCalls; ! 19: TotalTime = timeTotal; ! 20: TimeThisFunction = timeThisFunc; ! 21: ! 22: /* ! 23: * Correct these values on an open ! 24: */ ! 25: ! 26: strDisplay = ""; ! 27: ! 28: } ! 29: ! 30: void TIMER::DoForeground(CDC * cdc, BOOL fZoom, RANGESTRUCT * prs) ! 31: { ! 32: CRect rtTmp = rtDisplay; ! 33: int i; ! 34: int j; ! 35: ! 36: if (fXYZ && IsOpen()) { ! 37: i = iBrush[1 + fTotal*2]; ! 38: j = iBrush[0 + fTotal*2]; ! 39: } else { ! 40: i = iBrush[0 + fTotal*2]; ! 41: j = iBrush[0 + fTotal*2]; ! 42: } ! 43: ! 44: CBrush cBrushI( prs->BackColor[i] ); ! 45: CBrush cBrushJ( prs->BackColor[j] ); ! 46: ! 47: ! 48: DoBackground(cdc, &cBrushI, &cBrushJ); ! 49: ! 50: if (!fZoom) { ! 51: rtTmp.OffsetRect(rtArea.TopLeft()); ! 52: ! 53: cdc->SetTextColor(prs->TextColor[i] * RGB(255, 255, 255)); ! 54: ! 55: cdc->DrawText(strDisplay, -1, &rtTmp, DT_NOCLIP|DT_EXPANDTABS); ! 56: ! 57: } ! 58: return; ! 59: } ! 60: ! 61: void TIMER::DoSetPercents(TIMETYPE progTime) ! 62: { ! 63: TIMER * p = Parent(); ! 64: TIMETYPE parentTotal; ! 65: ! 66: if (p == NULL) { ! 67: parentTotal = TotalTime; ! 68: } else { ! 69: parentTotal = p->TotalTime; ! 70: } ! 71: ! 72: perCent[0] = (int) TotalTime.PerCent(parentTotal); ! 73: perCent[1] = (int) TimeThisFunction.PerCent(TotalTime); ! 74: perCent[2] = (int) TotalTime.PerCent(progTime); ! 75: perCent[3] = (int) TimeThisFunction.PerCent(progTime); ! 76: return; ! 77: } /* TIMER::DoSetPercents() */ ! 78: ! 79: void TIMER::DoSetColors(RANGESTRUCT * prs) ! 80: { ! 81: int i; ! 82: int j; ! 83: ! 84: for (i=0; i<4; i++) { ! 85: for (j=0; j<prs->cRanges-1; j++) { ! 86: if ((prs->Above[j] <= perCent[i]) && ! 87: (perCent[i] < prs->Above[j+1])) { ! 88: break; ! 89: } ! 90: } ! 91: iBrush[i] = j; ! 92: } ! 93: ! 94: if ((iBrush[2] == 0) && prs->fPrune) { ! 95: fPrune = TRUE; ! 96: } else { ! 97: fPrune = FALSE; ! 98: } ! 99: ! 100: return; ! 101: } /* TIMER::DoSetColors() */ ! 102: ! 103: ! 104: void TIMER::DoSetString() ! 105: { ! 106: char rgch[256]; ! 107: ! 108: strDisplay = strDllName + "\n" + strFunctName; ! 109: sprintf(rgch, "\n%d\n%3d%%\t%3d%%\t", NumCalls, perCent[1], perCent[3]); ! 110: strDisplay += rgch; ! 111: strDisplay += TimeThisFunction.format(rgch); ! 112: sprintf(rgch, "\n%3d%%\t%3d%%\t", perCent[0], perCent[2]); ! 113: strDisplay += rgch; ! 114: strDisplay += TotalTime.format(rgch); ! 115: ! 116: return; ! 117: } /* TIMER::DoSetString() */ ! 118: ! 119: ! 120: ! 121: void TIMER::DoAssignSize(CDC * pcdc) ! 122: { ! 123: rtDisplay.SetRect(4, 4, 10, 10); ! 124: pcdc->DrawText(strDisplay, -1, &rtDisplay, DT_CALCRECT|DT_EXPANDTABS); ! 125: return; ! 126: } /* TIMER::DoAssignSize() */ ! 127: ! 128: ! 129: void TIMERROOT::AddTiming(int iDepth, char * szModule, char * szName, int cCalls, TIMETYPE timeTotal, TIMETYPE timeFunction) ! 130: { ! 131: TIMER * pTimer = new TIMER( szModule, szName, cCalls, timeTotal, timeFunction); ! 132: ! 133: if (pRoot == NULL) { ! 134: pTimerCur = pRoot = new TIMER( "APP", "***", 0, 0, 0); ! 135: level = -1; ! 136: } ! 137: ! 138: pRoot->AddTime(timeFunction); ! 139: ! 140: if (iDepth == level) { ! 141: pTimerCur->AddSibling(pTimer); ! 142: } else if (iDepth == level + 1) { ! 143: pTimerCur->AddChild( pTimer ); ! 144: level = iDepth; ! 145: } else { ! 146: while (level != iDepth) { ! 147: pTimerCur = pTimerCur->Parent(); ! 148: level -= 1; ! 149: } ! 150: pTimerCur->AddSibling(pTimer); ! 151: } ! 152: pTimerCur = pTimer; ! 153: return; ! 154: } /* TIMERROOT::AddTiming() */ ! 155: ! 156: void TIMERROOT::SetProperties(int flags, BOOL fZoom, RANGESTRUCT * prs, CDC * pcdc) ! 157: { ! 158: BOOL fLoc = flags & SET_LOCATION; ! 159: int i; ! 160: ! 161: if (fLoc) { ! 162: flags |= SET_LOCATIONPREP; ! 163: flags &= ~SET_LOCATION; ! 164: rgLoc.RemoveAll(); ! 165: } ! 166: pRoot->SetProperties(flags, prs, pcdc, fZoom, pRoot->timeTotal()); ! 167: ! 168: if (fLoc) { ! 169: rgLoc[0].left = spaceHorizontal; ! 170: rgLoc[0].y = 0; ! 171: for (i=1; i<rgLoc.GetSize(); i++) { ! 172: rgLoc[i].left = rgLoc[i-1].left + rgLoc[i-1].width + spaceHorizontal; ! 173: rgLoc[i].y = 0; ! 174: } ! 175: ! 176: pRoot->SetProperties(SET_LOCATION, prs, pcdc, fZoom); ! 177: } ! 178: ! 179: return; ! 180: } ! 181:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.