summaryrefslogtreecommitdiffstats
path: root/CPUMeter.c
diff options
context:
space:
mode:
authormulti <multi@in-addr.xyz>2020-09-24 20:17:51 +0100
committercgzones <cgzones@googlemail.com>2020-09-28 14:35:35 +0200
commitd22f6573f3765bd8b47b8d544bbbe99007b66b9d (patch)
treeac03b135be29391a33cf6ea3f0c98cb0c422f5ed /CPUMeter.c
parente75077a9f8c325d8f30afbec235a2b255f78cdc2 (diff)
CPUMeter: refactor common CPU meter rendering code.
Instead of scanning the meter name to determine the number of columns in a CPU meter, move the common code behind some wrapper functions, and specify the number of columns as an explicit parameter when called from the wrappers. While this does add a bit of code for all the necessary wrapper functions, this should be less brittle in case of future changes to the CPU meter code.
Diffstat (limited to 'CPUMeter.c')
-rw-r--r--CPUMeter.c134
1 files changed, 69 insertions, 65 deletions
diff --git a/CPUMeter.c b/CPUMeter.c
index 482565ee..ccb924a3 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -130,16 +130,7 @@ static void AllCPUsMeter_getRange(Meter* this, int* start, int* count) {
}
}
-static int MapClassnameToColumncount(Meter* this){
- if (strchr(Meter_name(this), '4'))
- return 4;
- else if (strchr(Meter_name(this), '2'))
- return 2;
- else
- return 1;
-}
-
-static void AllCPUsMeter_init(Meter* this) {
+static void CPUMeterCommonInit(Meter *this, int ncol) {
int cpus = this->pl->cpuCount;
if (!this->drawData)
this->drawData = xCalloc(cpus, sizeof(Meter*));
@@ -154,19 +145,10 @@ static void AllCPUsMeter_init(Meter* this) {
if (this->mode == 0)
this->mode = BAR_METERMODE;
int h = Meter_modes[this->mode]->h;
- int ncol = MapClassnameToColumncount(this);
this->h = h * ((count + ncol - 1)/ ncol);
}
-static void AllCPUsMeter_done(Meter* this) {
- Meter** meters = (Meter**) this->drawData;
- int start, count;
- AllCPUsMeter_getRange(this, &start, &count);
- for (int i = 0; i < count; i++)
- Meter_delete((Object*)meters[i]);
-}
-
-static void AllCPUsMeter_updateMode(Meter* this, int mode) {
+static void CPUMeterCommonUpdateMode(Meter* this, int mode, int ncol) {
Meter** meters = (Meter**) this->drawData;
this->mode = mode;
int h = Meter_modes[mode]->h;
@@ -175,43 +157,45 @@ static void AllCPUsMeter_updateMode(Meter* this, int mode) {
for (int i = 0; i < count; i++) {
Meter_setMode(meters[i], mode);
}
- int ncol = MapClassnameToColumncount(this);
this->h = h * ((count + ncol - 1)/ ncol);
}
-static void DualColCPUsMeter_draw(Meter* this, int x, int y, int w) {
+static void AllCPUsMeter_done(Meter* this) {
Meter** meters = (Meter**) this->drawData;
int start, count;
- int pad = this->pl->settings->headerMargin ? 2 : 0;
AllCPUsMeter_getRange(this, &start, &count);
- int height = (count+1)/2;
- int startY = y;
- for (int i = 0; i < height; i++) {
- meters[i]->draw(meters[i], x, y, (w-pad)/2);
- y += meters[i]->h;
- }
- y = startY;
- for (int i = height; i < count; i++) {
- meters[i]->draw(meters[i], x+(w-1)/2+1+(pad/2), y, (w-pad)/2);
- y += meters[i]->h;
- }
+ for (int i = 0; i < count; i++)
+ Meter_delete((Object*)meters[i]);
}
-static void SingleColCPUsMeter_draw(Meter* this, int x, int y, int w) {
- Meter** meters = (Meter**) this->drawData;
- int start, count;
- AllCPUsMeter_getRange(this, &start, &count);
- for (int i = 0; i < count; i++) {
- meters[i]->draw(meters[i], x, y, w);
- y += meters[i]->h;
- }
+static void SingleColCPUsMeter_init(Meter* this) {
+ CPUMeterCommonInit(this, 1);
}
-static void MultiColCPUsMeter_draw(Meter* this, int x, int y, int w){
+static void SingleColCPUsMeter_updateMode(Meter* this, int mode) {
+ CPUMeterCommonUpdateMode(this, mode, 1);
+}
+
+static void DualColCPUsMeter_init(Meter* this) {
+ CPUMeterCommonInit(this, 2);
+}
+
+static void DualColCPUsMeter_updateMode(Meter* this, int mode) {
+ CPUMeterCommonUpdateMode(this, mode, 2);
+}
+
+static void QuadColCPUsMeter_init(Meter* this) {
+ CPUMeterCommonInit(this, 4);
+}
+
+static void QuadColCPUsMeter_updateMode(Meter* this, int mode) {
+ CPUMeterCommonUpdateMode(this, mode, 4);
+}
+
+static void CPUMeterCommonDraw(Meter* this, int x, int y, int w, int ncol) {
Meter** meters = (Meter**) this->drawData;
int start, count;
AllCPUsMeter_getRange(this, &start, &count);
- int ncol = MapClassnameToColumncount(this);
int colwidth = (w-ncol)/ncol + 1;
int diff = (w - (colwidth * ncol));
int nrows = (count + ncol - 1) / ncol;
@@ -223,6 +207,26 @@ static void MultiColCPUsMeter_draw(Meter* this, int x, int y, int w){
}
}
+static void DualColCPUsMeter_draw(Meter* this, int x, int y, int w) {
+ CPUMeterCommonDraw(this, x, y, w, 2);
+}
+
+static void QuadColCPUsMeter_draw(Meter* this, int x, int y, int w) {
+ CPUMeterCommonDraw(this, x, y, w, 4);
+}
+
+
+static void SingleColCPUsMeter_draw(Meter* this, int x, int y, int w) {
+ Meter** meters = (Meter**) this->drawData;
+ int start, count;
+ AllCPUsMeter_getRange(this, &start, &count);
+ for (int i = 0; i < count; i++) {
+ meters[i]->draw(meters[i], x, y, w);
+ y += meters[i]->h;
+ }
+}
+
+
MeterClass CPUMeter_class = {
.super = {
.extends = Class(Meter),
@@ -254,8 +258,8 @@ MeterClass AllCPUsMeter_class = {
.description = "CPUs (1/1): all CPUs",
.caption = "CPU",
.draw = SingleColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .init = SingleColCPUsMeter_init,
+ .updateMode = SingleColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -273,8 +277,8 @@ MeterClass AllCPUs2Meter_class = {
.description = "CPUs (1&2/2): all CPUs in 2 shorter columns",
.caption = "CPU",
.draw = DualColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .init = DualColCPUsMeter_init,
+ .updateMode = DualColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -292,8 +296,8 @@ MeterClass LeftCPUsMeter_class = {
.description = "CPUs (1/2): first half of list",
.caption = "CPU",
.draw = SingleColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .init = SingleColCPUsMeter_init,
+ .updateMode = SingleColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -311,8 +315,8 @@ MeterClass RightCPUsMeter_class = {
.description = "CPUs (2/2): second half of list",
.caption = "CPU",
.draw = SingleColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .init = SingleColCPUsMeter_init,
+ .updateMode = SingleColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -330,8 +334,8 @@ MeterClass LeftCPUs2Meter_class = {
.description = "CPUs (1&2/4): first half in 2 shorter columns",
.caption = "CPU",
.draw = DualColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .init = DualColCPUsMeter_init,
+ .updateMode = DualColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -349,8 +353,8 @@ MeterClass RightCPUs2Meter_class = {
.description = "CPUs (3&4/4): second half in 2 shorter columns",
.caption = "CPU",
.draw = DualColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .init = DualColCPUsMeter_init,
+ .updateMode = DualColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -367,9 +371,9 @@ MeterClass AllCPUs4Meter_class = {
.uiName = "CPUs (1&2&3&4/4)",
.description = "CPUs (1&2&3&4/4): all CPUs in 4 shorter columns",
.caption = "CPU",
- .draw = MultiColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .draw = QuadColCPUsMeter_draw,
+ .init = QuadColCPUsMeter_init,
+ .updateMode = QuadColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -386,9 +390,9 @@ MeterClass LeftCPUs4Meter_class = {
.uiName = "CPUs (1-4/8)",
.description = "CPUs (1-4/8): first half in 4 shorter columns",
.caption = "CPU",
- .draw = MultiColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .draw = QuadColCPUsMeter_draw,
+ .init = QuadColCPUsMeter_init,
+ .updateMode = QuadColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};
@@ -405,8 +409,8 @@ MeterClass RightCPUs4Meter_class = {
.uiName = "CPUs (5-8/8)",
.description = "CPUs (5-8/8): second half in 4 shorter columns",
.caption = "CPU",
- .draw = MultiColCPUsMeter_draw,
- .init = AllCPUsMeter_init,
- .updateMode = AllCPUsMeter_updateMode,
+ .draw = QuadColCPUsMeter_draw,
+ .init = QuadColCPUsMeter_init,
+ .updateMode = QuadColCPUsMeter_updateMode,
.done = AllCPUsMeter_done
};

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