65,6 → 65,11 |
|
#define TRACER_LOGEVENT fast_logevent |
|
int tracer_initialize(int OutputType, int MemorySize); |
void tracer_enable(); |
void tracer_disable(); |
void tracer_print_statistics(); |
|
#define TRACER_SERIALIZE |
|
/* Save bytes => 1(type) + 4(tsc_high) + 4(tsc_low) + 1(size) |
79,7 → 84,10 |
|
extern void *StartTracerBuffer; |
extern void *EndTracerBuffer; |
extern void *LastBeforeEndTracerBuffer; |
extern void *CurrentTracerBuffer; |
extern void *FirstTracerBuffer; |
|
extern int TracerActive; |
extern unsigned long long TracerEventsRecorded; |
|
111,6 → 119,15 |
if (flag & 1) size += 4; |
if (flag & 3) size += 4; |
|
// Adjust FirstTracerBuffer |
if (FirstTracerBuffer != StartTracerBuffer) { |
while ((CurrentTracerBuffer + size - 1) > FirstTracerBuffer) { |
FirstTracerBuffer += *(BYTE *)(FirstTracerBuffer + 9); |
if (FirstTracerBuffer > LastBeforeEndTracerBuffer) FirstTracerBuffer = StartTracerBuffer; |
} |
} |
|
// Check if we overcome EndTracerBuffer |
if ((CurrentTracerBuffer + size - 1) > EndTracerBuffer) { |
int i; |
//Clear remain memory |
117,9 → 134,13 |
for (i=0;i<(EndTracerBuffer-CurrentTracerBuffer+1);i++) |
*(BYTE *)(CurrentTracerBuffer + i) = 0; |
//Cyclical Buffer implementation |
LastBeforeEndTracerBuffer = CurrentTracerBuffer; |
CurrentTracerBuffer = StartTracerBuffer; |
//Set the First Event |
FirstTracerBuffer = StartTracerBuffer + *(BYTE *)(StartTracerBuffer + 9); |
} |
|
// Add the new event |
*(BYTE *)CurrentTracerBuffer = type; |
CurrentTracerBuffer++; |
*(DWORD *)(CurrentTracerBuffer) = tsc_high; |