From edf319e53d1fb77546505e238d75160a3febe56e Mon Sep 17 00:00:00 2001 From: Benny Baumann Date: Sun, 27 Feb 2022 20:29:40 +0100 Subject: Auto-size (normalized) CPU usage columns --- Process.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'Process.c') diff --git a/Process.c b/Process.c index 4e4f2c52..77e78f04 100644 --- a/Process.c +++ b/Process.c @@ -732,22 +732,22 @@ void Process_printLeftAlignedField(RichString* str, int attr, const char* conten RichString_appendChr(str, attr, ' ', width + 1 - columns); } -void Process_printPercentage(float val, char* buffer, int n, int* attr) { +void Process_printPercentage(float val, char* buffer, int n, uint8_t width, int* attr) { if (val >= 0) { if (val < 99.9F) { if (val < 0.05F) { *attr = CRT_colors[PROCESS_SHADOW]; } - xSnprintf(buffer, n, "%4.1f ", val); + xSnprintf(buffer, n, "%*.1f ", width, val); } else { *attr = CRT_colors[PROCESS_MEGABYTES]; if (val < 100.0F) val = 100.0F; // Don't round down and display "val" as "99". - xSnprintf(buffer, n, "%4.0f ", val); + xSnprintf(buffer, n, "%*.0f ", width, val); } } else { *attr = CRT_colors[PROCESS_SHADOW]; - xSnprintf(buffer, n, " N/A "); + xSnprintf(buffer, n, "%*.*s ", width, width, "N/A"); } } @@ -888,13 +888,13 @@ void Process_writeField(const Process* this, RichString* str, ProcessField field xSnprintf(buffer, n, "%4ld ", this->nlwp); break; - case PERCENT_CPU: Process_printPercentage(this->percent_cpu, buffer, n, &attr); break; + case PERCENT_CPU: Process_printPercentage(this->percent_cpu, buffer, n, Process_fieldWidths[PERCENT_CPU], &attr); break; case PERCENT_NORM_CPU: { float cpuPercentage = this->percent_cpu / this->processList->activeCPUs; - Process_printPercentage(cpuPercentage, buffer, n, &attr); + Process_printPercentage(cpuPercentage, buffer, n, Process_fieldWidths[PERCENT_CPU], &attr); break; } - case PERCENT_MEM: Process_printPercentage(this->percent_mem, buffer, n, &attr); break; + case PERCENT_MEM: Process_printPercentage(this->percent_mem, buffer, n, 4, &attr); break; case PGRP: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->pgrp); break; case PID: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->pid); break; case PPID: xSnprintf(buffer, n, "%*d ", Process_pidDigits, this->ppid); break; @@ -1272,3 +1272,16 @@ void Process_updateFieldWidth(ProcessField key, size_t width) { else if (width > Process_fieldWidths[key]) Process_fieldWidths[key] = (uint8_t)width; } + +void Process_updateCPUFieldWidths(float percentage) { + if (percentage < 99.9) { + Process_updateFieldWidth(PERCENT_CPU, 4); + Process_updateFieldWidth(PERCENT_NORM_CPU, 4); + return; + } + + uint8_t width = ceil(log10(percentage + .2)); + + Process_updateFieldWidth(PERCENT_CPU, width); + Process_updateFieldWidth(PERCENT_NORM_CPU, width); +} -- cgit v1.2.3