changeset 81:4acd9b9d3555

Linux/Android: Switch to using sysinfo() instead of /proc/loadavg.
author Brian Smith <brian@dbsoft.org>
date Tue, 24 Aug 2021 19:16:19 -0500
parents cd8f1ac1d050
children d1217903b66c
files statsunx.c
diffstat 1 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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;