mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 10:52:08 +02:00
Memory (Linux): try improving performance
This commit is contained in:
@@ -1,42 +1,52 @@
|
||||
#include "memory.h"
|
||||
#include "common/io/io.h"
|
||||
#include "util/mallocHelper.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
const char* ffDetectMemory(FFMemoryResult* ram)
|
||||
{
|
||||
FILE* meminfo = fopen("/proc/meminfo", "r");
|
||||
FF_AUTO_CLOSE_FILE FILE* meminfo = fopen("/proc/meminfo", "r");
|
||||
if(meminfo == NULL)
|
||||
return "Failed to open /proc/meminfo";
|
||||
|
||||
char* FF_AUTO_FREE line = NULL;
|
||||
size_t len = 0;
|
||||
|
||||
uint32_t memTotal = 0,
|
||||
uint64_t memTotal = 0,
|
||||
shmem = 0,
|
||||
memFree = 0,
|
||||
buffers = 0,
|
||||
cached = 0,
|
||||
sReclaimable = 0;
|
||||
uint8_t count = 0;
|
||||
|
||||
while (getline(&line, &len, meminfo) != EOF)
|
||||
{
|
||||
if(!sscanf(line, "MemTotal: %u", &memTotal))
|
||||
if(!sscanf(line, "Shmem: %u", &shmem))
|
||||
if(!sscanf(line, "MemFree: %u", &memFree))
|
||||
if(!sscanf(line, "Buffers: %u", &buffers))
|
||||
if(!sscanf(line, "Cached: %u", &cached))
|
||||
sscanf(line, "SReclaimable: %u", &sReclaimable);
|
||||
switch (line[0])
|
||||
{
|
||||
case 'B':
|
||||
if (sscanf(line, "Buffers: %" PRIu64, &buffers) > 0)
|
||||
if (++count >= 6) goto done;
|
||||
break;
|
||||
case 'C':
|
||||
if (sscanf(line, "Cached: %" PRIu64, &cached) > 0)
|
||||
if (++count >= 6) goto done;
|
||||
break;
|
||||
case 'M':
|
||||
if(sscanf(line, "MemTotal: %" PRIu64, &memTotal) > 0 || sscanf(line, "MemFree: %u", &memFree) > 0)
|
||||
if (++count >= 6) goto done;
|
||||
break;
|
||||
case 'S':
|
||||
if(sscanf(line, "Shmem: %" PRIu64, &shmem) > 0 || sscanf(line, "SReclaimable: %u", &sReclaimable) > 0)
|
||||
if (++count >= 6) goto done;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(meminfo);
|
||||
|
||||
ram->bytesTotal = memTotal * (uint64_t) 1024;
|
||||
if(ram->bytesTotal == 0)
|
||||
return "Failed to read MemTotal";
|
||||
else
|
||||
ram->bytesUsed = (memTotal + shmem - memFree - buffers - cached - sReclaimable) * (uint64_t) 1024;
|
||||
done:
|
||||
ram->bytesTotal = memTotal * 1024lu;
|
||||
ram->bytesUsed = (memTotal + shmem - memFree - buffers - cached - sReclaimable) * 1024lu;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user