diff options
author | Murloc Knight <murlockkinght@gmail.com> | 2020-09-22 18:54:15 +0700 |
---|---|---|
committer | cgzones <cgzones@googlemail.com> | 2020-10-31 18:51:53 +0100 |
commit | ab17ef4dc0a306b7481cb47149b1c25f7f200932 (patch) | |
tree | e7e0c8de0788ec3d3a2f20ab0b510df1fc071c61 /linux/ZramMeter.c | |
parent | 43d274a6179846e5dfaf1bd0b75b57f6e65a8e88 (diff) |
Zram Meter feature
Diffstat (limited to 'linux/ZramMeter.c')
-rw-r--r-- | linux/ZramMeter.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/linux/ZramMeter.c b/linux/ZramMeter.c new file mode 100644 index 00000000..f855488e --- /dev/null +++ b/linux/ZramMeter.c @@ -0,0 +1,75 @@ +#include "ZramMeter.h" + +#include "CRT.h" +#include "Meter.h" +#include "Platform.h" + +static const int ZramMeter_attributes[] = { + ZRAM +}; + +static void ZramMeter_updateValues(Meter* this, char* buffer, int size) { + int written; + + Platform_setZramValues(this); + + /* on print bar for compressed data size, not uncompressed */ + this->curItems = 1; + + written = Meter_humanUnit(buffer, this->values[0], size); + buffer += written; + size -= written; + if(size <= 0) { + return; + } + *buffer++ = '('; + size--; + if(size <= 0) { + return; + } + written = Meter_humanUnit(buffer, this->values[1], size); + buffer += written; + size -= written; + if(size <= 0) { + return; + } + *buffer++ = ')'; + size--; + if ((size -= written) > 0) { + *buffer++ = '/'; + size--; + Meter_humanUnit(buffer, this->total, size); + } +} + +static void ZramMeter_display(const Object* cast, RichString* out) { + char buffer[50]; + const Meter* this = (const Meter*)cast; + RichString_write(out, CRT_colors[METER_TEXT], ":"); + Meter_humanUnit(buffer, this->total, sizeof(buffer)); + + RichString_append(out, CRT_colors[METER_VALUE], buffer); + Meter_humanUnit(buffer, this->values[0], sizeof(buffer)); + RichString_append(out, CRT_colors[METER_TEXT], " used:"); + RichString_append(out, CRT_colors[METER_VALUE], buffer); + + Meter_humanUnit(buffer, this->values[1], sizeof(buffer)); + RichString_append(out, CRT_colors[METER_TEXT], " uncompressed:"); + RichString_append(out, CRT_colors[METER_VALUE], buffer); +} + +const MeterClass ZramMeter_class = { + .super = { + .extends = Class(Meter), + .delete = Meter_delete, + .display = ZramMeter_display, + }, + .updateValues = ZramMeter_updateValues, + .defaultMode = BAR_METERMODE, + .maxItems = 2, + .total = 100.0, + .attributes = ZramMeter_attributes, + .name = "Zram", + .uiName = "Zram", + .caption = "zrm" +}; |