aboutsummaryrefslogtreecommitdiffstats
path: root/CPUMeter.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2016-04-11 13:00:29 +0200
committerDaniel Lange <DLange@git.local>2016-04-11 13:00:29 +0200
commiteaf11cc12a1aa4b050a8a1e7ea3770d3d9c81e95 (patch)
tree833f3fae6e3604a439f909c245a6e35f574997d7 /CPUMeter.c
parent283707c5e5bc436b78ea23bf5500cb6b16a01148 (diff)
downloaddebian_htop-eaf11cc12a1aa4b050a8a1e7ea3770d3d9c81e95.tar.gz
debian_htop-eaf11cc12a1aa4b050a8a1e7ea3770d3d9c81e95.tar.bz2
debian_htop-eaf11cc12a1aa4b050a8a1e7ea3770d3d9c81e95.zip
Imported Upstream version 1.0upstream/1.0
Diffstat (limited to 'CPUMeter.c')
-rw-r--r--CPUMeter.c169
1 files changed, 148 insertions, 21 deletions
diff --git a/CPUMeter.c b/CPUMeter.c
index a1144ea..f2a4fe3 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -1,6 +1,6 @@
/*
htop - CPUMeter.c
-(C) 2004-2010 Hisham H. Muhammad
+(C) 2004-2011 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
@@ -33,7 +33,7 @@ static void CPUMeter_init(Meter* this) {
int cpu = this->param;
if (this->pl->cpuCount > 1) {
char caption[10];
- sprintf(caption, "%-3d", cpu);
+ sprintf(caption, "%-3d", ProcessList_cpuId(this->pl, cpu - 1));
Meter_setCaption(this, caption);
}
if (this->param == 0)
@@ -122,35 +122,91 @@ static void CPUMeter_display(Object* cast, RichString* out) {
}
}
+static void AllCPUsMeter_getRange(Meter* this, int* start, int* count) {
+ int cpus = this->pl->cpuCount;
+ switch(this->type->name[0]) {
+ default:
+ case 'A': // All
+ *start = 0;
+ *count = cpus;
+ break;
+ case 'L': // First Half
+ *start = 0;
+ *count = (cpus+1) / 2;
+ break;
+ case 'R': // Second Half
+ *start = (cpus+1) / 2;
+ *count = cpus / 2;
+ break;
+ }
+}
+
static void AllCPUsMeter_init(Meter* this) {
int cpus = this->pl->cpuCount;
- this->drawBuffer = malloc(sizeof(Meter*) * cpus);
- Meter** meters = (Meter**) this->drawBuffer;
- for (int i = 0; i < cpus; i++)
- meters[i] = Meter_new(this->pl, i+1, &CPUMeter);
- this->h = cpus;
- this->mode = BAR_METERMODE;
+ if (!this->drawData)
+ this->drawData = calloc(sizeof(Meter*), cpus);
+ Meter** meters = (Meter**) this->drawData;
+ int start, count;
+ AllCPUsMeter_getRange(this, &start, &count);
+ for (int i = 0; i < count; i++) {
+ if (!meters[i])
+ meters[i] = Meter_new(this->pl, start+i+1, &CPUMeter);
+ meters[i]->type->init(meters[i]);
+ }
+ if (this->mode == 0)
+ this->mode = BAR_METERMODE;
+ int h = Meter_modes[this->mode]->h;
+ if (strchr(this->type->name, '2'))
+ this->h = h * ((count+1) / 2);
+ else
+ this->h = h * count;
}
static void AllCPUsMeter_done(Meter* this) {
- int cpus = this->pl->cpuCount;
- Meter** meters = (Meter**) this->drawBuffer;
- for (int i = 0; i < cpus; i++)
+ 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_setMode(Meter* this, int mode) {
+ Meter** meters = (Meter**) this->drawData;
this->mode = mode;
- int cpus = this->pl->cpuCount;
- int h = Meter_modes[this->mode]->h;
- this->h = h * cpus;
+ int h = Meter_modes[mode]->h;
+ int start, count;
+ AllCPUsMeter_getRange(this, &start, &count);
+ for (int i = 0; i < count; i++) {
+ Meter_setMode(meters[i], mode);
+ }
+ if (strchr(this->type->name, '2'))
+ this->h = h * ((count+1) / 2);
+ else
+ this->h = h * count;
}
-static void AllCPUsMeter_draw(Meter* this, int x, int y, int w) {
- int cpus = this->pl->cpuCount;
- Meter** meters = (Meter**) this->drawBuffer;
- for (int i = 0; i < cpus; i++) {
- Meter_setMode(meters[i], this->mode);
+static void DualColCPUsMeter_draw(Meter* this, int x, int y, int w) {
+ Meter** meters = (Meter**) this->drawData;
+ int start, count;
+ 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-2)/2);
+ y += meters[i]->h;
+ }
+ y = startY;
+ for (int i = height; i < count; i++) {
+ meters[i]->draw(meters[i], x+(w-1)/2+2, y, (w-2)/2);
+ y += meters[i]->h;
+ }
+}
+
+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;
}
@@ -175,10 +231,81 @@ MeterType AllCPUsMeter = {
.total = 100.0,
.attributes = CPUMeter_attributes,
.name = "AllCPUs",
- .uiName = "All CPUs",
+ .uiName = "CPUs (1/1)",
+ .caption = "CPU",
+ .draw = SingleColCPUsMeter_draw,
+ .init = AllCPUsMeter_init,
+ .setMode = AllCPUsMeter_setMode,
+ .done = AllCPUsMeter_done
+};
+
+MeterType AllCPUs2Meter = {
+ .mode = 0,
+ .items = 1,
+ .total = 100.0,
+ .attributes = CPUMeter_attributes,
+ .name = "AllCPUs2",
+ .uiName = "CPUs (1&2/2)",
+ .caption = "CPU",
+ .draw = DualColCPUsMeter_draw,
+ .init = AllCPUsMeter_init,
+ .setMode = AllCPUsMeter_setMode,
+ .done = AllCPUsMeter_done
+};
+
+MeterType LeftCPUsMeter = {
+ .mode = 0,
+ .items = 1,
+ .total = 100.0,
+ .attributes = CPUMeter_attributes,
+ .name = "LeftCPUs",
+ .uiName = "CPUs (1/2)",
+ .caption = "CPU",
+ .draw = SingleColCPUsMeter_draw,
+ .init = AllCPUsMeter_init,
+ .setMode = AllCPUsMeter_setMode,
+ .done = AllCPUsMeter_done
+};
+
+MeterType RightCPUsMeter = {
+ .mode = 0,
+ .items = 1,
+ .total = 100.0,
+ .attributes = CPUMeter_attributes,
+ .name = "RightCPUs",
+ .uiName = "CPUs (2/2)",
+ .caption = "CPU",
+ .draw = SingleColCPUsMeter_draw,
+ .init = AllCPUsMeter_init,
+ .setMode = AllCPUsMeter_setMode,
+ .done = AllCPUsMeter_done
+};
+
+MeterType LeftCPUs2Meter = {
+ .mode = 0,
+ .items = 1,
+ .total = 100.0,
+ .attributes = CPUMeter_attributes,
+ .name = "LeftCPUs2",
+ .uiName = "CPUs (1&2/4)",
.caption = "CPU",
- .draw = AllCPUsMeter_draw,
+ .draw = DualColCPUsMeter_draw,
.init = AllCPUsMeter_init,
.setMode = AllCPUsMeter_setMode,
.done = AllCPUsMeter_done
};
+
+MeterType RightCPUs2Meter = {
+ .mode = 0,
+ .items = 1,
+ .total = 100.0,
+ .attributes = CPUMeter_attributes,
+ .name = "RightCPUs2",
+ .uiName = "CPUs (3&4/4)",
+ .caption = "CPU",
+ .draw = DualColCPUsMeter_draw,
+ .init = AllCPUsMeter_init,
+ .setMode = AllCPUsMeter_setMode,
+ .done = AllCPUsMeter_done
+};
+

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