summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--overlay/gpu-perf.h2
-rw-r--r--overlay/overlay.c16
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);