git: 9front

Download patch

ref: 0ab5ae269bd112a42ee26bd83f2d7209a6d90aa1
parent: 1f2e251f03086cfb17f1277dc5e8061e750432c4
author: Sigrid <ftrvxmtrx@gmail.com>
date: Fri Jan 22 05:15:36 EST 2021

stats: don't query battery and temp as often when using acpi

Querying battery (or temperature) using ACPI takes quite some
resources, which makes the battery discharge faster.  It doesn't make
much sense to have it queried as often either.  So, when using ACPI:

1) set battery query period to 10s minimum
2) set temperature query period to 5s minimum

--- a/sys/src/cmd/stats.c
+++ b/sys/src/cmd/stats.c
@@ -219,7 +219,9 @@
 double	scale = 1.0;
 int	logscale = 0;
 int	ylabels = 0;
-int 	sleeptime = 1000;
+int	sleeptime = 1000;
+int	batteryperiod = 1000;
+int	tempperiod = 1000;
 
 char	*procnames[NPROC] = {"main", "input"};
 
@@ -625,6 +627,7 @@
 	}
 	m->bitsybatfd = -1;
 	if(m->batteryfd >= 0){
+		batteryperiod = 10000;
 		if(loadbuf(m, &m->batteryfd) && readnums(m, nelem(m->batterystats), a, 0))
 			memmove(m->batterystats, a, sizeof(m->batterystats));
 	}else{
@@ -636,6 +639,7 @@
 	snprint(buf, sizeof buf, "%s/dev/cputemp", mpt);
 	m->tempfd = open(buf, OREAD);
 	if(m->tempfd < 0){
+		tempperiod = 5000;
 		snprint(buf, sizeof buf, "%s/mnt/acpi/cputemp", mpt);
 		m->tempfd = open(buf, OREAD);
 	}
@@ -679,7 +683,14 @@
 int
 needbattery(int init)
 {
-	return init | present[Mbattery];
+	static uint step = 0;
+
+	if(++step*sleeptime >= batteryperiod){
+		step = 0;
+		return init | present[Mbattery];
+	}
+
+	return 0;
 }
 
 int
@@ -691,7 +702,14 @@
 int
 needtemp(int init)
 {
-	return init | present[Mtemp];
+	static uint step = 0;
+
+	if(++step*sleeptime >= tempperiod){
+		step = 0;
+		return init | present[Mtemp];
+	}
+
+	return 0;
 }
 
 void
@@ -737,10 +755,12 @@
 	if(needsignal(init) && loadbuf(m, &m->ifstatsfd) && strncmp(m->buf, "Signal: ", 8)==0 && readnums(m, nelem(m->netetherifstats), a, 1)){
 		memmove(m->netetherifstats, a, sizeof m->netetherifstats);
 	}
-	if(needbattery(init) && loadbuf(m, &m->batteryfd) && readnums(m, nelem(m->batterystats), a, 0))
-		memmove(m->batterystats, a, sizeof(m->batterystats));
-	if(needbattery(init) && loadbuf(m, &m->bitsybatfd) && readnums(m, 1, a, 0))
-		memmove(m->batterystats, a, sizeof(m->batterystats));
+	if(needbattery(init)){
+		if(loadbuf(m, &m->batteryfd) && readnums(m, nelem(m->batterystats), a, 0))
+			memmove(m->batterystats, a, sizeof(m->batterystats));
+		else if(loadbuf(m, &m->bitsybatfd) && readnums(m, 1, a, 0))
+			memmove(m->batterystats, a, sizeof(m->batterystats));
+	}
 	if(needtemp(init) && loadbuf(m, &m->tempfd))
 		for(n=0; n < nelem(m->temp) && readnums(m, 2, a, 0); n++)
 			 m->temp[n] = a[0];
--