power_status: Fix weighted average calculation
In incremental stat, time_in_state sysfs file
contains log since boot. When calculating weighted
average, data before test start need to be subtracted.
BUG=b:170955211
TEST=power_Speedometer2 on lazor
Change-Id: I5716d03818d7f2460cfc6f4c6fb568befadccefe
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2476353
Reviewed-by: Mengqi Guo <mqg@chromium.org>
Tested-by: Puthikorn Voravootivat <puthik@chromium.org>
Commit-Queue: Puthikorn Voravootivat <puthik@chromium.org>
diff --git a/client/cros/power/power_status.py b/client/cros/power/power_status.py
index ed17541..681506e 100644
--- a/client/cros/power/power_status.py
+++ b/client/cros/power/power_status.py
@@ -717,7 +717,7 @@
self.name = name
self.incremental = incremental
self._stats = self._read_stats()
-
+ self._first_stats = self._stats.copy()
def refresh(self):
"""
@@ -735,12 +735,15 @@
Turns a dict with absolute times (or percentages) into a weighted
average value.
"""
- total = sum(self._stats.itervalues())
+ stats = self._stats
+ if self.incremental:
+ stats = self.do_diff(stats, self._first_stats)
+
+ total = sum(stats.itervalues())
if total == 0:
return None
- return sum((float(k)*v) / total for (k, v) in self._stats.iteritems())
-
+ return sum(float(k) * v / total for k, v in stats.iteritems())
def _supports_automatic_weighted_average(self):
"""