summaryrefslogtreecommitdiffstats
path: root/usr.bin/top
diff options
context:
space:
mode:
authorkeramida <keramida@FreeBSD.org>2005-05-18 13:30:08 +0000
committerkeramida <keramida@FreeBSD.org>2005-05-18 13:30:08 +0000
commit0f9725e09b1113e803b8655641b23fbe9c5e7719 (patch)
tree42f2b2a54bba39dc0ab8b8514eefae075556a375 /usr.bin/top
parent4bf80fbbcff1c8b9d5088dd0d5195293ee0f09da (diff)
downloadFreeBSD-src-0f9725e09b1113e803b8655641b23fbe9c5e7719.zip
FreeBSD-src-0f9725e09b1113e803b8655641b23fbe9c5e7719.tar.gz
Merge the CPU and WCPU columns in a single %6.2f column, add a new 'C'
command that toggles between the two and update the ORDER_PCTCPU() macro to sort correctly by the visible "cpu" value. This saves 6 more columns in 80-column terminals, making things a lot better for the COMMAND column. Tested on: i386, sparc64 (panther), amd64 (sledge) Approved by: davidxu (in principle)
Diffstat (limited to 'usr.bin/top')
-rw-r--r--usr.bin/top/machine.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c
index 070ac87..335710f 100644
--- a/usr.bin/top/machine.c
+++ b/usr.bin/top/machine.c
@@ -105,20 +105,20 @@ static char io_header[] =
"%5d %-*.*s %6ld %6ld %6ld %6ld %6ld %6ld %6.2f%% %.*s"
static char smp_header_thr[] =
- " PID %-*.*s THR PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
+ " PID %-*.*s THR PRI NICE SIZE RES STATE C TIME %6s COMMAND";
static char smp_header[] =
- " PID %-*.*s " "PRI NICE SIZE RES STATE C TIME WCPU CPU COMMAND";
+ " PID %-*.*s " "PRI NICE SIZE RES STATE C TIME %6s COMMAND";
#define smp_Proc_format \
- "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s %1x%7s %5.2f%% %5.2f%% %.*s"
+ "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s %1x%7s %5.2f%% %.*s"
static char up_header_thr[] =
- " PID %-*.*s THR PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
+ " PID %-*.*s THR PRI NICE SIZE RES STATE TIME %6s COMMAND";
static char up_header[] =
- " PID %-*.*s " "PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND";
+ " PID %-*.*s " "PRI NICE SIZE RES STATE TIME %6s COMMAND";
#define up_Proc_format \
- "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s%.0d%7s %5.2f%% %5.2f%% %.*s"
+ "%5d %-*.*s %s%3d %4d%7s %6s %-6.6s%.0d%7s %5.2f%% %.*s"
/* process state names for the "STATE" column of the display */
@@ -298,17 +298,17 @@ format_header(char *uname_field)
prehead = smpmode ?
(ps.thread ? smp_header : smp_header_thr) :
(ps.thread ? up_header : up_header_thr);
+ snprintf(Header, sizeof(Header), prehead,
+ namelength, namelength, uname_field,
+ ps.wcpu ? "WCPU" : "CPU");
break;
case DISP_IO:
prehead = io_header;
+ snprintf(Header, sizeof(Header), prehead,
+ namelength, namelength, uname_field);
break;
}
-
- snprintf(Header, sizeof(Header), prehead,
- namelength, namelength, uname_field);
-
cmdlengthdelta = strlen(Header) - 7;
-
return (Header);
}
@@ -780,8 +780,7 @@ format_next_process(caddr_t handle, char *(*get_userid)(int))
status,
smpmode ? pp->ki_lastcpu : 0,
format_time(cputime),
- 100.0 * weighted_cpu(pct, pp),
- 100.0 * pct,
+ ps.wcpu ? 100.0 * weighted_cpu(pct, pp) : 100.0 * pct,
screen_width > cmdlengthdelta ?
screen_width - cmdlengthdelta :
0,
@@ -845,10 +844,17 @@ static int sorted_state[] =
};
-#define ORDERKEY_PCTCPU(a, b) do { \
- long diff = (long)(b)->ki_pctcpu - (long)(a)->ki_pctcpu; \
- if (diff != 0) \
- return (diff > 0 ? 1 : -1); \
+#define ORDERKEY_PCTCPU(a, b) do { \
+ long diff; \
+ if (ps.wcpu) \
+ diff = floor(1.0E6 * weighted_cpu(pctdouble((b)->ki_pctcpu), (b))) - \
+ floor(1.0E6 * weighted_cpu(pctdouble((a)->ki_pctcpu), (a))); \
+ else \
+ diff = (long)(b)->ki_pctcpu - (long)(a)->ki_pctcpu; \
+ /* fprintf(stderr, "XXX: wcpu %d a %p (%s) b %p (%s) foo %lf\n", \
+ ps.wcpu, (a), (a)->ki_comm, (b), (b)->ki_comm, foo); */ \
+ if (diff != 0) \
+ return (diff > 0 ? 1 : -1); \
} while (0)
#define ORDERKEY_CPTICKS(a, b) do { \
OpenPOWER on IntegriCloud