From e7372d18a1a661d8c3dba9f51e1f17b5f94171a7 Mon Sep 17 00:00:00 2001 From: Daniel Lange Date: Wed, 10 Jan 2024 11:17:08 +0100 Subject: New upstream version 3.3.0 --- CPUMeter.c | 74 +++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 27 deletions(-) (limited to 'CPUMeter.c') diff --git a/CPUMeter.c b/CPUMeter.c index 9974db9..afcddeb 100644 --- a/CPUMeter.c +++ b/CPUMeter.c @@ -9,14 +9,16 @@ in the source distribution for its full text. #include "CPUMeter.h" -#include +#include +#include #include #include #include "CRT.h" +#include "Machine.h" +#include "Macros.h" #include "Object.h" #include "Platform.h" -#include "ProcessList.h" #include "RichString.h" #include "Settings.h" #include "XUtils.h" @@ -40,11 +42,12 @@ typedef struct CPUMeterData_ { static void CPUMeter_init(Meter* this) { unsigned int cpu = this->param; + const Machine* host = this->host; if (cpu == 0) { Meter_setCaption(this, "Avg"); - } else if (this->pl->activeCPUs > 1) { + } else if (host->activeCPUs > 1) { char caption[10]; - xSnprintf(caption, sizeof(caption), "%3u", Settings_cpuId(this->pl->settings, cpu - 1)); + xSnprintf(caption, sizeof(caption), "%3u", Settings_cpuId(host->settings, cpu - 1)); Meter_setCaption(this, caption); } } @@ -60,14 +63,17 @@ static void CPUMeter_getUiName(const Meter* this, char* buffer, size_t length) { static void CPUMeter_updateValues(Meter* this) { memset(this->values, 0, sizeof(double) * CPU_METER_ITEMCOUNT); + const Machine* host = this->host; + const Settings* settings = host->settings; + unsigned int cpu = this->param; - if (cpu > this->pl->existingCPUs) { + if (cpu > host->existingCPUs) { xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "absent"); return; } double percent = Platform_setCPUValues(this, cpu); - if (isnan(percent)) { + if (!isNonnegative(percent)) { xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "offline"); return; } @@ -76,25 +82,25 @@ static void CPUMeter_updateValues(Meter* this) { char cpuFrequencyBuffer[16] = { 0 }; char cpuTemperatureBuffer[16] = { 0 }; - if (this->pl->settings->showCPUUsage) { + if (settings->showCPUUsage) { xSnprintf(cpuUsageBuffer, sizeof(cpuUsageBuffer), "%.1f%%", percent); } - if (this->pl->settings->showCPUFrequency) { + if (settings->showCPUFrequency) { double cpuFrequency = this->values[CPU_METER_FREQUENCY]; - if (isnan(cpuFrequency)) { - xSnprintf(cpuFrequencyBuffer, sizeof(cpuFrequencyBuffer), "N/A"); - } else { + if (isNonnegative(cpuFrequency)) { xSnprintf(cpuFrequencyBuffer, sizeof(cpuFrequencyBuffer), "%4uMHz", (unsigned)cpuFrequency); + } else { + xSnprintf(cpuFrequencyBuffer, sizeof(cpuFrequencyBuffer), "N/A"); } } #ifdef BUILD_WITH_CPU_TEMP - if (this->pl->settings->showCPUTemperature) { + if (settings->showCPUTemperature) { double cpuTemperature = this->values[CPU_METER_TEMPERATURE]; - if (isnan(cpuTemperature)) + if (isNaN(cpuTemperature)) xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "N/A"); - else if (this->pl->settings->degreeFahrenheit) + else if (settings->degreeFahrenheit) xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%3d%sF", (int)(cpuTemperature * 9 / 5 + 32), CRT_degreeSign); else xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%d%sC", (int)cpuTemperature, CRT_degreeSign); @@ -113,8 +119,10 @@ static void CPUMeter_display(const Object* cast, RichString* out) { char buffer[50]; int len; const Meter* this = (const Meter*)cast; + const Machine* host = this->host; + const Settings* settings = host->settings; - if (this->param > this->pl->existingCPUs) { + if (this->param > host->existingCPUs) { RichString_appendAscii(out, CRT_colors[METER_SHADOW], " absent"); return; } @@ -127,7 +135,7 @@ static void CPUMeter_display(const Object* cast, RichString* out) { len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NORMAL]); RichString_appendAscii(out, CRT_colors[METER_TEXT], ":"); RichString_appendnAscii(out, CRT_colors[CPU_NORMAL], buffer, len); - if (this->pl->settings->detailedCPUTime) { + if (settings->detailedCPUTime) { len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "sy:"); RichString_appendnAscii(out, CRT_colors[CPU_SYSTEM], buffer, len); @@ -140,12 +148,12 @@ static void CPUMeter_display(const Object* cast, RichString* out) { len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_SOFTIRQ]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "si:"); RichString_appendnAscii(out, CRT_colors[CPU_SOFTIRQ], buffer, len); - if (!isnan(this->values[CPU_METER_STEAL])) { + if (isNonnegative(this->values[CPU_METER_STEAL])) { len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_STEAL]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "st:"); RichString_appendnAscii(out, CRT_colors[CPU_STEAL], buffer, len); } - if (!isnan(this->values[CPU_METER_GUEST])) { + if (isNonnegative(this->values[CPU_METER_GUEST])) { len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_GUEST]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "gu:"); RichString_appendnAscii(out, CRT_colors[CPU_GUEST], buffer, len); @@ -160,20 +168,32 @@ static void CPUMeter_display(const Object* cast, RichString* out) { len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "low:"); RichString_appendnAscii(out, CRT_colors[CPU_NICE_TEXT], buffer, len); - if (!isnan(this->values[CPU_METER_IRQ])) { + if (isNonnegative(this->values[CPU_METER_IRQ])) { len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IRQ]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "vir:"); RichString_appendnAscii(out, CRT_colors[CPU_GUEST], buffer, len); } } + if (settings->showCPUFrequency) { + char cpuFrequencyBuffer[10]; + double cpuFrequency = this->values[CPU_METER_FREQUENCY]; + if (isNonnegative(cpuFrequency)) { + len = xSnprintf(cpuFrequencyBuffer, sizeof(cpuFrequencyBuffer), "%4uMHz ", (unsigned)cpuFrequency); + } else { + len = xSnprintf(cpuFrequencyBuffer, sizeof(cpuFrequencyBuffer), "N/A "); + } + RichString_appendAscii(out, CRT_colors[METER_TEXT], "freq: "); + RichString_appendnWide(out, CRT_colors[METER_VALUE], cpuFrequencyBuffer, len); + } + #ifdef BUILD_WITH_CPU_TEMP - if (this->pl->settings->showCPUTemperature) { + if (settings->showCPUTemperature) { char cpuTemperatureBuffer[10]; double cpuTemperature = this->values[CPU_METER_TEMPERATURE]; - if (isnan(cpuTemperature)) { + if (isNaN(cpuTemperature)) { len = xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "N/A"); - } else if (this->pl->settings->degreeFahrenheit) { + } else if (settings->degreeFahrenheit) { len = xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%5.1f%sF", cpuTemperature * 9 / 5 + 32, CRT_degreeSign); } else { len = xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%5.1f%sC", cpuTemperature, CRT_degreeSign); @@ -187,7 +207,7 @@ static void CPUMeter_display(const Object* cast, RichString* out) { static void AllCPUsMeter_getRange(const Meter* this, int* start, int* count) { const CPUMeterData* data = this->meterData; unsigned int cpus = data->cpus; - switch(Meter_name(this)[0]) { + switch (Meter_name(this)[0]) { default: case 'A': // All *start = 0; @@ -195,10 +215,10 @@ static void AllCPUsMeter_getRange(const Meter* this, int* start, int* count) { break; case 'L': // First Half *start = 0; - *count = (cpus+1) / 2; + *count = (cpus + 1) / 2; break; case 'R': // Second Half - *start = (cpus+1) / 2; + *start = (cpus + 1) / 2; *count = cpus / 2; break; } @@ -214,7 +234,7 @@ static void AllCPUsMeter_updateValues(Meter* this) { } static void CPUMeterCommonInit(Meter* this, int ncol) { - unsigned int cpus = this->pl->existingCPUs; + unsigned int cpus = this->host->existingCPUs; CPUMeterData* data = this->meterData; if (!data) { data = this->meterData = xMalloc(sizeof(CPUMeterData)); @@ -226,7 +246,7 @@ static void CPUMeterCommonInit(Meter* this, int ncol) { AllCPUsMeter_getRange(this, &start, &count); for (int i = 0; i < count; i++) { if (!meters[i]) - meters[i] = Meter_new(this->pl, start + i + 1, (const MeterClass*) Class(CPUMeter)); + meters[i] = Meter_new(this->host, start + i + 1, (const MeterClass*) Class(CPUMeter)); Meter_init(meters[i]); } -- cgit v1.2.3