ddebug: record and dump apitrace call numbers

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák
2016-06-30 00:40:01 +02:00
parent 861ecf1ca9
commit 50b2235478
4 changed files with 31 additions and 1 deletions

View File

@@ -665,9 +665,11 @@ static void
dd_context_emit_string_marker(struct pipe_context *_pipe,
const char *string, int len)
{
struct pipe_context *pipe = dd_context(_pipe)->pipe;
struct dd_context *dctx = dd_context(_pipe);
struct pipe_context *pipe = dctx->pipe;
pipe->emit_string_marker(pipe, string, len);
dd_parse_apitrace_marker(string, len, &dctx->apitrace_call_number);
}
static void

View File

@@ -99,6 +99,10 @@ dd_get_file_stream(struct dd_context *dctx)
fprintf(f, "Driver vendor: %s\n", screen->get_vendor(screen));
fprintf(f, "Device vendor: %s\n", screen->get_device_vendor(screen));
fprintf(f, "Device name: %s\n\n", screen->get_name(screen));
if (dctx->apitrace_call_number)
fprintf(f, "Last apitrace call: %u\n\n",
dctx->apitrace_call_number);
return f;
}

View File

@@ -114,6 +114,7 @@ struct dd_context
float tess_default_levels[6];
unsigned num_draw_calls;
unsigned apitrace_call_number;
};

View File

@@ -71,4 +71,27 @@ dd_get_debug_file(bool verbose)
return f;
}
static inline void
dd_parse_apitrace_marker(const char *string, int len, unsigned *call_number)
{
unsigned num;
char *s;
if (len <= 0)
return;
/* Make it zero-terminated. */
s = alloca(len + 1);
memcpy(s, string, len);
s[len] = 0;
/* Parse the number. */
errno = 0;
num = strtol(s, NULL, 10);
if (errno)
return;
*call_number = num;
}
#endif /* DD_UTIL_H */