overlay: Add number of running processes to CPU display
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 27 Aug 2013 22:51:32 +0000 (23:51 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 27 Aug 2013 22:52:03 +0000 (23:52 +0100)
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
overlay/cpu-top.c
overlay/cpu-top.h
overlay/overlay.c

index c134d40..13ae70d 100644 (file)
@@ -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;
index c91814f..a061a48 100644 (file)
@@ -30,6 +30,7 @@
 struct cpu_top {
        uint8_t busy;
        int nr_cpu;
+       int nr_running;
 
        int count;
        struct cpu_stat {
index d270f16..38c597e 100644 (file)
@@ -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(&gt->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;