Skip to content

Commit

Permalink
Initial shot at a basic debug annotation extension.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Jul 6, 2019
1 parent 4ed03b9 commit cf10025
Show file tree
Hide file tree
Showing 3 changed files with 178 additions and 3 deletions.
8 changes: 8 additions & 0 deletions altrace/altrace_entrypoints.h
Expand Up @@ -95,6 +95,14 @@ ENTRYPOINTVOID(alGetBuffer3f,(ALuint name, ALenum param, ALfloat *value1, ALfloa
ENTRYPOINTVOID(alGetBufferi,(ALuint name, ALenum param, ALint *value),(name,param,value))
ENTRYPOINTVOID(alGetBuffer3i,(ALuint name, ALenum param, ALint *value1, ALint *value2, ALint *value3),(name,param,value1,value2,value3))
ENTRYPOINTVOID(alGetBufferiv,(ALuint name, ALenum param, ALint *values),(name,param,values))
ENTRYPOINTVOID(alTracePushScope,(const ALchar *str),(str))
ENTRYPOINTVOID(alTracePopScope,(void),())
ENTRYPOINTVOID(alTraceMessage,(const ALchar *str),(str))
ENTRYPOINTVOID(alTraceBufferLabel,(ALuint name, const ALchar *str),(name,str))
ENTRYPOINTVOID(alTraceSourceLabel,(ALuint name, const ALchar *str),(name,str))
ENTRYPOINTVOID(alcTraceDeviceLabel,(ALCdevice *device, const ALchar *str),(device,str))
ENTRYPOINTVOID(alcTraceContextLabel,(ALCcontext *ctx, const ALchar *str),(ctx,str))

#undef ENTRYPOINT
#undef ENTRYPOINTVOID

67 changes: 66 additions & 1 deletion altrace/altrace_playback.c
Expand Up @@ -12,6 +12,8 @@
static int dump_log = 1;
static int run_log = 0;

static int trace_scope = 0;

static void quit_altrace_playback(void);

#define MAX_IOBLOBS 32
Expand Down Expand Up @@ -177,7 +179,10 @@ static ALboolean IO_BOOLEAN(void)

#define IO_START(e) \
{ \
if (dump_log) { printf("%s", #e); } { \
if (dump_log) { \
int i; for (i = 0; i < trace_scope; i++) { printf(" "); } \
printf("%s", #e); \
} { \

#define IO_END() \
if (dump_log) { fflush(stdout); } } \
Expand Down Expand Up @@ -1599,6 +1604,66 @@ static void dump_alGetBufferiv(void)
IO_END();
}

static void dump_alTracePushScope(void)
{
IO_START(alTracePushScope);
const ALchar *str = IO_STRING();
if (dump_log) { printf("(%s)\n", litString(str)); }
trace_scope++;
IO_END();
}

static void dump_alTracePopScope(void)
{
trace_scope--;
IO_START(alTracePopScope);
IO_END();
}

static void dump_alTraceMessage(void)
{
IO_START(alTraceMessage);
const ALchar *str = IO_STRING();
if (dump_log) { printf("(%s)\n", litString(str)); }
IO_END();
}

static void dump_alTraceBufferLabel(void)
{
IO_START(alTraceBufferLabel);
const ALuint name = IO_UINT32();
const ALchar *str = IO_STRING();
if (dump_log) { printf("(%u, %s)\n", (uint) name, litString(str)); }
IO_END();
}

static void dump_alTraceSourceLabel(void)
{
IO_START(alTraceSourceLabel);
const ALuint name = IO_UINT32();
const ALchar *str = IO_STRING();
if (dump_log) { printf("(%u, %s)\n", (uint) name, litString(str)); }
IO_END();
}

static void dump_alcTraceDeviceLabel(void)
{
IO_START(alcTraceDeviceLabel);
ALCdevice *device = (ALCdevice *) IO_PTR();
const ALchar *str = IO_STRING();
if (dump_log) { printf("(%p, %s)\n", device, litString(str)); }
IO_END();
}

static void dump_alcTraceContextLabel(void)
{
IO_START(alcTraceContextLabel);
ALCcontext *ctx = (ALCcontext *) IO_PTR();
const ALchar *str = IO_STRING();
if (dump_log) { printf("(%p, %s)\n", ctx, litString(str)); }
IO_END();
}



static void dump_al_error_event(void)
Expand Down
106 changes: 104 additions & 2 deletions altrace/altrace_record.c
Expand Up @@ -15,6 +15,16 @@

#include "altrace_common.h"

// not in the headers, natch.
AL_API void AL_APIENTRY alTracePushScope(const ALchar *str);
AL_API void AL_APIENTRY alTracePopScope(void);
AL_API void AL_APIENTRY alTraceMessage(const ALchar *str);
AL_API void AL_APIENTRY alTraceBufferLabel(ALuint name, const ALchar *str);
AL_API void AL_APIENTRY alTraceSourceLabel(ALuint name, const ALchar *str);
AL_API void AL_APIENTRY alcTraceDeviceLabel(ALCdevice *device, const ALchar *str);
AL_API void AL_APIENTRY alcTraceContextLabel(ALCcontext *ctx, const ALchar *str);


static pthread_mutex_t _apilock;
static pthread_mutex_t *apilock;

Expand Down Expand Up @@ -340,7 +350,11 @@ ALCboolean alcIsExtensionPresent(ALCdevice *device, const ALCchar *extname)
IO_START(alcIsExtensionPresent);
IO_PTR(device);
IO_STRING(extname);
retval = REAL_alcIsExtensionPresent(device, extname);
if (strcasecmp(extname, "ALC_EXT_trace_info") == 0) {
retval = ALC_TRUE;
} else {
retval = REAL_alcIsExtensionPresent(device, extname);
}
IO_ALCBOOLEAN(retval);
IO_END_ALC(device);
return retval;
Expand Down Expand Up @@ -386,6 +400,24 @@ const ALCchar *alcGetString(ALCdevice *device, ALCenum param)
IO_PTR(device);
IO_ALCENUM(param);
retval = REAL_alcGetString(device, param);

if ((param == ALC_EXTENSIONS) && retval) {
const char *addstr = "ALC_EXT_trace_info";
const size_t slen = strlen(retval) + strlen(addstr) + 2;
DeviceItem *devi;
for (devi = &devices; devi != NULL; devi = devi->next) {
if (devi->device == device) {
char *ptr = (char *) realloc(devi->extension_string, slen);
if (ptr) {
devi->extension_string = ptr;
snprintf(ptr, slen, "%s%s%s", retval, *retval ? " " : "", addstr);
retval = (const ALCchar *) ptr;
}
break;
}
}
}

IO_STRING(retval);
IO_END_ALC(device);
return retval;
Expand Down Expand Up @@ -739,6 +771,20 @@ const ALchar *alGetString(const ALenum param)
IO_START(alGetString);
IO_ENUM(param);
retval = REAL_alGetString(param);

if (param == AL_EXTENSIONS) {
if (retval && current_context) {
const char *addstr = "AL_EXT_trace_info";
const size_t slen = strlen(retval) + strlen(addstr) + 2;
char *ptr = (char *) realloc(current_context->extension_string, slen);
if (ptr) {
current_context->extension_string = ptr;
snprintf(ptr, slen, "%s%s%s", retval, *retval ? " " : "", addstr);
retval = (const ALCchar *) ptr;
}
}
}

IO_STRING(retval);
IO_END();
return retval;
Expand Down Expand Up @@ -825,7 +871,11 @@ ALboolean alIsExtensionPresent(const ALchar *extname)
ALboolean retval;
IO_START(alIsExtensionPresent);
IO_STRING(extname);
retval = REAL_alIsExtensionPresent(extname);
if (strcasecmp(extname, "AL_EXT_trace_info") == 0) {
retval = AL_TRUE;
} else {
retval = REAL_alIsExtensionPresent(extname);
}
IO_BOOLEAN(retval);
IO_END();
return retval;
Expand Down Expand Up @@ -1495,5 +1545,57 @@ void alGetBufferiv(ALuint name, ALenum param, ALint *values)
IO_END();
}

void alTracePushScope(const ALchar *str)
{
IO_START(alTracePushScope);
IO_STRING(str);
IO_END();
}

void alTracePopScope(void)
{
IO_START(alTracePopScope);
IO_END();
}

void alTraceMessage(const ALchar *str)
{
IO_START(alTraceMessage);
IO_STRING(str);
IO_END();
}

void alTraceBufferLabel(ALuint name, const ALchar *str)
{
IO_START(alTraceBufferLabel);
IO_UINT32(name);
IO_STRING(str);
IO_END();
}

void alTraceSourceLabel(ALuint name, const ALchar *str)
{
IO_START(alTraceSourceLabel);
IO_UINT32(name);
IO_STRING(str);
IO_END();
}

void alcTraceDeviceLabel(ALCdevice *device, const ALchar *str)
{
IO_START(alcTraceDeviceLabel);
IO_PTR(device);
IO_STRING(str);
IO_END();
}

void alcTraceContextLabel(ALCcontext *ctx, const ALchar *str)
{
IO_START(alcTraceContextLabel);
IO_PTR(ctx);
IO_STRING(str);
IO_END();
}

// end of altrace_record.c ...

0 comments on commit cf10025

Please sign in to comment.