diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2015-11-30 18:27:33 -0200 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2015-11-30 18:27:33 -0200 |
commit | 670a2de6921e00e4768375b2636fa94e5ce663fd (patch) | |
tree | 3b690ebc2376d11a280a462609196121c2fe68d4 | |
parent | 96c929f82b811f054726f1ba3e5fd065976a1204 (diff) | |
parent | a84aa2e78226563cd758711171c69c9c79131c53 (diff) |
Merge pull request #313 from hishamhm/sreclaimable
Update calculation of used vs. free memory.
-rw-r--r-- | linux/LinuxProcessList.c | 36 |
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); } |