gallium/hud: dump hud_driver_query values to files
authorEdmondo Tommasina <edmondo.tommasina@gmail.com>
Wed, 21 Dec 2016 21:58:09 +0000 (22:58 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Sat, 31 Dec 2016 23:03:06 +0000 (00:03 +0100)
Dump values for every selected data source in GALLIUM_HUD.

Every data source has its own file and the filename is
equal to the data source identifier.

Set GALLIUM_HUD_DUMP_DIR to dump values to files in this directory.

No values are dumped if the environment variable is not set, the
directory doesn't exist or the user doesn't have write access.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/auxiliary/hud/hud_context.c
src/gallium/auxiliary/hud/hud_driver_query.c
src/gallium/auxiliary/hud/hud_private.h

index ceb157adafede01f36d6a30c1829da923e2b394a..edd831a7f7b22212fed10f13080ed6ff796ae611 100644 (file)
@@ -33,6 +33,7 @@
  * Set GALLIUM_HUD=help for more info.
  */
 
+#include <inttypes.h>
 #include <signal.h>
 #include <stdio.h>
 
@@ -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);
 }
 
index 40ea120efb48f1e1a226af00b89b572e035ca6aa..23fda0187dd412ab3f1a3a8d0fd6a9d268cb2bc7 100644 (file)
@@ -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 */
 
index c6d0dbf66fbd67cf4a9bb8420c666fbd1941e8fe..fa1cd8b9a45f8bf0b4106ea1e6af704a4453944b 100644 (file)
@@ -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 {