【游戲測試】客戶端性能 - drawcall 工具鏈

原文由資深游戲測試開發(fā)工程師 陳子昂,發(fā)表于TesterHome社區(qū)使碾,點擊原文鏈接可與作者交流。

一般 drawCall 可以理解成是調(diào)用次數(shù),到底是調(diào)用了什么轰绵,一般性能測試里面會關(guān)注哪些。
提交給程序尼荆,Good 程序會說:這個地方可能是真有問題左腔,我有空時看看。
Bad 結(jié)果 程序:這真沒法修捅儒,一定讓我對著這個修液样,我就原地下線了。
那么應(yīng)該怎么做巧还,本文會去掉公式和一些學(xué)術(shù)詞匯鞭莽。

簡述下基本概念

移動端目前主流還是 OpenGL,drawCall 是 OpenGL 的繪制次數(shù),也是優(yōu)化參考指標麸祷,可以占到 4 分之一澎怒。
每次 Cpu 演算好,預(yù)設(shè)好頂點數(shù)據(jù)阶牍,在繪圖前喷面,會把頂點數(shù)據(jù)星瘾,位置,法線惧辈,顏色琳状,紋理坐標,切線通知 Gpu 進行渲染繪制
drawcall 數(shù)量越多就分別進行對不同的頂點數(shù)據(jù)進行上面一樣的渲染繪制的次數(shù)越多盒齿,次數(shù)等于 drawcall 數(shù)量念逞。
drawcall 數(shù)越多,Cpu 不會處理不過來(有些文章會說堵在 Cpu县昂,于是 Cpu 笑了)肮柜,這樣 Gpu 渲染承擔的就更多。
drawcall 會對物件進行分類倒彰,不同分類相似度高的审洞,drawcall 會緩存一部分,因為可以批量處理待讳。

切入點

我們說下 drawcall 過高芒澜,可以找到一處切入點的

1.設(shè)置場景內(nèi)粒子,但是只有發(fā)射创淡,沒有銷毀痴晦。

游戲測試會怎么做,首先編寫好用例琳彩,tag=客戶端性能測試
關(guān)鍵性:執(zhí)行反復(fù)操作一個特定事務(wù)誊酌,操作行為一般為 準備就緒-A-B-A-B,不會摻雜到其他的操作露乏。
事務(wù)特定性注意是不能用打開關(guān)閉背包這種碧浊,需要對場景進行實際操作的,如果 2D 游戲瘟仿,去通過打開關(guān)閉把背景界面降低到下一層做遮擋也是可以的箱锐。

3D 游戲事務(wù)實例:

準備就緒-移動到水波淋漓的湖邊(A可見水波淋漓的湖邊),B-丟出了一個特效技能比如6級不規(guī)則體冰球劳较,A-可見水波淋漓的湖邊驹止,B-丟出了一個特效技能6級不規(guī)則體冰球。

操作方式:
綁定自動化測試框架優(yōu)于人工測試观蜗,原因是機器每次的執(zhí)行步驟是嚴格一致的臊恋,而人不一定會嚴格按照操作步驟。
啟動一個新的進程對自動化測試框架做監(jiān)聽服務(wù)墓捻,由這個進行收集 drawcall捞镰,最好的方式是由該進程是一個接收數(shù)據(jù)的進程,程序 rpc 用字節(jié)流形式進入接收數(shù)據(jù)的管道。

準備就緒環(huán)境 - 最好是有一個 mock 服務(wù)岸售,因為 gm 指令可以移動到指定位置,但是造號正常情況下需要先過引導(dǎo)厂画,達成技能冰球條件凸丸,比如滿足某個等級冰球。
在跑自動化的時候袱院,可以通過 mock 服務(wù) (聚合多個接口屎慢,支持組合條件生成的創(chuàng)號規(guī)則) 返回造號成功后,自動銜接自動化進行采集忽洛。
程序或者調(diào)用引擎收集方式都應(yīng)該可以獲得以下數(shù)據(jù)腻惠。

{"type":"湖面","triangles":200,"Instance":2,"total_triangle":400}  
{"type":"冰球","triangles":1200,"Instance":2,"total_triangle":2400}  

1 個湖面會有好多個湖面,1 個冰球也會不止 1 個 type=冰球的欲虚,所以上面數(shù)據(jù)是一個對象集灌,應(yīng)該是一個對象數(shù)組的形式,數(shù)組的個數(shù)也就是 drawCall 次數(shù)。

數(shù)據(jù)敏感度:
1.多次操作可以關(guān)注 Instance 實例數(shù)复哆。
2.類型是否合理欣喧,如果視野內(nèi)湖面很大,但是冰球數(shù)很多梯找,也是需要記錄的
以上自動化腳本是可以預(yù)設(shè)的唆阿,數(shù)據(jù)敏感度的斷言也是一樣的。

自動化采集的話锈锤,會在同一個位置做二次復(fù)查驯鳖,才會定位 Bug,這個作用是查看復(fù)現(xiàn)步驟久免。

Bug 產(chǎn)出:數(shù)據(jù)敏感度部分 +drawcall 持續(xù)增長 就是該工具 Bug 產(chǎn)出浅辙。

那個場景有一些動圖(2D 看場景背景圖比如一些特效,3D 要看當前攝像機鏡頭妄壶,測試時請先固定攝像機鏡頭)摔握,并且渲染范圍比較大,則對性能影響更大丁寄。

所需基建能力
1.錄屏方案:安卓錄制屏幕的氨淌,因為 adb 會占用 adb forward,并且只能 3 分鐘一個視頻,如果其他錄制方案的伊磺,記得端口號和 adb 用同一個盛正。
2.多媒體處理能力:ffmpeg 去開發(fā)根據(jù)視頻長度去抽幀,作用很大屑埋,最大作用不是按一幀一張事后拆不用堵塞 IO豪筝。
3.logcat 日志,不同版本的內(nèi)容數(shù)量有差別。

產(chǎn)出打法
1.開始記錄監(jiān)聽的地方续崖,開始錄制屏幕 (需要提高分辨率的)敲街,完成后,最后在使用多媒體處理能力基建,drawcall 高的地方提供一組照片严望。
logcat 日志加上面的多艇,可以做操作復(fù)現(xiàn)。
程序會獲得對應(yīng) Bug 單子:里面附加可見測試用例像吻,drawcall 高的地方有一組圖片和 logcat 日志峻黍。

2.根據(jù)上面的html

{"type":"湖面","triangles":200,"Instance":2,"total_triangle":400}[]數(shù)組

和另外一個數(shù)組,統(tǒng)計出一個完整的數(shù)據(jù)
測試用例總會有個名字的

sessionId = 用例名操作1次(事務(wù)的一半)
sessionId:{
        "type":"湖面",
      “image":"素材的位置"拨匆,"drawCall_nums":50,"Instance_nums":10姆涩,
}

drawCall_nums=上面同一個類型數(shù)組總數(shù),Instance_nums 是實例總和
drawCall_nums 和 type 不合理的數(shù)據(jù)是通過公式計算出來的惭每。

多個 sessionId 就能根據(jù)一次的結(jié)果去分析到 drawCall_nums 和 Instance_nums 的上升和下降骨饿。所以這里看到需要預(yù)約一個標準,也可以找程序要一個標桿場景洪鸭,如果比這個還要高的肯定是要修復(fù)的样刷。

3.歷史數(shù)據(jù),每個階段跑一下览爵,看趨勢置鼻。

4.補充信息

根據(jù)到這個排查出的結(jié)果,去游戲內(nèi)復(fù)現(xiàn)后找到具體函數(shù)執(zhí)行的蜓竹,看 Profiles箕母,等于是通過多組自動化行為去達到掃描和分工合作(一個人使用,一個人去編輯器版本那邊拿補充信息)俱济。

尾聲

事務(wù)該如何找和有啥其他技巧嘶是,請等待下個文章: 客戶端性能熱力圖


以上是今天的分享,你學(xué)廢了嗎~
想學(xué)習更多干貨知識和前沿技術(shù)蛛碌?
想結(jié)識測試行業(yè)大咖和業(yè)界精英聂喇?
>> 歡迎關(guān)注2022 MTSC大會(第十屆中國互聯(lián)網(wǎng)測試開發(fā)大會)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蔚携,隨后出現(xiàn)的幾起案子希太,更是在濱河造成了極大的恐慌,老刑警劉巖酝蜒,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件誊辉,死亡現(xiàn)場離奇詭異,居然都是意外死亡亡脑,警方通過查閱死者的電腦和手機堕澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門邀跃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蛙紫,你說我怎么就攤上這事拍屑。” “怎么了惊来?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵丽涩,是天一觀的道長。 經(jīng)常有香客問我裁蚁,道長,這世上最難降的妖魔是什么继准? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任枉证,我火速辦了婚禮,結(jié)果婚禮上移必,老公的妹妹穿的比我還像新娘室谚。我一直安慰自己,他們只是感情好崔泵,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布秒赤。 她就那樣靜靜地躺著,像睡著了一般憎瘸。 火紅的嫁衣襯著肌膚如雪入篮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天幌甘,我揣著相機與錄音潮售,去河邊找鬼。 笑死锅风,一個胖子當著我的面吹牛酥诽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播皱埠,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼肮帐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了边器?” 一聲冷哼從身側(cè)響起训枢,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎饰抒,沒想到半個月后肮砾,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡袋坑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年仗处,在試婚紗的時候發(fā)現(xiàn)自己被綠了眯勾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡婆誓,死狀恐怖吃环,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洋幻,我是刑警寧澤郁轻,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站文留,受9級特大地震影響好唯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜燥翅,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一骑篙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧森书,春花似錦靶端、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至猖毫,卻和暖如春台谍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鄙麦。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工典唇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胯府。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓介衔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親骂因。 傳聞我的和親對象是個殘疾皇子炎咖,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容