def getProcessAndTaskInfo(pkg): cpuProcessInfo = cpu_info_process.CpuProcessInfo() pid = utils.getPid(pkg) log_utils.log(pid) cmd = "adb shell cat proc/%s/task/*/stat" % (pid).replace("\n", "") content = utils.excuteCmd(cmd) cpuProcessInfo.getCpuInfo(pid) taskCpuLineArr = content.splitlines() tasksTotal = 0 threadCpuArr = [] for i in range(len(taskCpuLineArr)): threadCpuInfo = cpu_info_thread.CpuThreadsInfo() threadCpuInfo.parseThreadData(taskCpuLineArr[i]) tasksTotal = tasksTotal + threadCpuInfo.getTotal() threadCpuArr.append(threadCpuInfo) threadCpuArr = sorted(threadCpuArr, key=lambda x: x.total, reverse=True) for i in range(len(threadCpuArr)): item = threadCpuArr[i] log_utils.log("%s\t[%s][%s]\tused cpu \t%.2f %% \t\t%s" % (item.threadName.ljust(20), str( item.threadId).ljust(4), item.threadStatus, (item.getTotal() * 100 / cpuProcessInfo.getTotal()), item.getTotal())) log_utils.log("tasksTotal / processTotal : %.5f" % (tasksTotal / cpuProcessInfo.getTotal())) log_utils.log("cout %d : taskTotal %d processTotal %d" % (len(threadCpuArr), tasksTotal, cpuProcessInfo.getTotal()))
def getCpuInfo(self, pid): processCmd = "adb shell cat proc/%s/stat" % (pid).replace("\n", "") processStat = utils.excuteCmd(processCmd) processOriArr = processStat.split(' ') self.utime = int(processOriArr[13]) self.stime = int(processOriArr[14]) self.cutime = int(processOriArr[15]) self.cstime = int(processOriArr[16])
def getCpuInfo(self): totalCmd = "adb shell cat proc/stat" totalStat = utils.excuteCmd(totalCmd) totalOriArr = totalStat.splitlines()[0].split(' ') self.usr = int(totalOriArr[2]) self.nice = int(totalOriArr[3]) self.sys = int(totalOriArr[4]) self.idle = int(totalOriArr[5]) self.iowait = int(totalOriArr[6]) self.irq = int(totalOriArr[7]) self.softirq = int(totalOriArr[8])
def execute(pkgArr, filePath): time = utils.getTime() log_utils.log("------------catch fdcount------------") for pkg in pkgArr: pid = utils.getPid(pkg) fdCommand = 'adb shell ls proc/' + pid + '/fd | wc -l' fdCount = utils.excuteCmd(fdCommand) content = time + "|" + fdCount fdPath = filePath + pkg + "_fd.txt" file_utils.writeFileAdd(fdPath, content)
def recordMem(pid, pkgName, filePath): cmd = "adb shell dumpsys meminfo %s" % (pid) stat = utils.excuteCmd(cmd) memArr = stat.splitlines() for item in memArr: line = item.lstrip() if line.startswith("Java Heap:") or line.startswith("Native Heap:") or line.startswith("TOTAL:"): valueArr = line.split() if valueArr[0] == 'Java': java = int(valueArr[2]) elif valueArr[0] == 'Native': native = int(valueArr[2]) elif valueArr[0] == 'TOTAL:': total = int(valueArr[1]) log_utils.log(pkgName + ": \t%d/java \t %d/native \t %d/total " % (java, native, total)) memFile = filePath + pkgName + "_mem.txt" content = utils.getTime() + "|" + str(int(java / 1000)) + "|" + str(int(native / 1000)) + "|" + str( int(total / 1000)) file_utils.writeFileAdd(memFile, content + "\n")