]> git.neil.brown.name Git - plato.git/commitdiff
new command suspend-power-monitor
authorNeilBrown <neilb@suse.de>
Fri, 13 Dec 2013 09:26:03 +0000 (20:26 +1100)
committerNeilBrown <neilb@suse.de>
Fri, 13 Dec 2013 09:27:09 +0000 (20:27 +1100)
This logs the average current usage while suspended

utils/suspend-power-montior.py [new file with mode: 0644]
utils/suspend-state [new file with mode: 0644]

diff --git a/utils/suspend-power-montior.py b/utils/suspend-power-montior.py
new file mode 100644 (file)
index 0000000..beac3a3
--- /dev/null
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+
+import suspend
+import time
+import gobject
+from subprocess import Popen, PIPE
+
+sus_time = 0
+sus_chg = 0
+sus_msg = ''
+
+chg='/sys/class/power_supply/bq27000-battery/charge_now'
+def file_text(name):
+    try:
+        f = open(name)
+    except:
+        return ""
+    t = f.read()
+    f.close()
+    return t.strip()
+
+def file_num(name):
+    try:
+        i = int(file_text(name))
+    except:
+        i = 0
+    return i
+
+def do_suspend():
+    global sus_time, sus_chg, sus_msg
+    sus_time = time.time()
+    sus_chg = file_num(chg)
+    if not sus_msg:
+        sus_msg = time.strftime('%Y-%m-%d %H:%M:%S suspend ') + ("%d"%sus_chg) + '\n'
+    return True
+
+delta_time  = 0
+delta_chg = 0
+res_chg = 0
+def do_resume():
+    global delta_time, delta_chg, res_chg, sus_msg
+
+    delta = "%d " % (delta_chg * 3600 / delta_time)
+    l = ''
+    if False:
+        p = Popen('/root/suspend-state', shell=False, close_fds = True,
+                  stdout = PIPE)
+        try:
+            l = p.stdout.read(4096);
+        except:
+            l = ''
+            pass
+        if not l:
+            try:
+                l = p.stdout.read(4096);
+            except:
+                l = ''
+                pass
+        p.wait()
+    flight = ""
+    try:
+        fd = open("/var/lib/misc/flightmode/active")
+        fl = fd.read(1)
+        fd.close()
+        if len(fl) > 0:
+            flight = " [flight]"
+    except:
+        pass
+    try:
+        f = open('/var/log/suspend-power.log', 'a')
+        if sus_msg:
+            f.write(sus_msg)
+            sus_msg = ''
+        f.write(time.strftime('%Y-%m-%d %H:%M:%S resume  ') + ("%d "%res_chg) + delta + ("(%ds)"%delta_time) + l.strip() + flight + '\n')
+        f.close()
+    except:
+        pass
+
+    try:
+       f = open("/sys/kernel/debug/pm_debug/core_pwrdm/suspend","w")
+       f.write("0\n")
+       f.close()
+    except:
+       pass
+
+def sched_resume():
+    global sus_time, sus_chg
+    global delta_time, delta_chg, res_chg
+
+    dt = time.time() - sus_time
+    if dt <= 5:
+        return
+    delta_time = dt
+    res_chg = file_num(chg)
+    delta_chg = sus_chg - res_chg
+    gobject.idle_add(do_resume)
+
+c = gobject.main_context_default()
+handle = suspend.monitor(do_suspend, sched_resume)
+while True:
+    c.iteration()
diff --git a/utils/suspend-state b/utils/suspend-state
new file mode 100644 (file)
index 0000000..d89b63c
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+dmesg | awk '
+       /Successfully put all powerdomains/ { success = 1; done = 1; list="" }
+       /Could not enter target state/ { success=0; done = 1; }
+       /Powerdomain.*didn.t enter target state/ {
+               if (done) list = "";
+               done = 0;
+               success = 0;
+               if ($3 == "Powerdomain") list = list " " $4
+               else list = list " " $3
+       }
+       END { if (success) print "off";
+               else print "not" list
+       }'