ddebug: dump context and before/after times of draws
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Sun, 22 Oct 2017 15:39:01 +0000 (17:39 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 9 Nov 2017 13:01:03 +0000 (14:01 +0100)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/ddebug/dd_draw.c
src/gallium/drivers/ddebug/dd_pipe.h

index a856d0142a1046281c066633f5379b13e8bc017d..182d6f297a1822b9cc9c040b2fbcf69a711a725d 100644 (file)
@@ -790,6 +790,11 @@ dd_free_record(struct pipe_screen *screen, struct dd_draw_record *record)
 static void
 dd_write_record(FILE *f, struct dd_draw_record *record)
 {
+   PRINT_NAMED(ptr, "pipe", record->dctx->pipe);
+   PRINT_NAMED(ns, "time before (API call)", record->time_before);
+   PRINT_NAMED(ns, "time after (driver done)", record->time_after);
+   fprintf(f, "\n");
+
    dd_dump_call(f, &record->draw_state.base, &record->call);
 
    if (record->log_page) {
@@ -1013,6 +1018,8 @@ dd_before_draw(struct dd_context *dctx, struct dd_draw_record *record)
    struct pipe_context *pipe = dctx->pipe;
    struct pipe_screen *screen = dscreen->screen;
 
+   record->time_before = os_time_get_nano();
+
    if (dscreen->timeout_ms > 0) {
       if (dscreen->flush_always && dctx->num_draw_calls >= dscreen->skip_count) {
          pipe->flush(pipe, &record->prev_bottom_of_pipe, 0);
@@ -1040,6 +1047,7 @@ dd_after_draw_async(void *data)
    struct dd_screen *dscreen = dd_screen(dctx->base.screen);
 
    record->log_page = u_log_new_page(&dctx->log);
+   record->time_after = os_time_get_nano();
 
    if (!util_queue_fence_is_signalled(&record->driver_finished))
       util_queue_fence_signal(&record->driver_finished);
index d1965be9a14a7c594e8f5d23ef2f7408dcc53738..607ebbb2b96cce8099ccbb7b013c774c8a1a9a1b 100644 (file)
@@ -224,6 +224,8 @@ struct dd_draw_record {
    struct list_head list;
    struct dd_context *dctx;
 
+   int64_t time_before;
+   int64_t time_after;
    unsigned draw_call;
 
    struct pipe_fence_handle *prev_bottom_of_pipe;