diff --git a/src/gallium/auxiliary/hud/hud_context.c b/src/gallium/auxiliary/hud/hud_context.c index ceb157adafe..edd831a7f7b 100644 --- a/src/gallium/auxiliary/hud/hud_context.c +++ b/src/gallium/auxiliary/hud/hud_context.c @@ -33,6 +33,7 @@ * Set GALLIUM_HUD=help for more info. */ +#include #include #include @@ -829,6 +830,9 @@ hud_graph_add_value(struct hud_graph *gr, uint64_t value) gr->current_value = value; value = value > gr->pane->ceiling ? gr->pane->ceiling : value; + if (gr->fd) + fprintf(gr->fd, "%" PRIu64 "\n", value); + if (gr->index == gr->pane->max_num_vertices) { gr->vertices[0] = 0; gr->vertices[1] = gr->vertices[(gr->index-1)*2+1]; @@ -856,6 +860,8 @@ hud_graph_destroy(struct hud_graph *graph) FREE(graph->vertices); if (graph->free_query_data) graph->free_query_data(graph->query_data); + if (graph->fd) + fclose(graph->fd); FREE(graph); } diff --git a/src/gallium/auxiliary/hud/hud_driver_query.c b/src/gallium/auxiliary/hud/hud_driver_query.c index 40ea120efb4..23fda0187dd 100644 --- a/src/gallium/auxiliary/hud/hud_driver_query.c +++ b/src/gallium/auxiliary/hud/hud_driver_query.c @@ -351,6 +351,8 @@ hud_pipe_query_install(struct hud_batch_query_context **pbq, { struct hud_graph *gr; struct query_info *info; + const char *hud_dump_dir = getenv("GALLIUM_HUD_DUMP_DIR"); + char *dump_file; gr = CALLOC_STRUCT(hud_graph); if (!gr) @@ -378,6 +380,16 @@ hud_pipe_query_install(struct hud_batch_query_context **pbq, info->result_index = result_index; } + if (hud_dump_dir && access(hud_dump_dir, W_OK) == 0) { + dump_file = malloc(strlen(hud_dump_dir) + sizeof(gr->name)); + if (dump_file) { + strcpy(dump_file, hud_dump_dir); + strcat(dump_file, gr->name); + gr->fd = fopen(dump_file, "w+"); + free(dump_file); + } + } + hud_pane_add_graph(pane, gr); pane->type = type; /* must be set before updating the max_value */ diff --git a/src/gallium/auxiliary/hud/hud_private.h b/src/gallium/auxiliary/hud/hud_private.h index c6d0dbf66fb..fa1cd8b9a45 100644 --- a/src/gallium/auxiliary/hud/hud_private.h +++ b/src/gallium/auxiliary/hud/hud_private.h @@ -48,6 +48,7 @@ struct hud_graph { unsigned num_vertices; unsigned index; /* vertex index being updated */ uint64_t current_value; + FILE *fd; }; struct hud_pane {