mirror of https://github.com/xzeldon/htop.git
commit
f585fc9825
|
@ -25,28 +25,31 @@ int MemoryMeter_attributes[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static void MemoryMeter_setValues(Meter* this, char* buffer, int size) {
|
static void MemoryMeter_setValues(Meter* this, char* buffer, int size) {
|
||||||
|
int written;
|
||||||
Platform_setMemoryValues(this);
|
Platform_setMemoryValues(this);
|
||||||
snprintf(buffer, size, "%ld/%ldM", (long int) this->values[0] / 1024, (long int) this->total / 1024);
|
|
||||||
|
written = Meter_humanUnit(buffer, this->values[0], size);
|
||||||
|
buffer += written;
|
||||||
|
if ((size -= written) > 0) {
|
||||||
|
*buffer++ = '/';
|
||||||
|
size--;
|
||||||
|
Meter_humanUnit(buffer, this->total, size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void MemoryMeter_display(Object* cast, RichString* out) {
|
static void MemoryMeter_display(Object* cast, RichString* out) {
|
||||||
char buffer[50];
|
char buffer[50];
|
||||||
Meter* this = (Meter*)cast;
|
Meter* this = (Meter*)cast;
|
||||||
int k = 1024; const char* format = "%ldM ";
|
|
||||||
long int totalMem = this->total / k;
|
|
||||||
long int usedMem = this->values[0] / k;
|
|
||||||
long int buffersMem = this->values[1] / k;
|
|
||||||
long int cachedMem = this->values[2] / k;
|
|
||||||
RichString_write(out, CRT_colors[METER_TEXT], ":");
|
RichString_write(out, CRT_colors[METER_TEXT], ":");
|
||||||
sprintf(buffer, format, totalMem);
|
Meter_humanUnit(buffer, this->total, 50);
|
||||||
RichString_append(out, CRT_colors[METER_VALUE], buffer);
|
RichString_append(out, CRT_colors[METER_VALUE], buffer);
|
||||||
sprintf(buffer, format, usedMem);
|
Meter_humanUnit(buffer, this->values[0], 50);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], " used:");
|
RichString_append(out, CRT_colors[METER_TEXT], " used:");
|
||||||
RichString_append(out, CRT_colors[MEMORY_USED], buffer);
|
RichString_append(out, CRT_colors[MEMORY_USED], buffer);
|
||||||
sprintf(buffer, format, buffersMem);
|
Meter_humanUnit(buffer, this->values[1], 50);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], " buffers:");
|
RichString_append(out, CRT_colors[METER_TEXT], " buffers:");
|
||||||
RichString_append(out, CRT_colors[MEMORY_BUFFERS_TEXT], buffer);
|
RichString_append(out, CRT_colors[MEMORY_BUFFERS_TEXT], buffer);
|
||||||
sprintf(buffer, format, cachedMem);
|
Meter_humanUnit(buffer, this->values[2], 50);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], " cache:");
|
RichString_append(out, CRT_colors[METER_TEXT], " cache:");
|
||||||
RichString_append(out, CRT_colors[MEMORY_CACHE], buffer);
|
RichString_append(out, CRT_colors[MEMORY_CACHE], buffer);
|
||||||
}
|
}
|
||||||
|
|
28
Meter.c
28
Meter.c
|
@ -141,6 +141,34 @@ Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Meter_humanUnit(char* buffer, unsigned long int value, int size) {
|
||||||
|
const char * prefix = "KMGTPEZY";
|
||||||
|
unsigned long int powi = 1;
|
||||||
|
unsigned int written, powj = 1, precision = 2;
|
||||||
|
|
||||||
|
for(;;) {
|
||||||
|
if (value / 1024 < powi)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (prefix[1] == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
powi *= 1024;
|
||||||
|
++prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; precision > 0; precision--) {
|
||||||
|
powj *= 10;
|
||||||
|
if (value / powi < powj)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
written = snprintf(buffer, size, "%.*f%c",
|
||||||
|
precision, (double) value / powi, *prefix);
|
||||||
|
|
||||||
|
return written;
|
||||||
|
}
|
||||||
|
|
||||||
void Meter_delete(Object* cast) {
|
void Meter_delete(Object* cast) {
|
||||||
if (!cast)
|
if (!cast)
|
||||||
return;
|
return;
|
||||||
|
|
2
Meter.h
2
Meter.h
|
@ -105,6 +105,8 @@ extern MeterClass Meter_class;
|
||||||
|
|
||||||
Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type);
|
Meter* Meter_new(struct ProcessList_* pl, int param, MeterClass* type);
|
||||||
|
|
||||||
|
int Meter_humanUnit(char* buffer, unsigned long int value, int size);
|
||||||
|
|
||||||
void Meter_delete(Object* cast);
|
void Meter_delete(Object* cast);
|
||||||
|
|
||||||
void Meter_setCaption(Meter* this, const char* caption);
|
void Meter_setCaption(Meter* this, const char* caption);
|
||||||
|
|
27
SwapMeter.c
27
SwapMeter.c
|
@ -20,33 +20,30 @@ in the source distribution for its full text.
|
||||||
#include "Meter.h"
|
#include "Meter.h"
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
#define KILOBYTE 1
|
|
||||||
#define MEGABYTE 1024
|
|
||||||
#define GIGABYTE 1048576
|
|
||||||
|
|
||||||
int SwapMeter_attributes[] = {
|
int SwapMeter_attributes[] = {
|
||||||
SWAP
|
SWAP
|
||||||
};
|
};
|
||||||
|
|
||||||
/* NOTE: Value is in kilobytes */
|
static void SwapMeter_setValues(Meter* this, char* buffer, int size) {
|
||||||
static void SwapMeter_humanNumber(char* buffer, const long int* value) {
|
int written;
|
||||||
sprintf(buffer, "%ldM ", *value / MEGABYTE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SwapMeter_setValues(Meter* this, char* buffer, int len) {
|
|
||||||
Platform_setSwapValues(this);
|
Platform_setSwapValues(this);
|
||||||
snprintf(buffer, len, "%ld/%ldM", (long int) this->values[0] / MEGABYTE, (long int) this->total / MEGABYTE);
|
|
||||||
|
written = Meter_humanUnit(buffer, this->values[0], size);
|
||||||
|
buffer += written;
|
||||||
|
if ((size -= written) > 0) {
|
||||||
|
*buffer++ = '/';
|
||||||
|
size--;
|
||||||
|
Meter_humanUnit(buffer, this->total, size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SwapMeter_display(Object* cast, RichString* out) {
|
static void SwapMeter_display(Object* cast, RichString* out) {
|
||||||
char buffer[50];
|
char buffer[50];
|
||||||
Meter* this = (Meter*)cast;
|
Meter* this = (Meter*)cast;
|
||||||
long int swap = (long int) this->values[0];
|
|
||||||
long int total = (long int) this->total;
|
|
||||||
RichString_write(out, CRT_colors[METER_TEXT], ":");
|
RichString_write(out, CRT_colors[METER_TEXT], ":");
|
||||||
SwapMeter_humanNumber(buffer, &total);
|
Meter_humanUnit(buffer, this->total, 50);
|
||||||
RichString_append(out, CRT_colors[METER_VALUE], buffer);
|
RichString_append(out, CRT_colors[METER_VALUE], buffer);
|
||||||
SwapMeter_humanNumber(buffer, &swap);
|
Meter_humanUnit(buffer, this->values[0], 50);
|
||||||
RichString_append(out, CRT_colors[METER_TEXT], " used:");
|
RichString_append(out, CRT_colors[METER_TEXT], " used:");
|
||||||
RichString_append(out, CRT_colors[METER_VALUE], buffer);
|
RichString_append(out, CRT_colors[METER_VALUE], buffer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,13 +11,8 @@ in the source distribution for its full text.
|
||||||
|
|
||||||
#include "Meter.h"
|
#include "Meter.h"
|
||||||
|
|
||||||
#define KILOBYTE 1
|
|
||||||
#define MEGABYTE 1024
|
|
||||||
#define GIGABYTE 1048576
|
|
||||||
|
|
||||||
extern int SwapMeter_attributes[];
|
extern int SwapMeter_attributes[];
|
||||||
|
|
||||||
/* NOTE: Value is in kilobytes */
|
|
||||||
extern MeterClass SwapMeter_class;
|
extern MeterClass SwapMeter_class;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue