summaryrefslogtreecommitdiffstats
path: root/CPUMeter.c
diff options
context:
space:
mode:
authorArnavion <arnavion@gmail.com>2019-08-09 21:34:48 -0700
committerArnavion <arnavion@gmail.com>2019-08-09 21:34:48 -0700
commit4b0600d8f8f1f6aaae6fc2e59e8697ff8779cf64 (patch)
treedb0ed0d99d936058105a431371a3137a5f87dd40 /CPUMeter.c
parent402e46bb82964366746b86d77eb5afa69c279539 (diff)
Add new display option to also show CPU frequency in CPU meters.
The option is only implemented on Linux. On other platforms, and on Linuxes that do not expose the relevant sysfs file, the frequency will be 0. The "CPU average" meter does not show a frequency, only the individual per-CPU meters.
Diffstat (limited to 'CPUMeter.c')
-rw-r--r--CPUMeter.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/CPUMeter.c b/CPUMeter.c
index de5490df..6f9419b5 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -28,7 +28,8 @@ typedef enum {
CPU_METER_STEAL = 5,
CPU_METER_GUEST = 6,
CPU_METER_IOWAIT = 7,
- CPU_METER_ITEMCOUNT = 8, // number of entries in this enum
+ CPU_METER_FREQUENCY = 8,
+ CPU_METER_ITEMCOUNT = 9, // number of entries in this enum
} CPUMeterValues;
}*/
@@ -63,7 +64,22 @@ static void CPUMeter_updateValues(Meter* this, char* buffer, int size) {
}
memset(this->values, 0, sizeof(double) * CPU_METER_ITEMCOUNT);
double percent = Platform_setCPUValues(this, cpu);
- xSnprintf(buffer, size, "%5.1f%%", percent);
+ if (cpu != 0 && this->pl->settings->showCPUFrequency) {
+ /* Initial frequency is in KHz. Divide it by 1024 till it's less than 1024, and emit unit accordingly */
+ double cpuFrequency = this->values[CPU_METER_FREQUENCY];
+ char unit = 'K';
+ if (cpuFrequency > 1024) {
+ cpuFrequency /= 1024;
+ unit = 'M';
+ }
+ if (cpuFrequency > 1024) {
+ cpuFrequency /= 1024;
+ unit = 'G';
+ }
+ xSnprintf(buffer, size, "%5.1f%% %.1f%cHz", percent, cpuFrequency, unit);
+ } else {
+ xSnprintf(buffer, size, "%5.1f%%", percent);
+ }
}
static void CPUMeter_display(Object* cast, RichString* out) {

© 2014-2024 Faster IT GmbH | imprint | privacy policy