From 69f439eff387a6ecb52734e400b297a3c85f2285 Mon Sep 17 00:00:00 2001 From: Daniel Lange Date: Tue, 21 Sep 2021 08:35:19 +0200 Subject: New upstream version 3.1.0 --- CPUMeter.c | 154 ++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 102 insertions(+), 52 deletions(-) (limited to 'CPUMeter.c') diff --git a/CPUMeter.c b/CPUMeter.c index d84e4db..28fb730 100644 --- a/CPUMeter.c +++ b/CPUMeter.c @@ -10,7 +10,6 @@ in the source distribution for its full text. #include "CPUMeter.h" #include -#include #include #include @@ -35,37 +34,48 @@ static const int CPUMeter_attributes[] = { }; typedef struct CPUMeterData_ { - int cpus; + unsigned int cpus; Meter** meters; } CPUMeterData; static void CPUMeter_init(Meter* this) { - int cpu = this->param; - if (this->pl->cpuCount > 1) { + unsigned int cpu = this->param; + if (cpu == 0) { + Meter_setCaption(this, "Avg"); + } else if (this->pl->activeCPUs > 1) { char caption[10]; - xSnprintf(caption, sizeof(caption), "%3d", Settings_cpuId(this->pl->settings, cpu - 1)); + xSnprintf(caption, sizeof(caption), "%3u", Settings_cpuId(this->pl->settings, cpu - 1)); Meter_setCaption(this, caption); } - if (this->param == 0) - Meter_setCaption(this, "Avg"); } -static void CPUMeter_updateValues(Meter* this, char* buffer, size_t size) { - int cpu = this->param; - if (cpu > this->pl->cpuCount) { - xSnprintf(buffer, size, "absent"); - for (uint8_t i = 0; i < this->curItems; i++) - this->values[i] = 0; +// Custom uiName runtime logic to include the param (processor) +static void CPUMeter_getUiName(const Meter* this, char* buffer, size_t length) { + if (this->param > 0) + xSnprintf(buffer, length, "%s %u", Meter_uiName(this), this->param); + else + xSnprintf(buffer, length, "%s", Meter_uiName(this)); +} + +static void CPUMeter_updateValues(Meter* this) { + memset(this->values, 0, sizeof(double) * CPU_METER_ITEMCOUNT); + + unsigned int cpu = this->param; + if (cpu > this->pl->existingCPUs) { + xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "absent"); + return; + } + + double percent = Platform_setCPUValues(this, cpu); + if (isnan(percent)) { + xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "offline"); return; } - memset(this->values, 0, sizeof(double) * CPU_METER_ITEMCOUNT); char cpuUsageBuffer[8] = { 0 }; char cpuFrequencyBuffer[16] = { 0 }; char cpuTemperatureBuffer[16] = { 0 }; - double percent = Platform_setCPUValues(this, cpu); - if (this->pl->settings->showCPUUsage) { xSnprintf(cpuUsageBuffer, sizeof(cpuUsageBuffer), "%.1f%%", percent); } @@ -79,7 +89,7 @@ static void CPUMeter_updateValues(Meter* this, char* buffer, size_t size) { } } - #ifdef HAVE_SENSORS_SENSORS_H + #ifdef BUILD_WITH_CPU_TEMP if (this->pl->settings->showCPUTemperature) { double cpuTemperature = this->values[CPU_METER_TEMPERATURE]; if (isnan(cpuTemperature)) @@ -91,7 +101,7 @@ static void CPUMeter_updateValues(Meter* this, char* buffer, size_t size) { } #endif - xSnprintf(buffer, size, "%s%s%s%s%s", + xSnprintf(this->txtBuffer, sizeof(this->txtBuffer), "%s%s%s%s%s", cpuUsageBuffer, (cpuUsageBuffer[0] && (cpuFrequencyBuffer[0] || cpuTemperatureBuffer[0])) ? " " : "", cpuFrequencyBuffer, @@ -101,75 +111,82 @@ static void CPUMeter_updateValues(Meter* this, char* buffer, size_t size) { static void CPUMeter_display(const Object* cast, RichString* out) { char buffer[50]; + int len; const Meter* this = (const Meter*)cast; - RichString_prune(out); - if (this->param > this->pl->cpuCount) { - RichString_appendAscii(out, CRT_colors[METER_TEXT], "absent"); + + if (this->param > this->pl->existingCPUs) { + RichString_appendAscii(out, CRT_colors[METER_SHADOW], " absent"); return; } - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NORMAL]); + + if (this->curItems == 0) { + RichString_appendAscii(out, CRT_colors[METER_SHADOW], " offline"); + return; + } + + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NORMAL]); RichString_appendAscii(out, CRT_colors[METER_TEXT], ":"); - RichString_appendAscii(out, CRT_colors[CPU_NORMAL], buffer); + RichString_appendnAscii(out, CRT_colors[CPU_NORMAL], buffer, len); if (this->pl->settings->detailedCPUTime) { - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]); + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "sy:"); - RichString_appendAscii(out, CRT_colors[CPU_SYSTEM], buffer); - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]); + RichString_appendnAscii(out, CRT_colors[CPU_SYSTEM], buffer, len); + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "ni:"); - RichString_appendAscii(out, CRT_colors[CPU_NICE_TEXT], buffer); - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IRQ]); + RichString_appendnAscii(out, CRT_colors[CPU_NICE_TEXT], buffer, len); + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IRQ]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "hi:"); - RichString_appendAscii(out, CRT_colors[CPU_IRQ], buffer); - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_SOFTIRQ]); + RichString_appendnAscii(out, CRT_colors[CPU_IRQ], buffer, len); + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_SOFTIRQ]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "si:"); - RichString_appendAscii(out, CRT_colors[CPU_SOFTIRQ], buffer); + RichString_appendnAscii(out, CRT_colors[CPU_SOFTIRQ], buffer, len); if (!isnan(this->values[CPU_METER_STEAL])) { - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", 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_appendAscii(out, CRT_colors[CPU_STEAL], buffer); + RichString_appendnAscii(out, CRT_colors[CPU_STEAL], buffer, len); } if (!isnan(this->values[CPU_METER_GUEST])) { - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", 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_appendAscii(out, CRT_colors[CPU_GUEST], buffer); + RichString_appendnAscii(out, CRT_colors[CPU_GUEST], buffer, len); } - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IOWAIT]); + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_IOWAIT]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "wa:"); - RichString_appendAscii(out, CRT_colors[CPU_IOWAIT], buffer); + RichString_appendnAscii(out, CRT_colors[CPU_IOWAIT], buffer, len); } else { - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]); + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_KERNEL]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "sys:"); - RichString_appendAscii(out, CRT_colors[CPU_SYSTEM], buffer); - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]); + RichString_appendnAscii(out, CRT_colors[CPU_SYSTEM], buffer, len); + len = xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", this->values[CPU_METER_NICE]); RichString_appendAscii(out, CRT_colors[METER_TEXT], "low:"); - RichString_appendAscii(out, CRT_colors[CPU_NICE_TEXT], buffer); + RichString_appendnAscii(out, CRT_colors[CPU_NICE_TEXT], buffer, len); if (!isnan(this->values[CPU_METER_IRQ])) { - xSnprintf(buffer, sizeof(buffer), "%5.1f%% ", 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_appendAscii(out, CRT_colors[CPU_GUEST], buffer); + RichString_appendnAscii(out, CRT_colors[CPU_GUEST], buffer, len); } } - #ifdef HAVE_SENSORS_SENSORS_H + #ifdef BUILD_WITH_CPU_TEMP if (this->pl->settings->showCPUTemperature) { char cpuTemperatureBuffer[10]; double cpuTemperature = this->values[CPU_METER_TEMPERATURE]; if (isnan(cpuTemperature)) { - xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "N/A"); + len = xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "N/A"); } else if (this->pl->settings->degreeFahrenheit) { - xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%5.1f%sF", cpuTemperature * 9 / 5 + 32, CRT_degreeSign); + len = xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%5.1f%sF", cpuTemperature * 9 / 5 + 32, CRT_degreeSign); } else { - xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%5.1f%sC", cpuTemperature, CRT_degreeSign); + len = xSnprintf(cpuTemperatureBuffer, sizeof(cpuTemperatureBuffer), "%5.1f%sC", cpuTemperature, CRT_degreeSign); } RichString_appendAscii(out, CRT_colors[METER_TEXT], "temp:"); - RichString_appendWide(out, CRT_colors[METER_VALUE], cpuTemperatureBuffer); + RichString_appendnWide(out, CRT_colors[METER_VALUE], cpuTemperatureBuffer, len); } #endif } -static void AllCPUsMeter_getRange(Meter* this, int* start, int* count) { - CPUMeterData* data = this->meterData; - int cpus = data->cpus; +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]) { default: case 'A': // All @@ -187,8 +204,17 @@ static void AllCPUsMeter_getRange(Meter* this, int* start, int* count) { } } +static void AllCPUsMeter_updateValues(Meter* this) { + CPUMeterData* data = this->meterData; + Meter** meters = data->meters; + int start, count; + AllCPUsMeter_getRange(this, &start, &count); + for (int i = 0; i < count; i++) + Meter_updateValues(meters[i]); +} + static void CPUMeterCommonInit(Meter* this, int ncol) { - int cpus = this->pl->cpuCount; + unsigned int cpus = this->pl->existingCPUs; CPUMeterData* data = this->meterData; if (!data) { data = this->meterData = xMalloc(sizeof(CPUMeterData)); @@ -316,6 +342,7 @@ const MeterClass CPUMeter_class = { .display = CPUMeter_display }, .updateValues = CPUMeter_updateValues, + .getUiName = CPUMeter_getUiName, .defaultMode = BAR_METERMODE, .maxItems = CPU_METER_ITEMCOUNT, .total = 100.0, @@ -332,6 +359,7 @@ const MeterClass AllCPUsMeter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, .total = 100.0, .attributes = CPUMeter_attributes, @@ -351,7 +379,9 @@ const MeterClass AllCPUs2Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "AllCPUs2", @@ -370,7 +400,9 @@ const MeterClass LeftCPUsMeter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs", @@ -389,7 +421,9 @@ const MeterClass RightCPUsMeter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs", @@ -408,7 +442,9 @@ const MeterClass LeftCPUs2Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs2", @@ -427,7 +463,9 @@ const MeterClass RightCPUs2Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs2", @@ -446,7 +484,9 @@ const MeterClass AllCPUs4Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "AllCPUs4", @@ -465,7 +505,9 @@ const MeterClass LeftCPUs4Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs4", @@ -484,7 +526,9 @@ const MeterClass RightCPUs4Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs4", @@ -503,7 +547,9 @@ const MeterClass AllCPUs8Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "AllCPUs8", @@ -522,7 +568,9 @@ const MeterClass LeftCPUs8Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "LeftCPUs8", @@ -541,7 +589,9 @@ const MeterClass RightCPUs8Meter_class = { .delete = Meter_delete, .display = CPUMeter_display }, + .updateValues = AllCPUsMeter_updateValues, .defaultMode = CUSTOM_METERMODE, + .isMultiColumn = true, .total = 100.0, .attributes = CPUMeter_attributes, .name = "RightCPUs8", -- cgit v1.2.3