Android CPU使用率

发布时间 2023-03-26 19:04:33作者: solomon-zj

CPU占用

cpu使用率原理

android系统内核是基于linux,在linux系统下cpu利用率分别为:用户态、系统态、空闲态

用户态:cpu处于用户态执行的时间

系统态:系统内核执行的时间

空闲态:空闲系统进程执行的时间

CPU利用率:CPU执行非系统空闲进程的时间/CPU总的执行时间

cpu测试方法

adb 命令

C:\Users\Administrator>adb shell top --help
usage: top [-Hbq] [-k FIELD,] [-o FIELD,] [-s SORT] [-n NUMBER] [-m LINES] [-d SECONDS] [-p PID,] [-u USER,]

Show process activity in real time.

-H      Show threads
-k      Fallback sort FIELDS (default -S,-%CPU,-ETIME,-PID)
-o      Show FIELDS (def PID,USER,PR,NI,VIRT,RES,SHR,S,%CPU,%MEM,TIME+,CMDLINE)
-O      Add FIELDS (replacing PR,NI,VIRT,RES,SHR,S from default)
-s      Sort by field number (1-X, default 9)
-b      Batch mode (no tty)
-d      Delay SECONDS between each cycle (default 3)
-m      Maximum number of tasks to show
-n      Exit after NUMBER iterations
-p      Show these PIDs
-u      Show these USERs
-q      Quiet (no header lines)

Cursor LEFT/RIGHT to change sort, UP/DOWN move list, space to force
update, R to reverse sort, Q to exit.
adb shell top -n 2 -d 1 -s 9 | findstr package
import csv,os,time


class Monitoring(object):
    def __init__(self,count,pkg):
        self.counter = count
        self.pkg = pkg
        self.cpudata=[('timestamp','cpustatus')]
        self.memdata=[('timestamp','memstatus')]


    def getCurrentTime(self):
        currentTime=time.strftime("%H:%M:%S",time.localtime())
        return currentTime

    def getCurrentDate(self):
        datetime = time.strftime("%Y-%m-%d %H_%M_%S")
        return datetime

    def monitoring_cpu(self):
        result = os.popen("adb shell top -n 2 -d 1 -s 9 | findstr " +self.pkg)
        res = result.readline().split(" ")
        print(res)

        if res == [""]:
            print("no data!!!")
        else:
            cpuvalue = list(filter(None,res))[8]
            print(cpuvalue)
            currenttime = self.getCurrentTime()
            print("current time is:",currenttime)
            print("cpu data is",cpuvalue)
            self.cpudata.append([currenttime,cpuvalue])
            print(self.cpudata)

    def get_cpu_datas(self):
        while self.counter > 0:
            self.monitoring_cpu()
            self.counter=self.counter-1
            time.sleep(1)

    def saveDataToCsv(self,data_type):
        now = self.getCurrentDate()
        if data_type == "cpu":
            csvfile=open('./cpustatus_' +now+ '.csv','w',encoding="utf-8",newline='')
            write = csv.writer(csvfile)
            write.writerows(self.cpudata)
            csvfile.close()
        elif data_type == "mem":
            csvfile = open('./memstatus_' +now+ '.csv', 'w', encoding="utf-8", newline='')
            write = csv.writer(csvfile)
            write.writerows(self.memdata)
            csvfile.close()
        else:
            print('data_type error!')


if __name__ == "__main__":
    m = Monitoring(20,"com.youku.phone")
    m.get_cpu_datas()
    m.saveDataToCsv("cpu")