mirror of https://github.com/xzeldon/htop.git
LoadMeter: dynamically adjust color and total of bar
Change the color and total based on the actual 1min load value: < 1 : green and total of 1.0 < cpu-count : yellow and total of cpu-count else : red and total of 2*cpu-count Closes: #32
This commit is contained in:
parent
d609c04fe4
commit
2c06566405
|
@ -24,8 +24,36 @@ static const int LoadMeter_attributes[] = {
|
||||||
LOAD
|
LOAD
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const int OK_attributes[] = {
|
||||||
|
METER_VALUE_OK
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int Medium_attributes[] = {
|
||||||
|
METER_VALUE_WARN
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int High_attributes[] = {
|
||||||
|
METER_VALUE_ERROR
|
||||||
|
};
|
||||||
|
|
||||||
static void LoadAverageMeter_updateValues(Meter* this, char* buffer, size_t size) {
|
static void LoadAverageMeter_updateValues(Meter* this, char* buffer, size_t size) {
|
||||||
Platform_getLoadAverage(&this->values[0], &this->values[1], &this->values[2]);
|
Platform_getLoadAverage(&this->values[0], &this->values[1], &this->values[2]);
|
||||||
|
|
||||||
|
// only show bar for 1min value
|
||||||
|
this->curItems = 1;
|
||||||
|
|
||||||
|
// change bar color and total based on value
|
||||||
|
if (this->values[0] < 1.0) {
|
||||||
|
this->curAttributes = OK_attributes;
|
||||||
|
this->total = 1.0;
|
||||||
|
} else if (this->values[0] < this->pl->cpuCount) {
|
||||||
|
this->curAttributes = Medium_attributes;
|
||||||
|
this->total = this->pl->cpuCount;
|
||||||
|
} else {
|
||||||
|
this->curAttributes = High_attributes;
|
||||||
|
this->total = 2 * this->pl->cpuCount;
|
||||||
|
}
|
||||||
|
|
||||||
xSnprintf(buffer, size, "%.2f/%.2f/%.2f", this->values[0], this->values[1], this->values[2]);
|
xSnprintf(buffer, size, "%.2f/%.2f/%.2f", this->values[0], this->values[1], this->values[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,9 +71,19 @@ static void LoadAverageMeter_display(const Object* cast, RichString* out) {
|
||||||
static void LoadMeter_updateValues(Meter* this, char* buffer, size_t size) {
|
static void LoadMeter_updateValues(Meter* this, char* buffer, size_t size) {
|
||||||
double five, fifteen;
|
double five, fifteen;
|
||||||
Platform_getLoadAverage(&this->values[0], &five, &fifteen);
|
Platform_getLoadAverage(&this->values[0], &five, &fifteen);
|
||||||
if (this->values[0] > this->total) {
|
|
||||||
this->total = this->values[0];
|
// change bar color and total based on value
|
||||||
|
if (this->values[0] < 1.0) {
|
||||||
|
this->curAttributes = OK_attributes;
|
||||||
|
this->total = 1.0;
|
||||||
|
} else if (this->values[0] < this->pl->cpuCount) {
|
||||||
|
this->curAttributes = Medium_attributes;
|
||||||
|
this->total = this->pl->cpuCount;
|
||||||
|
} else {
|
||||||
|
this->curAttributes = High_attributes;
|
||||||
|
this->total = 2 * this->pl->cpuCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
xSnprintf(buffer, size, "%.2f", this->values[0]);
|
xSnprintf(buffer, size, "%.2f", this->values[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
4
Meter.c
4
Meter.c
|
@ -39,6 +39,7 @@ Meter* Meter_new(const struct ProcessList_* pl, int param, const MeterClass* typ
|
||||||
this->param = param;
|
this->param = param;
|
||||||
this->pl = pl;
|
this->pl = pl;
|
||||||
this->curItems = type->maxItems;
|
this->curItems = type->maxItems;
|
||||||
|
this->curAttributes = NULL;
|
||||||
this->values = type->maxItems ? xCalloc(type->maxItems, sizeof(double)) : NULL;
|
this->values = type->maxItems ? xCalloc(type->maxItems, sizeof(double)) : NULL;
|
||||||
this->total = type->total;
|
this->total = type->total;
|
||||||
this->caption = xStrdup(type->caption);
|
this->caption = xStrdup(type->caption);
|
||||||
|
@ -252,7 +253,8 @@ static void BarMeterMode_draw(Meter* this, int x, int y, int w) {
|
||||||
// ...then print the buffer.
|
// ...then print the buffer.
|
||||||
offset = 0;
|
offset = 0;
|
||||||
for (uint8_t i = 0; i < this->curItems; i++) {
|
for (uint8_t i = 0; i < this->curItems; i++) {
|
||||||
RichString_setAttrn(&bar, CRT_colors[Meter_attributes(this)[i]], startPos + offset, startPos + offset + blockSizes[i] - 1);
|
int attr = this->curAttributes ? this->curAttributes[i] : Meter_attributes(this)[i];
|
||||||
|
RichString_setAttrn(&bar, CRT_colors[attr], startPos + offset, startPos + offset + blockSizes[i] - 1);
|
||||||
RichString_printoffnVal(bar, y, x + offset, startPos + offset, MINIMUM(blockSizes[i], w - offset));
|
RichString_printoffnVal(bar, y, x + offset, startPos + offset, MINIMUM(blockSizes[i], w - offset));
|
||||||
offset += blockSizes[i];
|
offset += blockSizes[i];
|
||||||
offset = CLAMP(offset, 0, w);
|
offset = CLAMP(offset, 0, w);
|
||||||
|
|
Loading…
Reference in New Issue