最近在研究如何獲取iOS手機(jī)性能數(shù)據(jù)(主要是內(nèi)存),看了一圈目前主流的方法主要是兩種:1.阿里開(kāi)源的iOS自動(dòng)化測(cè)試工具tidevice;2.xcode自帶的instruments;
一、移動(dòng)端性能指標(biāo)
1.cpu
正常在20%-40%左右,超過(guò)80%需要引起重視。
2.內(nèi)存
rss:私有內(nèi)存+所有共享內(nèi)存,pss:私有內(nèi)存+比例分配共享內(nèi)存,一般vss>=rss>=pss>=uss;
需要關(guān)注退出一個(gè)頁(yè)面后,內(nèi)存是否有回落;進(jìn)行某個(gè)操作之后,內(nèi)存是否增長(zhǎng)過(guò)快。
3.fps
在30-60之間比較合理,低于30會(huì)有明顯卡頓,高于70感知不到,會(huì)浪費(fèi)圖形處理器能力。
4.耗電量
測(cè)試前先看規(guī)定時(shí)間內(nèi)手機(jī)正常待機(jī)下(重啟后待機(jī))電量消耗為多少。然后再啟動(dòng)待測(cè)試APP看看消耗的電量增加了多少取差值。
5.crash
<0.03%表示優(yōu)秀,<0.1%表示良好。
6.啟動(dòng)時(shí)長(zhǎng)
7.流量
8.gpu過(guò)度渲染
二、tidevice?
tidevice是阿里開(kāi)源的iOS自動(dòng)化測(cè)試工具,能夠提供截圖、獲取手機(jī)信息、ipa包的安裝和卸載、根據(jù)bundleID啟動(dòng)和停止應(yīng)用、獲取指定應(yīng)用性能數(shù)據(jù)、模擬xcode運(yùn)行xctest等功能;taobao-iphone-device/README.md at main · alibaba/taobao-iphone-device · GitHub
安裝tidevice
pip3 install -U "tidevice[openssl]"
tidevice可以用命令行或者python腳本方式獲取性能數(shù)據(jù)。
1.命令行方式:
tidevice applist
得到ipa 文件的 bundle id
查看性能數(shù)據(jù)
tidevice perf -B bundleID
輸出數(shù)據(jù)格式如下, 采集時(shí)間使用時(shí)間戳格式。
fps {'fps': 46, 'value': 46, 'timestamp': 1655023837471}
gpu {'device': 22, 'renderer': 20, 'tiler': 22, 'value': 22, 'timestamp': 1655023837572}
cpu {'timestamp': 1655023837647, 'pid': 2734, 'value': 0.6984475878545683, 'sys_value': 83.33333333333331, 'count': 2}
memory {'pid': 979, 'timestamp': 1655023837647, 'value': 148.61046600341797}
network {'timestamp': 1655023837613, 'downFlow': 78.1064453125, 'upFlow': 0.7294921875}
2.python腳本方式
import time
import tidevice
from tidevice._perf import DataType
t = tidevice.Device()
# perf = tidevice.Performance(t,[DataType.CPU, DataType.MEMORY, DataType.NETWORK, DataType.FPS, DataType.PAGE, DataType.SCREENSHOT, DataType.GPU])
perf = tidevice.Performance(t,DataType.MEMORY)
def callback(_type:tidevice.DataType,value:dict):
print(_type.value,value)
perf.start('com.meituan.imerchantbiz.ep',callback = callback)
time.sleep(60)
perf.stop()
可以用pyecharts自動(dòng)生成實(shí)時(shí)的性能采集報(bào)告。?
安裝pyecharts
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ pyecharts
#繪圖
x = [i for i in range(len(d))]
y = d
print(x)
print(y)
#創(chuàng)建對(duì)象,可以添加一些參數(shù)
line = Line(init_opts=options.InitOpts(width='800px',height='600px'))
#添加x軸y軸數(shù)據(jù),注意添加y軸數(shù)據(jù)的時(shí)候必須設(shè)置series_name參數(shù),表示圖例的名稱
line.add_xaxis(xaxis_data=x)
line.add_yaxis(series_name='memory', y_axis=y, is_symbol_show=True, label_opts=options.LabelOpts(is_show=False),
#is_symbol_show=True顯示點(diǎn),label_opts=opts.LabelOpts(is_show=False)不顯示值
#設(shè)置展示最大值最小值
markpoint_opts=options.MarkPointOpts(
data=[
options.MarkPointItem(type_="max",name="最大值", symbol="pin", symbol_size=[70,50]),
options.MarkPointItem(type_="min", name="最小值",symbol="pin", symbol_size=[70,50], itemstyle_opts={'color':'#3CB371'}),
]
),
#設(shè)置展示平均值
markline_opts=options.MarkLineOpts(
data=[options.MarkLineItem(type_="average",name="平均值")]
))
line.render()
os.system('open render.html')
效果示例:可以看到最大值、最小值、平均值;鼠標(biāo)移動(dòng)到某一個(gè)點(diǎn),可看到該點(diǎn)數(shù)值。
??
?3.遇到的問(wèn)題
(1)出現(xiàn)報(bào)錯(cuò):tidevice.exceptions.MuxError: ImageMountFailed
解決:可能是由于沒(méi)有devicesupport,下載對(duì)應(yīng)版本的developer,然后用xcode重新安裝wda
(2)出現(xiàn)報(bào)錯(cuò):sh: ./render.html: Permission denied
解決:這是因?yàn)闆](méi)有為程序分配讀寫(xiě)權(quán)限,chmod 755 render.html
(3)報(bào)錯(cuò):./render.html: line 1: syntax error near unexpected token `newline'
暫未解決,先改成open render.html;
三、xcode-instruments
1.獲取內(nèi)存數(shù)據(jù)-leaks
xcode-open developer tool-打開(kāi)instruments;
打開(kāi)leaks;
?選擇被測(cè)設(shè)備和被測(cè)應(yīng)用;?點(diǎn)擊啟動(dòng),項(xiàng)目會(huì)跑起來(lái),然后即可觀測(cè);
當(dāng)出現(xiàn)紅色的x時(shí),表示有內(nèi)存泄漏了;
選中紅色的x,找到leaks-call tree,在底部找到call tree,選中invert call treee,hede system libraries,然后就會(huì)顯示類和泄露的方法,雙擊查看詳情就可以開(kāi)始修改了。
Invert Call Tree 的意思是翻轉(zhuǎn)調(diào)用樹(shù),意思就是我們?cè)谡{(diào)用函數(shù)時(shí),是一層一層的,調(diào)用外層函數(shù)會(huì)一直進(jìn)入內(nèi)層,直到最后一層,有點(diǎn)遞歸的意思,當(dāng)選中?Invert Call Tree 選項(xiàng)時(shí),會(huì)直接顯示內(nèi)層函數(shù),方便我們?nèi)ふ摇7聪蜉敵稣{(diào)用樹(shù)。把調(diào)用層級(jí)最深的方法顯示在最上面,更容易找到最耗時(shí)的操作。
Hide System Libraries :隱藏系統(tǒng)庫(kù)文件。過(guò)濾掉各種系統(tǒng)調(diào)用,只顯示自己的代碼調(diào)用。?
出現(xiàn)報(bào)錯(cuò):Instruments could not acquire the necessary privileges to profile the target application.文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-730477.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-730477.html
到了這里,關(guān)于iOS性能測(cè)試方法-獲取手機(jī)內(nèi)存數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!