diff options
-rw-r--r-- | overlay/cpu-top.c | 7 | ||||
-rw-r--r-- | overlay/cpu-top.h | 1 | ||||
-rw-r--r-- | overlay/overlay.c | 19 |
3 files changed, 23 insertions, 4 deletions
diff --git a/overlay/cpu-top.c b/overlay/cpu-top.c index c134d409..13ae70d4 100644 --- a/overlay/cpu-top.c +++ b/overlay/cpu-top.c @@ -23,6 +23,7 @@ */ #include <stdio.h> +#include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <string.h> @@ -44,7 +45,7 @@ int cpu_top_update(struct cpu_top *cpu) struct cpu_stat *s = &cpu->stat[cpu->count++&1]; struct cpu_stat *d = &cpu->stat[cpu->count&1]; uint64_t d_total, d_idle; - char buf[4096]; + char buf[4096], *b; int fd, len = -1; fd = open("/proc/stat", 0); @@ -66,6 +67,10 @@ int cpu_top_update(struct cpu_top *cpu) &s->user, &s->nice, &s->sys, &s->idle); #endif + b = strstr(buf, "procs_running"); + if (b) + cpu->nr_running = atoi(b+sizeof("procs_running")) - 1; + s->total = s->user + s->nice + s->sys + s->idle; if (cpu->count == 1) return EAGAIN; diff --git a/overlay/cpu-top.h b/overlay/cpu-top.h index c91814fd..a061a488 100644 --- a/overlay/cpu-top.h +++ b/overlay/cpu-top.h @@ -30,6 +30,7 @@ struct cpu_top { uint8_t busy; int nr_cpu; + int nr_running; int count; struct cpu_stat { diff --git a/overlay/overlay.c b/overlay/overlay.c index d270f16b..38c597e9 100644 --- a/overlay/overlay.c +++ b/overlay/overlay.c @@ -183,6 +183,8 @@ static void show_gpu_top(struct overlay_context *ctx, struct overlay_gpu_top *gt int y, y1, y2, n, update, len; cairo_pattern_t *linear; char txt[160]; + int rewind; + int do_rewind; update = gpu_top_update(>->gpu_top); @@ -222,9 +224,20 @@ static void show_gpu_top(struct overlay_context *ctx, struct overlay_gpu_top *gt y = PAD + 12 - 2; cairo_set_source_rgba(ctx->cr, 0.75, 0.25, 0.75, 1.); cairo_move_to(ctx->cr, PAD, y); - len = sprintf(txt, "CPU: %3d%% busy", gt->cpu_top.busy * gt->cpu_top.nr_cpu); - if (gt->cpu_top.nr_cpu) - sprintf(txt + len, " (%d cores)", gt->cpu_top.nr_cpu); + rewind = len = sprintf(txt, "CPU: %3d%% busy", gt->cpu_top.busy * gt->cpu_top.nr_cpu); + do_rewind = 1; + len += sprintf(txt + len, " ("); + if (gt->cpu_top.nr_cpu > 1) { + len += sprintf(txt + len, "%s%d cores", do_rewind ? "" : ", ", gt->cpu_top.nr_cpu); + do_rewind = 0; + } + if (gt->cpu_top.nr_running) { + len += sprintf(txt + len, "%s%d processes", do_rewind ? "" : ", ", gt->cpu_top.nr_running); + do_rewind = 0; + } + sprintf(txt + len, ")"); + if (do_rewind) + txt[rewind] = '\0'; cairo_show_text(ctx->cr, txt); y += 14; |