aboutsummaryrefslogtreecommitdiffstats
path: root/CPUMeter.c
diff options
context:
space:
mode:
authorDaniel Lange <DLange@git.local>2016-04-11 13:00:20 +0200
committerDaniel Lange <DLange@git.local>2016-04-11 13:00:20 +0200
commitea859f50d9438bc61ae96721a4d255b49de78653 (patch)
treebfb52a5f403ad1e86c562b2f4d608d1268fe8fcf /CPUMeter.c
parent266ab52b3a741a58fb17c48b0f7939d7c5d266de (diff)
downloaddebian_htop-ea859f50d9438bc61ae96721a4d255b49de78653.tar.gz
debian_htop-ea859f50d9438bc61ae96721a4d255b49de78653.tar.bz2
debian_htop-ea859f50d9438bc61ae96721a4d255b49de78653.zip
Imported Upstream version 0.6.2upstream/0.6.2
Diffstat (limited to 'CPUMeter.c')
-rw-r--r--CPUMeter.c121
1 files changed, 82 insertions, 39 deletions
diff --git a/CPUMeter.c b/CPUMeter.c
index c59c2c4..07c6a00 100644
--- a/CPUMeter.c
+++ b/CPUMeter.c
@@ -1,6 +1,6 @@
/*
htop - CPUMeter.c
-(C) 2004,2005 Hisham H. Muhammad
+(C) 2004-2006 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
@@ -18,17 +18,37 @@ in the source distribution for its full text.
#include "debug.h"
#include <assert.h>
-/*{
+/* private property */
+static int CPUMeter_attributes[] = { CPU_NICE, CPU_NORMAL, CPU_KERNEL };
-typedef struct CPUMeter_ CPUMeter;
-
-struct CPUMeter_ {
- Meter super;
- ProcessList* pl;
- int processor;
+/* private */
+MeterType CPUMeter = {
+ .setValues = CPUMeter_setValues,
+ .display = CPUMeter_display,
+ .mode = BAR_METERMODE,
+ .items = 3,
+ .total = 100.0,
+ .attributes = CPUMeter_attributes,
+ .name = "CPU",
+ .uiName = "CPU",
+ .caption = "CPU",
+ .init = CPUMeter_init
};
-}*/
+/* private */
+MeterType AllCPUsMeter = {
+ .mode = 0,
+ .items = 1,
+ .total = 100.0,
+ .attributes = CPUMeter_attributes,
+ .name = "AllCPUs",
+ .uiName = "All CPUs",
+ .caption = "CPU",
+ .draw = AllCPUsMeter_draw,
+ .init = AllCPUsMeter_init,
+ .setMode = AllCPUsMeter_setMode,
+ .done = AllCPUsMeter_done
+};
#ifndef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
@@ -37,50 +57,73 @@ struct CPUMeter_ {
#define MAX(a,b) ((a)>(b)?(a):(b))
#endif
-CPUMeter* CPUMeter_new(ProcessList* pl, int processor) {
- CPUMeter* this = malloc(sizeof(CPUMeter));
- char* caption;
- if (pl->processorCount == 1 || processor == 0) {
- caption = String_copy("CPU");
- } else {
- caption = (char*) malloc(4);
+void CPUMeter_init(Meter* this) {
+ int processor = this->param;
+ if (this->pl->processorCount > 1) {
+ char caption[10];
sprintf(caption, "%-3d", processor);
+ Meter_setCaption(this, caption);
}
- Meter_init((Meter*)this, NULL, caption, 3);
- ((Meter*)this)->name = malloc(20);
- sprintf(((Meter*)this)->name, "CPU(%d)", processor);
- ((Meter*)this)->attributes[0] = CPU_NICE;
- ((Meter*)this)->attributes[1] = CPU_NORMAL;
- ((Meter*)this)->attributes[2] = CPU_KERNEL;
- ((Meter*)this)->setValues = CPUMeter_setValues;
- ((Object*)this)->display = CPUMeter_display;
- ((Meter*)this)->total = 1.0;
- Meter_setMode((Meter*)this, BAR);
- this->processor = processor;
- this->pl = pl;
- return this;
+ if (this->param == 0)
+ Meter_setCaption(this, "Avg");
}
-void CPUMeter_setValues(Meter* cast) {
- CPUMeter* this = (CPUMeter*)cast;
- cast->values[0] = this->pl->nicePeriod[this->processor] / (double)this->pl->totalPeriod[this->processor];
- cast->values[1] = this->pl->userPeriod[this->processor] / (double)this->pl->totalPeriod[this->processor];
- cast->values[2] = this->pl->systemPeriod[this->processor] / (double)this->pl->totalPeriod[this->processor];
- double cpu = MIN(100.0, MAX(0.0, (cast->values[0]+cast->values[1]+cast->values[2])*100.0 ));
- snprintf(cast->displayBuffer.c, 7, "%5.1f%%", cpu );
+void CPUMeter_setValues(Meter* this, char* buffer, int size) {
+ ProcessList* pl = this->pl;
+ int processor = this->param;
+ double total = (double) pl->totalPeriod[processor];
+ this->values[0] = pl->nicePeriod[processor] / total * 100.0;
+ this->values[1] = pl->userPeriod[processor] / total * 100.0;
+ this->values[2] = pl->systemPeriod[processor] / total * 100.0;
+ double cpu = MIN(100.0, MAX(0.0, (this->values[0]+this->values[1]+this->values[2])));
+ snprintf(buffer, size, "%5.1f%%", cpu );
}
void CPUMeter_display(Object* cast, RichString* out) {
char buffer[50];
Meter* this = (Meter*)cast;
RichString_prune(out);
- sprintf(buffer, "%5.1f%% ", this->values[1] * 100.0);
+ sprintf(buffer, "%5.1f%% ", this->values[1]);
RichString_append(out, CRT_colors[METER_TEXT], ":");
RichString_append(out, CRT_colors[CPU_NORMAL], buffer);
- sprintf(buffer, "%5.1f%% ", this->values[2] * 100.0);
+ sprintf(buffer, "%5.1f%% ", this->values[2]);
RichString_append(out, CRT_colors[METER_TEXT], "sys:");
RichString_append(out, CRT_colors[CPU_KERNEL], buffer);
- sprintf(buffer, "%5.1f%% ", this->values[0] * 100.0);
+ sprintf(buffer, "%5.1f%% ", this->values[0]);
RichString_append(out, CRT_colors[METER_TEXT], "low:");
RichString_append(out, CRT_colors[CPU_NICE], buffer);
}
+
+void AllCPUsMeter_init(Meter* this) {
+ int processors = this->pl->processorCount;
+ this->drawBuffer = malloc(sizeof(Meter*) * processors);
+ Meter** meters = (Meter**) this->drawBuffer;
+ for (int i = 0; i < processors; i++)
+ meters[i] = Meter_new(this->pl, i+1, &CPUMeter);
+ this->h = processors;
+ this->mode = BAR_METERMODE;
+}
+
+void AllCPUsMeter_done(Meter* this) {
+ int processors = this->pl->processorCount;
+ Meter** meters = (Meter**) this->drawBuffer;
+ for (int i = 0; i < processors; i++)
+ Meter_delete((Object*)meters[i]);
+}
+
+void AllCPUsMeter_setMode(Meter* this, int mode) {
+ this->mode = mode;
+ int processors = this->pl->processorCount;
+ int h = Meter_modes[this->mode]->h;
+ this->h = h * processors;
+}
+
+void AllCPUsMeter_draw(Meter* this, int x, int y, int w) {
+ int processors = this->pl->processorCount;
+ Meter** meters = (Meter**) this->drawBuffer;
+ for (int i = 0; i < processors; i++) {
+ Meter_setMode(meters[i], this->mode);
+ meters[i]->draw(meters[i], x, y, w);
+ y += meters[i]->h;
+ }
+}

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