From 9ee72568dc36e2c83add9c602387509909f3d292 Mon Sep 17 00:00:00 2001 From: multi Date: Thu, 24 Sep 2020 20:56:40 +0100 Subject: CPUMeter: add octuple-column CPU meters. This is a straightforward extension of the existing multi-column CPU meter code, which now allows for up CPU meters to be displayed in up to 16 columns. This also adds the meter declarations to all the platform-specific code. --- CPUMeter.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++ CPUMeter.h | 6 +++++ darwin/Platform.c | 3 +++ dragonflybsd/Platform.c | 3 +++ freebsd/Platform.c | 3 +++ linux/Platform.c | 3 +++ openbsd/Platform.c | 3 +++ solaris/Platform.c | 3 +++ unsupported/Platform.c | 3 +++ 9 files changed, 96 insertions(+) diff --git a/CPUMeter.c b/CPUMeter.c index ccb924a3..c5e27124 100644 --- a/CPUMeter.c +++ b/CPUMeter.c @@ -192,6 +192,14 @@ static void QuadColCPUsMeter_updateMode(Meter* this, int mode) { CPUMeterCommonUpdateMode(this, mode, 4); } +static void OctoColCPUsMeter_init(Meter* this) { + CPUMeterCommonInit(this, 8); +} + +static void OctoColCPUsMeter_updateMode(Meter* this, int mode) { + CPUMeterCommonUpdateMode(this, mode, 8); +} + static void CPUMeterCommonDraw(Meter* this, int x, int y, int w, int ncol) { Meter** meters = (Meter**) this->drawData; int start, count; @@ -215,6 +223,10 @@ static void QuadColCPUsMeter_draw(Meter* this, int x, int y, int w) { CPUMeterCommonDraw(this, x, y, w, 4); } +static void OctoColCPUsMeter_draw(Meter* this, int x, int y, int w) { + CPUMeterCommonDraw(this, x, y, w, 8); +} + static void SingleColCPUsMeter_draw(Meter* this, int x, int y, int w) { Meter** meters = (Meter**) this->drawData; @@ -414,3 +426,60 @@ MeterClass RightCPUs4Meter_class = { .updateMode = QuadColCPUsMeter_updateMode, .done = AllCPUsMeter_done }; + +MeterClass AllCPUs8Meter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, + .total = 100.0, + .attributes = CPUMeter_attributes, + .name = "AllCPUs8", + .uiName = "CPUs (1-8/8)", + .description = "CPUs (1-8/8): all CPUs in 8 shorter columns", + .caption = "CPU", + .draw = OctoColCPUsMeter_draw, + .init = OctoColCPUsMeter_init, + .updateMode = OctoColCPUsMeter_updateMode, + .done = AllCPUsMeter_done +}; + +MeterClass LeftCPUs8Meter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, + .total = 100.0, + .attributes = CPUMeter_attributes, + .name = "LeftCPUs8", + .uiName = "CPUs (1-8/16)", + .description = "CPUs (1-8/16): first half in 8 shorter columns", + .caption = "CPU", + .draw = OctoColCPUsMeter_draw, + .init = OctoColCPUsMeter_init, + .updateMode = OctoColCPUsMeter_updateMode, + .done = AllCPUsMeter_done +}; + +MeterClass RightCPUs8Meter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = CPUMeter_display + }, + .defaultMode = CUSTOM_METERMODE, + .total = 100.0, + .attributes = CPUMeter_attributes, + .name = "RightCPUs8", + .uiName = "CPUs (9-16/16)", + .description = "CPUs (9-16/16): second half in 8 shorter columns", + .caption = "CPU", + .draw = OctoColCPUsMeter_draw, + .init = OctoColCPUsMeter_init, + .updateMode = OctoColCPUsMeter_updateMode, + .done = AllCPUsMeter_done +}; diff --git a/CPUMeter.h b/CPUMeter.h index d66eefbb..62a1ddc3 100644 --- a/CPUMeter.h +++ b/CPUMeter.h @@ -44,4 +44,10 @@ extern MeterClass LeftCPUs4Meter_class; extern MeterClass RightCPUs4Meter_class; +extern MeterClass AllCPUs8Meter_class; + +extern MeterClass LeftCPUs8Meter_class; + +extern MeterClass RightCPUs8Meter_class; + #endif diff --git a/darwin/Platform.c b/darwin/Platform.c index d1401cb6..747ffefb 100644 --- a/darwin/Platform.c +++ b/darwin/Platform.c @@ -106,12 +106,15 @@ MeterClass* Platform_meterTypes[] = { &AllCPUsMeter_class, &AllCPUs2Meter_class, &AllCPUs4Meter_class, + &AllCPUs8Meter_class, &LeftCPUsMeter_class, &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, &LeftCPUs4Meter_class, &RightCPUs4Meter_class, + &LeftCPUs8Meter_class, + &RightCPUs8Meter_class, &ZfsArcMeter_class, &ZfsCompressedArcMeter_class, &BlankMeter_class, diff --git a/dragonflybsd/Platform.c b/dragonflybsd/Platform.c index da746473..7d16eda1 100644 --- a/dragonflybsd/Platform.c +++ b/dragonflybsd/Platform.c @@ -89,12 +89,15 @@ MeterClass* Platform_meterTypes[] = { &AllCPUsMeter_class, &AllCPUs2Meter_class, &AllCPUs4Meter_class, + &AllCPUs8Meter_class, &LeftCPUsMeter_class, &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, &LeftCPUs4Meter_class, &RightCPUs4Meter_class, + &LeftCPUs8Meter_class, + &RightCPUs8Meter_class, &BlankMeter_class, NULL }; diff --git a/freebsd/Platform.c b/freebsd/Platform.c index e0bce04e..318b3e12 100644 --- a/freebsd/Platform.c +++ b/freebsd/Platform.c @@ -90,12 +90,15 @@ MeterClass* Platform_meterTypes[] = { &AllCPUsMeter_class, &AllCPUs2Meter_class, &AllCPUs4Meter_class, + &AllCPUs8Meter_class, &LeftCPUsMeter_class, &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, &LeftCPUs4Meter_class, &RightCPUs4Meter_class, + &LeftCPUs8Meter_class, + &RightCPUs8Meter_class, &BlankMeter_class, &ZfsArcMeter_class, &ZfsCompressedArcMeter_class, diff --git a/linux/Platform.c b/linux/Platform.c index c579adeb..58bc3bea 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -114,12 +114,15 @@ MeterClass* Platform_meterTypes[] = { &AllCPUsMeter_class, &AllCPUs2Meter_class, &AllCPUs4Meter_class, + &AllCPUs8Meter_class, &LeftCPUsMeter_class, &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, &LeftCPUs4Meter_class, &RightCPUs4Meter_class, + &LeftCPUs8Meter_class, + &RightCPUs8Meter_class, &BlankMeter_class, &PressureStallCPUSomeMeter_class, &PressureStallIOSomeMeter_class, diff --git a/openbsd/Platform.c b/openbsd/Platform.c index 4fda8e0e..2c8bc7ae 100644 --- a/openbsd/Platform.c +++ b/openbsd/Platform.c @@ -102,12 +102,15 @@ MeterClass* Platform_meterTypes[] = { &AllCPUsMeter_class, &AllCPUs2Meter_class, &AllCPUs4Meter_class, + &AllCPUs8Meter_class, &LeftCPUsMeter_class, &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, &LeftCPUs4Meter_class, &RightCPUs4Meter_class, + &LeftCPUs8Meter_class, + &RightCPUs8Meter_class, &BlankMeter_class, NULL }; diff --git a/solaris/Platform.c b/solaris/Platform.c index dcdf0bbc..05b44462 100644 --- a/solaris/Platform.c +++ b/solaris/Platform.c @@ -99,12 +99,15 @@ MeterClass* Platform_meterTypes[] = { &AllCPUsMeter_class, &AllCPUs2Meter_class, &AllCPUs4Meter_class, + &AllCPUs8Meter_class, &LeftCPUsMeter_class, &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, &LeftCPUs4Meter_class, &RightCPUs4Meter_class, + &LeftCPUs8Meter_class, + &RightCPUs8Meter_class, &ZfsArcMeter_class, &ZfsCompressedArcMeter_class, &BlankMeter_class, diff --git a/unsupported/Platform.c b/unsupported/Platform.c index 5c22b573..b095e126 100644 --- a/unsupported/Platform.c +++ b/unsupported/Platform.c @@ -70,12 +70,15 @@ MeterClass* Platform_meterTypes[] = { &AllCPUsMeter_class, &AllCPUs2Meter_class, &AllCPUs4Meter_class, + &AllCPUs8Meter_class, &LeftCPUsMeter_class, &RightCPUsMeter_class, &LeftCPUs2Meter_class, &RightCPUs2Meter_class, &LeftCPUs4Meter_class, &RightCPUs4Meter_class, + &LeftCPUs8Meter_class, + &RightCPUs8Meter_class, &BlankMeter_class, NULL }; -- cgit v1.2.3