Android性能测试(内存cpufps流量GPU电量)ad
adb常用命令获取连接设备号:adbdevices列出设备所有已安装的包名(不需root权限)
adbshellpmlistpackages,可以加上grep进行筛选(windows系统使用findstrixxxx或者find)
3)查看进程列表:adbshellps,同时也能获取到应用的UID,方式如下(不需root权限):
u0a开头的都是Android的应用进程,Android的应用的UID是从10000开始,到19999结束,可以在Process。java中查看到(FIRSTAPPLICATIONUID和LASTAPPLICATIONUID),u0a后面的数字就是该应用的UID值减去FIRSTAPPLICATIONUID所得的值,所以,对于截图这个应用进程,它是u0a155,按前面的规制,它的UID就是155FIRSTAPPLICATIONUID10155。内存说明
VSSVirtualSetSize虚拟耗用内存(包含共享库占用的内存)
RSSResidentSetSize实际使用物理内存(包含共享库占用的内存)
PSSProportionalSetSize实际使用的物理内存(比例分配共享库占用的内存)
USSUniqueSetSize进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSSRSSPSSUSSadb查看单个内存占用量(均不需要root权限)单个应用的最大内存限制adbshellgetpropgrepheapgrowthlimit应用启动后分配的初始内存adbshellgetpropgrepdalvik。vm。heapstartsize单个java虚拟机的最大内存限制adbshellgetpropgrepdalvik。vm。heapsizeadb内存数据采集
使用adbshelldumpsysmeminfos命令,输出结果分以下4部分:process以进程的PSS从大到小依次排序显示,每行显示一个进程;OOMadjustment分别显示每类的进程情况category以DalvikNative。artmmap。dexmap等划分的各类进程的总PSS情况total总内存、剩余内存、可用内存、其他内存
执行结果如下图,重点取该应用的TOTAL对应的内存占用大小(KB)
PS:在apk内调用运行获取其他app的内存数据则需要root权限adbfps(每秒帧数,计算流畅度)数据采集
adb命令:adbshelldumpsysgfxinfo前提:开发者选项GPU呈现模式分析确保打开在adbshelldumpsysgfxinfo中or在屏幕上显示为线型图方法仅适用于Android原生应用,不适用于游戏
正常情况下帧率应该在16。67ms左右,1秒60帧,执行结果如下:
详细计算方法如下:首先获取执行一次命令打印出来的结果,重点关注DrawPrepareProcessExecute行下面的数据
Draw:是消耗在构建java显示列表DisplayList的时间。说白了就是执行每一个View的onDraw方法,创建或者更新每一个View的DisplayList对象的时间。
Process:表示是消耗在Android的2D渲染器执行显示列表的时间,view越多,要执行的绘图命令就越多,时间就越长
Execute:消耗在排列每个发送过来的帧的顺序的时间。或者说是CPU告诉GPU渲染一帧的时间,这是一个阻塞调用,因为CPU会一直等待GPU发出接到命令的回复。所以这个时间,一般都很短。
DrawPrepareProcessExecute完整显示一帧,这个时间要小于16ms才能保存每秒60帧。计算总数据的行数framecountrownum,计算每行渲染时间rendertimeDrawPrepareProcessExecute,当渲染时间16。67ms(100060),按照垂直同步机制,该帧已经渲染超时一旦rendertime16。67算一次jank(丢帧),一旦jank,需要用掉额外的vsync
vsyncovertime向上取整(rendertime16。67)1
比如:rendertime66。68vsyncovertime3
rendertime67vsyncovertime4
一次命令执行获得的fpsint(framecount60(framecountvsyncovertimesum))
还有一个命令是:adbshelldumpsysSurfaceFlingerlatencyLayerName这个命令能获取游戏视频应用的fps数据
其中LayerName在各个不同系统中获取的命令是不一样的
在Android6系统直接就是SurfaceView
在Android7系统中可以通过dumpsyswindowwindowsgrepmSurfacegrepSurfaceView然后通过数据截取到
在Android8系统中可以通过dumpsysSurfaceFlingergrepandroid包名获取到
执行命令结果如下:
计算方法比较简单,一般打印出来的数据是129行(部分机型打印两次257行,但是第一部分是无效数据,取后半部分),取len2的第一列数据为endtime,取len128的第一列数据为starttime
fps127((endtimestarttime)1000000。0)
至于为啥要取第一列数据,这里不做过多介绍,欢迎参看这两篇文章
老罗的文章SurfaceView原理
Android性能测试之fps获取
至于为啥要处于1000000,因为命令打印出来的是纳秒单位,要转为毫秒进行计算,127就是因为命令一次打印出来127帧的数据而已adbCPU占用率数据采集
有两种方法可以获取
1)adbshelltopn5grep,第三列就是实时监控的CPU占用率(n指定执行次数,不需root权限),这边top命令执行需要2到3s左右,一般可以采用busybox的top命令执行,效率会快很多
2)adbshelldumpsyscpuinfogrep
两种方法直接区别在于,top是持续监控状态,而dumpsyscpuinfo获取的实时CPU占用率数据adb耗电量数据采集
adb命令:adbshelldumpsysbatterystatspackagepid(Android5。0后引入)
获取单个应用的耗电量信息,具体返回结果待研究
adb命令:adbshelldumpsysbattery
出现信息解读:
ACpowered:false是否连接AC(电源)充电线
USBpowered:true是否连接USB(PC或笔记本USB插口)充电
Wirelesspowered:false是否使用了无线电源
status:1电池状态,2为充电状态,其他为非充电状态
level:58电量()
scale:100。电量最大数值
voltage:3977当前电压(mV)
currentnow:335232。当前电流(mA)
temperature:355电池温度,单位为0。1摄氏度
technology:Lipoly。电池种类
adb采集流量数据
adb命令:adbshelldumpsyspackagepidgrepUID〔通过ps命令,获取app的UID(安装后唯一且固定)〕
adbshellcatprocuidstatUIDtcprcv〔cat为查看命令,读取tcprcv获取应用接收流量信息(设备重启后清零)〕
adbshellcatprocuidstatUIDtcpsnd〔cat为查看命令,读取tcpsnd获取应用发送流量信息(设备重启后清零)〕
计算流量消耗步骤:执行一次这两条命令,获取到应用的开始接收及发送的流量然后我们再操作应用,执行一段时间测试再次执行上述2条命令可以获取到应用结束时候的接收及发送的流量,通过相减及得到应用的整体流量消耗
或者还有一种方式获取应用流量消耗:首先获取应用固定uid
dumsyspackageandroid包名grepuserId执行catprocnetxtqtaguidstatsgrepuid其中第6列代表rxbytes接收的字节数,第8列为txbytes发送的字节数
一个uid可能对应多个进程,把数据累加就行
两个时间片中间应用流量的消耗,就计算接收字节数的差值就行adb采集CPU温度
首先判断类型:
catsysclassthermalthermalzonetype
只有红框框出来的是有效的
catsysclassthermalthermalzonetemp
获取CPU温度
adb采集电池温度
dumpsysbatterygreptemperature单位0。1摄氏度
adb采集整机CPU使用率和分核CPU使用率
获取procstat文件内容(无权限限制)
总的cpu时间片是totalusernicesystemidleiowaitirqsoftirq
忙碌时间为notidleusernicesystemiowaitirqsoftirq
cpu使用率计算方法为,先取开始的total值和忙碌时间notidle,隔一段时间片,再取一次计算total2,notidle2,cpuuse(notidle2notidle)100(total2total)
PS:由于Android8权限收紧,在Android8系统手机内apk内读取文件内容为空,需要shell权限才可获取文件内容,下同adb采集各核cpu频率
读sysdevicessystemcpucpuXcpufreqscalingcurfreq文件的值,X不定,看是几核手机,scalingcurfreq是否存在也不一定,需要判断
至于为啥不取cpuinfocurfreq文件的值,原因是android6,7系统获取的时候,这个文件shell没有读取权限,需要root权限
adb获取当前运行于手机前端的应用的包名
Android6,7系统可执行
dumpsyswindowwindowsgrepmCurrentFocus
执行结果一般为类似:
mCurrentFocusWindow{81caaa5u0com。tencent。mobileqqcom。tencent。mobileqq。activity。SplashActivity}
按照一定规则把com。tencent。mobileqq提取出来即可adb采集GPU占用率,目前支持高通GPU芯片(QualcommAdreno系列)
直接apk内读取文件即可,不需要shell权限(支持到Android8)
Gpu使用率获取:会得到两个值,(前一个后一个)100使用率
adbshellcatsysclasskgslkgsl3d0gpubusy
Gpu工作频率:
adbshellcatsysclasskgslkgsl3d0gpuclk
adbshellcatsysclasskgslkgsl3d0devfreqcurfreq
Gpu最大、最小工作频率:
adbshellcatsysclasskgslkgsl3d0devfreqmaxfreq
adbshellcatsysclasskgslkgsl3d0devfreqminfreq
Gpu可用频率
adbshellcatsysclasskgslkgsl3d0gpuavailablefrequencies
adbshellcatsysclasskgslkgsl3d0devfreqavailablefrequencies
Gpu可用工作模式:
adbshellcatsysclasskgslkgsl3d0devfreqavailablegovernors
Gpu当前工作模式:
adbshellcatsysclasskgslkgsl3d0devfreqgovernor注意事项所有dumpsys命令获取性能数据,如果adbshell进入终端执行,均要求执行有shell权限,如果PC端进入终端执行,则无此要求
朝鲜观察,朝鲜农村人住什么样的房子?很多人对朝鲜农村的住房感兴趣,但不太了解。如果问朝鲜农村人住什么样的房子?要具体问题具体分析,不同地区的朝鲜农民,住的房子不一样。总的来说,朝鲜农村人的住房有以下几种。第一种是……
华为麦芒20现身搭载骁龙4Gen1支持5G网络熟悉华为产品线的朋友可能都知道华为有一个名叫麦芒的品牌,早先属于华为和电信合作的,现在属于电信了,但依然也能在华为智选的产品库中看到。近日,华为智选麦芒20正式出现在了电……
谷雨之福,更是在那秋后的五谷丰登里文龙行天下之波哥图网络窗外的雨淅淅沥沥地下着。轻开门窗,望着雨幕,我发现这雨落的是一种别样的风景,雨滴大如米粒,不急不躁温和地垂直而下,白茫茫的一片,犹如一张……
FIBA更新男篮排名中国队下降一位列第29亚大区排名第4北京时间12月8日,FIBA更新男篮排名,中国男篮以361。7分排在第29位,相比上次排名下降1位。排在世界前10位的是美国、西班牙、澳大利亚、斯洛文尼亚、法国、塞尔维亚、阿根……
保山昌宁国家二级保护动物灰鹤飞临越冬入冬后,素有雾城之称的保山市昌宁县,成群的灰鹤飞临这里,觅食越冬。翩飞的鹤群在白茫茫的晨雾中觅食起舞,打闹嬉戏。身姿优美的灰鹤映衬着秀美的田园风光,形成了当地居民难得一见……
陷入恶性竞争难于自拔,天眼查的信任危机与商业化之困编辑于斌出品潮起网于见专栏近年,随着双创浪潮的来袭,创业公司的数量也高速激增。而与之对应的企业服务,也进入红利期。以商业查询为定位的天眼查,就是这个赛道的实力玩家之……
一个人命里的钱,皆是定数人生在世命也运也命有八尺难求一丈钱,是这个世界上最美好的东西之一了,除了马老师不太喜欢以外,我想其他人没有不喜欢的了!姜子牙还没有出山之时,只能靠做点小……
朋友圈晚安问候语,晚上了,要发个朋友圈吗?。星期四今天晚上睡觉之前呢,有三件事情要告诉你,第一件没关系的,第二件都会过去的,第三件你是被爱的。晚安。。。。。。。。攒……
还珠格格第二部取景地是哪里?一据说上一部租避暑山庄拍戏成本巨大,第二部为了省时省钱,就在北影厂里自行搭建漱芳斋坤宁宫等皇宫内景,避暑山庄只作为空镜头出现;皇宫实景部分变成了北京大观园、太庙(劳动人民文……
头发太多是用了不花钱叶子水?奔六老大妈问奔六老大妈希望自己头发能变少一点,她的头发又多又黑,非常茂盛,她很羡慕别人头发少的人,她一大把年纪了,头发即不变少也不掉,还是跟她年轻的时候一样多一样好,特别羡慕别人头发少少的……
简单聊聊带孩子运动需要注意的几点昨天在五福堂公园,带乐乐和呵呵跑了3。3公里,这次是乐乐状态在线,呵呵老是在后面想休息。对比于上次跑步两人状态互换的情况来看,每个小朋友运动的状态可能不仅仅决定于他的体力……
两双次数超越詹姆斯,这交易湖人亏大了,赶紧换掉他吧北京时间1月19号,NBA的赛事并不多,仅仅两场而已。但是,有关于球队交易的新闻并没有停止。据奇才随队记者NeilDalal报道,奇才不会在交易截止日期前用比尔交换大量资产。……