FireBirdLib - Topfield TMS PVR TAP Programming Library
CallTraceExit.c
Go to the documentation of this file.
1#include "FBLib_debug.h"
2
3void CallTraceExit(dword *Magic)
4{
5 char Spaces[101];
6 int i, j;
7 dword t;
8 extern dword __tap_ud__;
9
10 if(CallTraceDoNotReenter) return;
12
13 t = TAP_GetTick();
14
16
17 Spaces[0] = '\0';
18
19 if(CallLevel > 0)
20 {
21 CallLevel--;
22
24 {
25 //Check if the proc name is already known by the stats array
26 j = -1;
27 for(i = 0; i < CallTraceStatsEntries; i++)
28 if(CallTraceStats[i].ProcName == CallTraceStack[CallLevel].ProcName)
29 {
30 j = i;
31 break;
32 }
33
34 //If not, use the next free entry
35 if(j == -1) j = CallTraceStatsEntries;
36
37 //Add the stats
38 if(j < CTSTATENTRIES)
39 {
41 if(CallTraceStats[j].ProcName)
42 {
43 //Already known
44 if((dword)i < CallTraceStats[j].MinTime) CallTraceStats[j].MinTime = i;
45 if((dword)i > CallTraceStats[j].MaxTime) CallTraceStats[j].MaxTime = i;
47 if(CallTraceStats[j].NrCalls < 0xffffffff)
48 {
51 }
52 }
53 else
54 {
55 //New procedure
62 }
63 }
64 }
65 }
66 else
67 LogEntryFBLibPrintf(TRUE, "CallLevel Underflow! (TAPID 0x%8.8lx)", __tap_ud__);
68
69 if(CallTraceEnabled || Magic)
70 {
71 memset(Spaces, ' ', CallLevel < CTSTACKSIZE ? CallLevel << 1 : 100);
72 Spaces[CallLevel < CTSTACKSIZE ? CallLevel << 1 : 100] = '\0';
73 }
74
75 if(Magic && *Magic != DEFAULTMAGIC)
76 {
77 TAP_Print("%sINVALID MAGIC!\n", Spaces);
78 *Magic = DEFAULTMAGIC;
79 }
80
82}
void CallTraceExit(dword *Magic)
Definition: CallTraceExit.c:3
tCallTraceStack CallTraceStack[CTSTACKSIZE]
Definition: CallTraceInit.c:4
bool CallTraceInitialized
Definition: CallTraceInit.c:6
dword CallLevel
Definition: CallTraceInit.c:3
int CallTraceStatsEntries
Definition: CallTraceInit.c:8
tCallTraceStats * CallTraceStats
Definition: CallTraceInit.c:7
bool CallTraceEnabled
Definition: CallTraceInit.c:5
bool CallTraceDoNotReenter
Definition: CallTraceInit.c:9
void CallTraceInit(void)
Definition: CallTraceInit.c:11
#define DEFAULTMAGIC
Definition: FBLib_debug.h:6
#define CTSTATENTRIES
Definition: FBLib_debug.h:8
#define CTSTACKSIZE
Definition: FBLib_debug.h:7
const dword __tap_ud__
void LogEntryFBLibPrintf(bool Console, char *format,...)
#define TAP_Print
Definition: libFireBird.h:181