diff options
-rw-r--r-- | overlay/gpu-perf.h | 2 | ||||
-rw-r--r-- | overlay/overlay.c | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/overlay/gpu-perf.h b/overlay/gpu-perf.h index fae60bcb..23eba2fa 100644 --- a/overlay/gpu-perf.h +++ b/overlay/gpu-perf.h @@ -53,6 +53,8 @@ struct gpu_perf { uint64_t wait_time; uint32_t nr_sema; + + time_t show; } *comm; struct gpu_perf_time { struct gpu_perf_time *next; diff --git a/overlay/overlay.c b/overlay/overlay.c index b6ae1c94..19d26e3c 100644 --- a/overlay/overlay.c +++ b/overlay/overlay.c @@ -344,6 +344,16 @@ static void show_gpu_perf(struct overlay_context *ctx, struct overlay_gpu_perf * return; } + if (gp->gpu_perf.comm == NULL) { + cairo_text_extents_t extents; + cairo_text_extents(ctx->cr, gp->gpu_perf.error, &extents); + cairo_move_to(ctx->cr, + ctx->width/2+HALF_PAD + (ctx->width/2-SIZE_PAD - extents.width)/2., + PAD + (ctx->height/2-SIZE_PAD + extents.height)/2.); + cairo_show_text(ctx->cr, "idle"); + return; + } + y = PAD + 12 - 2; x = ctx->width/2 + HALF_PAD; @@ -411,6 +421,7 @@ static void show_gpu_perf(struct overlay_context *ctx, struct overlay_gpu_perf * continue; len += sprintf(buf + len, "%s %d%s", need_comma ? "," : "", comm->nr_requests[n], ring_name[n]); need_comma = true; + comm->show = ctx->time; } if (comm->wait_time) { if (comm->wait_time > 1000*1000) { @@ -428,6 +439,7 @@ static void show_gpu_perf(struct overlay_context *ctx, struct overlay_gpu_perf * } need_comma = true; comm->wait_time = 0; + comm->show = ctx->time; } if (comm->nr_sema) { len += sprintf(buf + len, "%s %d syncs", @@ -435,6 +447,7 @@ static void show_gpu_perf(struct overlay_context *ctx, struct overlay_gpu_perf * comm->nr_sema); need_comma = true; comm->nr_sema = 0; + comm->show = ctx->time; } if (comm->user_data) { @@ -452,7 +465,8 @@ static void show_gpu_perf(struct overlay_context *ctx, struct overlay_gpu_perf * skip_comm: memset(comm->nr_requests, 0, sizeof(comm->nr_requests)); - if (strcmp(comm->name, get_comm(comm->pid, buf, sizeof(buf)))) { + if (comm->show < ctx->time - 10 || + strcmp(comm->name, get_comm(comm->pid, buf, sizeof(buf)))) { *prev = comm->next; if (comm->user_data) { chart_fini(comm->user_data); |