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