Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 187a6aeb authored by Greg Hackmann's avatar Greg Hackmann
Browse files

Prefer new zram ABI



Starting with Linux 4.1, reading from /dev/block/zram*/mem_used_total
logs this warning:

"Attribute mem_used_total (and others) will be removed. See zram
documentation."

mem_used_total and several related counters are now consolidated under a
new node mm_stat.  Prefer that when it's available.

Bug: 25951511

Change-Id: I0862c3cd1af5d003158aca6be42db25e4bebe7c7
Signed-off-by: default avatarGreg Hackmann <ghackmann@google.com>
parent 35fc197c
Loading
Loading
Loading
Loading
+31 −9
Original line number Diff line number Diff line
@@ -595,6 +595,36 @@ enum {
    MEMINFO_COUNT
};

static long get_zram_mem_used()
{
#define ZRAM_SYSFS "/sys/block/zram0/"
    FILE *f = fopen(ZRAM_SYSFS "mm_stat", "r");
    if (f) {
        long mem_used_total = 0;

        int matched = fscanf(f, "%*d %*d %ld %*d %*d %*d %*d", &mem_used_total);
        if (matched != 1)
            ALOGW("failed to parse " ZRAM_SYSFS "mm_stat");

        fclose(f);
        return mem_used_total;
    }

    f = fopen(ZRAM_SYSFS "mem_used_total", "r");
    if (f) {
        long mem_used_total = 0;

        int matched = fscanf(f, "%ld", &mem_used_total);
        if (matched != 1)
            ALOGW("failed to parse " ZRAM_SYSFS "mem_used_total");

        fclose(f);
        return mem_used_total;
    }

    return 0;
}

static void android_os_Debug_getMemInfo(JNIEnv *env, jobject clazz, jlongArray out)
{
    char buffer[1024];
@@ -680,15 +710,7 @@ static void android_os_Debug_getMemInfo(JNIEnv *env, jobject clazz, jlongArray o
        if (*p) p++;
    }

    fd = open("/sys/block/zram0/mem_used_total", O_RDONLY);
    if (fd >= 0) {
        len = read(fd, buffer, sizeof(buffer)-1);
        close(fd);
        if (len > 0) {
            buffer[len] = 0;
            mem[MEMINFO_ZRAM_TOTAL] = atoll(buffer)/1024;
        }
    }
    mem[MEMINFO_ZRAM_TOTAL] = get_zram_mem_used() / 1024;
    // Recompute Vmalloc Used since the value in meminfo
    // doesn't account for I/O remapping which doesn't use RAM.
    mem[MEMINFO_VMALLOC_USED] = get_allocated_vmalloc_memory() / 1024;