summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2015-11-30 18:27:33 -0200
committerHisham Muhammad <hisham@gobolinux.org>2015-11-30 18:27:33 -0200
commit670a2de6921e00e4768375b2636fa94e5ce663fd (patch)
tree3b690ebc2376d11a280a462609196121c2fe68d4
parent96c929f82b811f054726f1ba3e5fd065976a1204 (diff)
parenta84aa2e78226563cd758711171c69c9c79131c53 (diff)
Merge pull request #313 from hishamhm/sreclaimable
Update calculation of used vs. free memory.
-rw-r--r--linux/LinuxProcessList.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c
index 92259514..e939b4a9 100644
--- a/linux/LinuxProcessList.c
+++ b/linux/LinuxProcessList.c
@@ -621,6 +621,8 @@ static bool LinuxProcessList_recurseProcTree(LinuxProcessList* this, const char*
static inline void LinuxProcessList_scanMemoryInfo(ProcessList* this) {
unsigned long long int swapFree = 0;
+ unsigned long long int shmem = 0;
+ unsigned long long int sreclaimable = 0;
FILE* file = fopen(PROCMEMINFOFILE, "r");
if (file == NULL) {
@@ -629,33 +631,39 @@ static inline void LinuxProcessList_scanMemoryInfo(ProcessList* this) {
char buffer[128];
while (fgets(buffer, 128, file)) {
+ #define tryRead(label, variable) (String_startsWith(buffer, label) && sscanf(buffer + strlen(label), " %32llu kB", variable))
switch (buffer[0]) {
case 'M':
- if (String_startsWith(buffer, "MemTotal:"))
- sscanf(buffer, "MemTotal: %32llu kB", &this->totalMem);
- else if (String_startsWith(buffer, "MemFree:"))
- sscanf(buffer, "MemFree: %32llu kB", &this->freeMem);
- else if (String_startsWith(buffer, "MemShared:"))
- sscanf(buffer, "MemShared: %32llu kB", &this->sharedMem);
+ if (tryRead("MemTotal:", &this->totalMem)) {}
+ else if (tryRead("MemFree:", &this->freeMem)) {}
+ else if (tryRead("MemShared:", &this->sharedMem)) {}
break;
case 'B':
- if (String_startsWith(buffer, "Buffers:"))
- sscanf(buffer, "Buffers: %32llu kB", &this->buffersMem);
+ if (tryRead("Buffers:", &this->buffersMem)) {}
break;
case 'C':
- if (String_startsWith(buffer, "Cached:"))
- sscanf(buffer, "Cached: %32llu kB", &this->cachedMem);
+ if (tryRead("Cached:", &this->cachedMem)) {}
break;
case 'S':
- if (String_startsWith(buffer, "SwapTotal:"))
- sscanf(buffer, "SwapTotal: %32llu kB", &this->totalSwap);
- if (String_startsWith(buffer, "SwapFree:"))
- sscanf(buffer, "SwapFree: %32llu kB", &swapFree);
+ switch (buffer[1]) {
+ case 'w':
+ if (tryRead("SwapTotal:", &this->totalSwap)) {}
+ else if (tryRead("SwapFree:", &swapFree)) {}
+ break;
+ case 'h':
+ if (tryRead("Shmem:", &shmem)) {}
+ break;
+ case 'R':
+ if (tryRead("SReclaimable:", &sreclaimable)) {}
+ break;
+ }
break;
}
+ #undef tryRead
}
this->usedMem = this->totalMem - this->freeMem;
+ this->cachedMem = this->cachedMem + sreclaimable - shmem;
this->usedSwap = this->totalSwap - swapFree;
fclose(file);
}

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