xref: /aosp_15_r20/external/autotest/client/profilers/powertop/powertop.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li"""
2*9c5db199SXin LiWhat's eating the battery life of my laptop? Why isn't it many more
3*9c5db199SXin Lihours? Which software component causes the most power to be burned?
4*9c5db199SXin LiThese are important questions without a good answer... until now.
5*9c5db199SXin Li"""
6*9c5db199SXin Liimport time, os
7*9c5db199SXin Lifrom autotest_lib.client.bin import utils, profiler
8*9c5db199SXin Li
9*9c5db199SXin Liclass powertop(profiler.profiler):
10*9c5db199SXin Li    version = 1
11*9c5db199SXin Li    preserve_srcdir = True
12*9c5db199SXin Li
13*9c5db199SXin Li    # filenames: list of filenames to cat
14*9c5db199SXin Li    def setup(self, *args, **dargs):
15*9c5db199SXin Li        os.chdir(self.srcdir)
16*9c5db199SXin Li        utils.make()
17*9c5db199SXin Li
18*9c5db199SXin Li
19*9c5db199SXin Li    def start(self, test):
20*9c5db199SXin Li        self.child_pid = os.fork()
21*9c5db199SXin Li        if self.child_pid:                      # parent
22*9c5db199SXin Li            return None
23*9c5db199SXin Li        else:                                   # child
24*9c5db199SXin Li            powertop = os.path.join(self.srcdir, 'powertop') + ' -d'
25*9c5db199SXin Li            outputfile = os.path.join(test.profdir, 'powertop')
26*9c5db199SXin Li            while True:
27*9c5db199SXin Li                output = open(outputfile, 'a')
28*9c5db199SXin Li                output.write(time.asctime() + '\n')
29*9c5db199SXin Li                data = utils.system_output('%s >> %s' % (powertop, outputfile))
30*9c5db199SXin Li                output.write(data)
31*9c5db199SXin Li                output.write('\n=========================\n')
32*9c5db199SXin Li                output.close()
33*9c5db199SXin Li
34*9c5db199SXin Li
35*9c5db199SXin Li    def stop(self, test):
36*9c5db199SXin Li        os.kill(self.child_pid, 15)
37*9c5db199SXin Li
38*9c5db199SXin Li
39*9c5db199SXin Li    def report(self, test):
40*9c5db199SXin Li        return None
41