# HG changeset patch # User Brian Smith # Date 1629850579 18000 # Node ID 4acd9b9d3555c51b18cc99821dd06afa77572f86 # Parent cd8f1ac1d05059c7a5d100c071afd3a98dba16bf Linux/Android: Switch to using sysinfo() instead of /proc/loadavg. diff -r cd8f1ac1d050 -r 4acd9b9d3555 statsunx.c --- a/statsunx.c Tue Aug 24 18:27:12 2021 -0500 +++ b/statsunx.c Tue Aug 24 19:16:19 2021 -0500 @@ -100,21 +100,23 @@ } fclose(fp); } - else if((fp = fopen("/proc/loadavg", "r"))) + else { - int cpucores = get_nprocs(); - float onemin, fivemin, fifteenmin; + struct sysinfo si; - if(fscanf(fp,"%f %f %f", &onemin, &fivemin, &fifteenmin) != EOF) + if(!sysinfo(&si)) { + int cpucores = get_nprocs(); + float f_load = 1.f / (1 << SI_LOAD_SHIFT); + double onemin = (double)si.loads[0] * f_load; + if(cpucores > 0) - *Load = ((double)onemin)/((double)cpucores); - else if(onemin < 1.0) - *Load = (double)onemin; + *Load = onemin / ((double)cpucores); + else if (onemin < 1.0) + *Load = onemin; else *Load = 1.0; } - fclose(fp); } #elif defined(__FreeBSD__) static long lastused = 0, lasttotal = 0;